优化算法,找到所有局部最大值

时间:2014-03-26 15:01:26

标签: algorithm

我目前正在研究用于查找所有局部最大值的算法的时间复杂度。根据{{​​3}},1D阵列的时间复杂度为O(log N)。是仅仅找出一个最大值?

如果我想找到所有最大值怎么办?有没有办法找到复杂度小于蛮力法O(N)的所有复合物?

谢谢。

2 个答案:

答案 0 :(得分:2)

正如我在评论中所述,对于[1,2,1,2,...]的反例,有O(n)局部最大值,因此输出大小本身为O(n)

另一种证明找到所有局部最大值的方法是Omega(n)问题,如下所示。

首先,请注意找到全局最大值是Omega(n)问题。
现在,我们将代表以下算法来解决数组A中的全局最大值:

  1. A
  2. 中查找所有本地最大值
  3. 将(1)中找到的元素视为新数组A
  4. 如果尺寸(A)> 1 - 返回1
  5. else:A中唯一的元素是全局最大值。
  6. 算法的正确性非常简单,我们迭代地丢弃元素,并且永远不会丢弃全局最大值。

    复杂度:

    • 请注意,在每个步骤中,至少删除size(A)/2个元素 (为什么?)
    • 这为我们提供了O(d(n)) + O(d(n/2)) + O(d(n/4)) + ... + O(d(1))
    • 的复杂性
    • 上述O(d(n))是最佳“查找所有局部最大值”算法的复杂性(步骤1)。
    • 现在,鉴于这一事实,并假设(朝向矛盾)d(n)o(n) [小o符号d(n)渐近“弱” n)] - 我们认为d(n) + d(n/2) + ... + d(1)位于o(n + n/2 + ... + 1) = o(2n) = o(n)

    因此,我们在o(n)算法中解决了全局最大值,但它是Omega(n)问题 - 矛盾
    因此,步骤1中的算法必须是Omega(n)

答案 1 :(得分:0)

amit的下限是正确的,但没有那么有趣,因为正在考虑的实例可能具有Omega(n)局部最大值。

事实证明,在计算的随机细胞探针模型与不经意的对手中,即使发现第二个局部最大值也需要Omega(n)探针预期。从数组1..n开始,随机选择其中一个元素增加2.这使得第二个局部最大值(除非选择了最后一个元素),第一个当然是最后一个元素数组。该算法在探测到扰动位置之前不会了解第二局部最大值的位置。通过姚明的引理,一些确定性算法对这个不经意的对手是最优的,因此找到第二个局部最大值的预期时间至少是(n + 1)/ 2个探测器。

相关问题