以下代码的时间复杂度是多少?

Posted

技术标签:

【中文标题】以下代码的时间复杂度是多少?【英文标题】:What's the time complexity of the following code? 【发布时间】:2016-09-10 15:39:45 【问题描述】:

a = 2;
while (a <= n)

  for (k=1; k <= n; k++)
  
    b = n;
    while (b > 1)
      b = b / 2;
  
  a = a * a * a;

我正在努力处理外部 while 循环,即 loglogn,我不明白为什么。如果最后一行是a = a * a * a * a;,时间复杂度会如何变化?

for循环是O(n),内部循环是O(logn)

所以总的来说,O(n*logn*loglogn)

【问题讨论】:

【参考方案1】:

a 值将是: a = 2 2^3 2^9 2^27 2^81 ... 等等。

现在假设a的最后一个值为2^(3^k)

其中 k 是外部 while 循环的迭代次数。

为简单起见,我们假设a = n^3,所以2^(3^k) = n^3

所以3^k = 3*log_2(n) =&gt; k = log_3(3log_2(n)) = ?(loglogn)

如果最后一行是a = a * a * a * a,则时间复杂度将保持为?(loglogn),因为k = log_4(4log_2(n)) = ?(loglogn)

【讨论】:

【参考方案2】:

循环运行 n 次,内部循环的时间复杂度为 log n,因此总时间复杂度为 O(n log n)

【讨论】:

以上是关于以下代码的时间复杂度是多少?的主要内容,如果未能解决你的问题,请参考以下文章

以下代码的时间复杂度是多少,如何将其更改为线性或对数时间复杂度?

以下递归算法的时间复杂度是多少?

该算法的比特成本时间复杂度是多少(Java 示例)?

这个特定代码的时间复杂度是多少?

该代码的时间复杂度是多少?

谁能告诉我代码的时间复杂度是多少?