为什么CompareToAll的最快运行时间是O(1)?

时间:2011-02-27 18:47:05

标签: big-o

在使用CompareToAll methodolgy实现数组中的get Max数字时增强不将每个数字与每个其他数字进行比较,而是将每个数字与仅在其后面的数字进行比较。实质上,当前数字之前的每个数字都已经与当前数字进行了比较。因此,如果仅比较当前数字之后出现的数字,则算法仍然是正确的。 现在我明白为什么最坏情况下的运行时间是O(n2)O(“n square”) 但我无法理解的是为什么最快的运行时间是O(1)。

我想它应该在最好的情况下等于O(n) Big-O analysis for best case is copied from

2 个答案:

答案 0 :(得分:1)

对于已排序的数组,最快的时间是O(1),因为您可以根据排序方向选择第一个或最后一个元素。但是,对于未排序的数组,我无法预见任何能够在小于O(n)时间内找到最大值的算法。

为什么:假设我们有一个数组,其中n个元素没有已知的顺序。选择第一个元素;可能这是最大值。但是,你怎么知道第二个元素是不是最大值?你必须测试它。同样,你怎么知道第三个元素不是最大值?等等,进行n次测试。

答案 1 :(得分:0)

Max()函数的最低复杂度为O(n),而不是O(1),因为您必须至少查看一次这些数字。

您只需要将每个数字与之前的最大值进行一次比较。这是Python中的代码:

def max(a):
    assert len(a) > 0
    current = a[0]
    for x in a[1:]:
       if x > current: current = x
    return current