此算法的渐近增长率(取决于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)执行多少次?
答案 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)。