具有外循环的双while循环算法的渐近增长率执行log(n)次

时间:2015-09-03 18:02:52

标签: algorithm asymptotic-complexity

此算法的渐近增长率(取决于n)是多少?

i = 1; // executed 1 time
while( i ≤ n) {
    j = 1; // executed log(n) times

    while( j ≤ i) {
       j = j + 1; // ?
    }

    i = 2*i; // executed log(n) times
}

当n等于10时:

| i iterations | j itérations
| i=1          | j=1
| i=2          | j=1 j=2 
| i=4          | j=1 j=2 j=3 j=4
| i=8          | j=1 j=2 j=3 j=4 j=5 j=6 j=7 j=8

外环(i)影响执行log(n)

内循环(j)执行多少次?

2 个答案:

答案 0 :(得分:3)

这应该是O(n)

外循环的最后一次迭代具有内循环的n次迭代。外循环的倒数第二次迭代具有内循环的n/2次迭代。第三次到最后一次迭代有n/4

n + n/2 + n/4 + ... = 2*n

请参阅geometric progressions了解允许您计算总和的公式。

答案 1 :(得分:0)

当n为4时,外循环的最后一次执行导致内循环执行4次。当你将n从4加倍到8时,外循环再次执行,并且在最后一次执行外循环时,内循环执行8次。将它再次加倍到16,外部循环将再次执行,内部循环将执行16次。因此,输入加倍会导致执行时间加倍(再加上一个外循环的时间,当n变大时,这变得无关紧要)。

所以O(n)。