loglogn该代码的时间复杂度如何?

时间:2018-11-06 13:39:51

标签: algorithm

我是一个初学者,我很困惑这段代码的时间复杂度如何loglogn。

while(i<=n)
{
i = i*i;
}

2 个答案:

答案 0 :(得分:2)

对于n = k 16

iteration 1: i = k
iteration 2: i = k^2
iteration 3: i = k^4
iteration 4: i = k^16

因此,基本上,您可以证明您正在为k m 重复log(m)次,其中m = log(k)。

答案 1 :(得分:0)

让我们将i的起始值定义为 j ,然后在第一次迭代的 start 中,将i的值设为 j 。在迭代结束时,i的值为 j 2

现在进行下一次迭代,最后,i的值为 j 4 。如果在第 k 次迭代的开始,值是 j l ,那么在迭代结束时,< em> j 2×l

所以这意味着在第 k 次迭代中,该值将为 j 2 k 。我们将一直迭代直到达到 i 的值,例如 i> j ,这意味着:

j 2 k > n

我们可以在此处将 log j 应用于这两个部分:

2 k > log j n

log 2 都可以:

k> log 2 (log j n)

对于发生这种情况的第一个 k

,循环将结束。因此,这意味着这将在 log 2 (log j n) log 2 (log j n)+1 迭代,但是 +1 在这里无关紧要。

时间复杂度因此为: O(log 2 (log j n)) j i 的初始值, n while循环中的边界。