O(logn)外循环内O(n)的时间复杂度

时间:2018-10-03 02:19:20

标签: python algorithm

我试图弄清楚该算法的时间复杂度。 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))。我想知道这怎么可能?

1 个答案:

答案 0 :(得分:4)

线性获得的迭代总数取决于n。这就是n / 2 + n / 4 + n / 8 + ... = n(1/2 + 1/4 + 1/8 + ...),这就是O(n)所表示的。