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

时间:2016-09-10 15:39:45

标签: function loops time-complexity

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

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)

2 个答案:

答案 0 :(得分:1)

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

现在让我们假设a的最后一个值是2^(3^k)

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

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

所以3^k = 3*log_2(n) => k = log_3(3log_2(n)) = (loglogn)

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

答案 1 :(得分:-3)

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