嵌套循环的大时间复杂度

时间:2018-11-02 10:10:50

标签: loops for-loop nested time-complexity big-o

有人可以告诉我以下嵌套循环的时间复杂度是什么吗?

 for(i=1;i<n;i+=i)
 {
    for(j=1;j<n;j*=j)
       //O(1)
 }

根据我的说法是O(log(n)* log(log(n)) 由于外循环将运行log(n)次,因为我们每次迭代都将i有效乘以2。 在内部循环中,我们在每次迭代中对循环计数器j求平方。 因此,最终的复杂度是这两者的乘积。 这是正确的还是其他答案? 在此先感谢:D

1 个答案:

答案 0 :(得分:1)

是的,复杂度为O(log2(n) * log2(log2(n)))

内部循环的索引j遵循递归关系j(k) = j(k-1)^2,即j(k) = j(0)^(2^k)(归纳证明)。假设j(0) = 2(而不是1,因为否则您将无限期地循环)。

因此,内部循环的迭代次数k会得到验证

    j(k) >= n
<=> 2^(2^k) >= n
 => k >= log2(log2(n))

外部循环的迭代次数为> = log2(n)