在使用CompareToAll methodolgy实现数组中的get Max数字时增强不将每个数字与每个其他数字进行比较,而是将每个数字与仅在其后面的数字进行比较。实质上,当前数字之前的每个数字都已经与当前数字进行了比较。因此,如果仅比较当前数字之后出现的数字,则算法仍然是正确的。 现在我明白为什么最坏情况下的运行时间是O(n2)O(“n square”) 但我无法理解的是为什么最快的运行时间是O(1)。
我想它应该在最好的情况下等于O(n) Big-O analysis for best case is copied from
答案 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