嵌套循环的大O时间复杂度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌套循环的大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

答案

是的,复杂性是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)

以上是关于嵌套循环的大O时间复杂度的主要内容,如果未能解决你的问题,请参考以下文章

计算嵌套循环的大 O

如何计算嵌套在 for 循环中的 while 循环的时间复杂度?

为 for 循环确定不同的大 O 复杂度

一般三个嵌套循环的 O(n^3) 复杂度的数学推导

为啥使用 2 个嵌套循环(O(n^2) 复杂度)解决两个和问题,在仅更改循环计数器逻辑时运行得更快?

[算法]复杂度分析