嵌套在另一个O(log n)循环中的O(log n)的时间复杂度

时间:2018-08-13 17:18:00

标签: python algorithm time-complexity big-o

我对以下算法的时间复杂度有些困惑。我知道插入到堆中的是底数为2的O(log n),但是嵌套在里面的while循环似乎是底数为3的O(log n)。时间复杂度是否为O(log n的底数3)? * O(以2为底的log n)?

i = 1
while i < len(L):
    insert L[i] into heap
    i = i*3

1 个答案:

答案 0 :(得分:2)

由于i呈指数增长,因此将floor(log3(L))元素插入heap

假设插入为O(log(n)),其中n是堆中已经存在的元素数(不是数组L的元素,则为{{ 1}}插入最初为空的堆将具有复杂性m

根据斯特林近似值O(log 1 + log 2 + log 3 + ... log (m - 1)) = O(log([m - 1]!) = O(log(m!))

用插入数代替,而忽略了阴影的ln(n!) = n ln n - n + O(ln n)字词,我们有:

O(n)