我试图弄清楚该算法的时间复杂度。 A是数组输入。顺便说一句,该代码无法运行,只是出于演示目的。
def func(A):
result = 0
n = len(A)
while n > 1:
n = n/2
result = result + min(A[1,...,n])
return result
这假定数组A的长度为n。
我假设其时间复杂度为O(n(log n)),因为while循环的复杂度为O(log n),而min函数的复杂度为O(n)。但是,此函数显然具有复杂度O(n)而不是O(n(log n))。我想知道这怎么可能?
答案 0 :(得分:4)
线性获得的迭代总数取决于n。这就是n / 2 + n / 4 + n / 8 + ... = n(1/2 + 1/4 + 1/8 + ...),这就是O(n)所表示的。