i = n;
while (i >= 1){
for(j = 1; j <= i; j++)
x++;
i /= 2;
}
答案:
Number of iterations = n + n/2 + n/2^2 + ... + n/2^logn
= n ( (1/2)^logn - 1)/ (1/2 - 1)
= 2n (1 - 2^(-logn))
< 2n
= O(n)
问题:请问有谁可以解释我们怎么能得出几何和n + n / 2 + n / 2 ^ 2 + ... + n / 2 ^ logn?非常感谢你!
答案 0 :(得分:1)
这里有两个嵌套循环。外部循环以i等于n开始,并且只要结果大于或等于1,就会重复地将i除以2。
内部循环遍历从1到i的每个值。
因此,第一次通过内部循环将执行n次迭代,第二次n / 2次 第三个n / 4等
这将持续到最后一个循环,当i = 1时。在此之后,尝试将i除以2将产生0并且外循环将终止。
外循环的迭代总数取决于我们可以将n除以2的次数。
根据定义,log_2(n)是我们提高2得到n的幂,即因此它是外部循环将执行的迭代次数。