Algorithm 外循环执行对数(n)次的双while循环算法的渐近增长率

Algorithm 外循环执行对数(n)次的双while循环算法的渐近增长率,algorithm,asymptotic-complexity,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 |

此算法的渐进增长率是多少(取决于
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)矫揉造作执行了多少次?

这应该是
O(n)

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

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

有关允许您计算总和的公式,请参阅。

当n为4时,外循环的最后一次执行将导致内循环执行4次。当您将n从4加倍到8时,外部循环将再次执行一次,在最后一次执行外部循环时,内部循环将执行8次。再次将其加倍到16,外部循环将再次执行,内部循环执行16次。因此,将输入加倍会导致执行时间加倍(再加上一个外循环的时间,随着n变大,这个时间变得不重要)


所以O(n)。

你那边有没有试过?如果你不知道,你可以简单地测量它