你如何找到这些循环的渐近时间复杂度?

时间:2016-06-05 17:18:30

标签: algorithm time-complexity nested-loops

如何找到此代码的渐近时间复杂度?

for i=1 to n do
    j=2
    while j<i do
        j=j*j

在我的笔记中,我有答案O(n * log(logn)),但没有解释。

1 个答案:

答案 0 :(得分:2)

第一个for循环运行n次。内部循环以正方形进行迭代,因此需要O(loglogn)因此,总复杂度为O(n*log(logn))

要理解为什么在广场中迭代需要O(log(logn))次,请看这种方式:

假设n与2 ^ 16一样大。

Initially: j = 2
1st step : j = 2^2
2nd step : j = 2^4
3rd step : j = 2^8
4th step : j = 2^16. 

因此只需要4个步骤即loglog(2 ^ 16)。

所以现在对于任何n = 2^k,你从2开始,每次你正在平方时。所以,你可以做到最近O(logk)平方来达到k。自n = 2^k起,k = log(n)因此O(logk)O(log(logn)).相同