也许是一个有点愚蠢的问题,但这段代码的运行时分析让我感到困惑。
int i, j;
int k = 0;
for(i = 1; i<= n; i*= 2){
for (j = 1; j <= i; j++){
k += (i+j);
}
}
我知道外层循环运行时间将为 log(base2)n ,并且运行时间的总价值是外层循环的运行时间 * 内层循环的运行时间。我只是对内部循环有点困惑,我知道内部循环是根据 i 的值进行迭代的。那么内部循环运行时间也是 log(base2)n 那么整体运行时间将是 (log(base2)n)^2 吗?不知怎的,我觉得这不对。
代码有两个循环:
外环:
内循环:
所以
这一直持续到 i 达到 n。
内循环的总迭代次数为:1+2+4+8+⋯+n
这意味着内循环运行 𝑂(𝑛) 将外循环中的所有工作加起来时的总次数。
整个代码的运行时间是𝑂(𝑛),因为内循环主导了完成的总工作。