这个循环的时间复杂性

时间:2016-11-27 17:41:21

标签: c loops time-complexity

for (int i=0; i<n; i++)
{
 int j = 2;
 while (j<i)
    j = j * j;
}

我认为它的n * log(n)作为第一个循环迭代n次,但我不确定第二个循环。

1 个答案:

答案 0 :(得分:4)

由于这个问题具有家庭作业的所有标志,我不会直接给出最终答案,而是给你一些关于如何自己到达那里的指导。

你是对的,你需要对内循环的迭代次数进行限制以确定整体界限。为了评估这一点,考虑值j的形式将在该循环的连续迭代中采用:2,4,16,256等。根据该数字编写该数字的封闭公式是有用的。循环迭代次数。

显然,序列包括增加2的幂,但不是线性增加的幂。我们有2 1 ,2 2 ,2 4 ,2 8 ,....此时,但是,您应该识别模式,并且能够在内部循环的j次迭代之后为k的值编写公式,因为 k = 0 ,1,2,3 ......让内部 k )指定该公式。 (具体公式留作练习。)

那么对于给定的i值,将执行多少次内循环迭代?变量j在循环迭代时获取 Inner k )的值,循环在j >= i时终止,因此迭代次数为最小值 k ,使 Inner k )至少与i一样大,并且最大迭代次数为该循环最少 k ,使 Inner k )至少为n。现在,估计n内部 k ),并解决 k

其余的细节再次留作练习。