以下代码中的增长顺序是什么?
int result = 0;
for (int i = 1; i <= n; i *= 2)
for (int j = 0; j <= i; j++)
result++;
答案应该是n,但是我不确定如何找出答案。 如何计算这些循环中的增长顺序?
我的假设是外循环运行(log n +1)次。内部循环依赖于外部循环,因为它使用i。但这等于n吗?
答案 0 :(得分:2)
每次对给定的i
执行内部循环时,都会有i+1
个迭代。
因为我的值是2 ^ 0、2 ^ 1、2 ^ 2、2 ^ 3、2 ^ 4,...
内部循环的所有执行的迭代总数受以下约束
2 ^ 0 +1 + 2 ^ 1 +1 + 2 ^ 2 +1 + ... + 2 ^ k +1其中2 ^ k <= n
受其约束
2^0 + 2^1 + ... + 2^k + logn
现在我们有了geometric series的总和:
2^0 + 2^1 + ... + 2^k = 2^(k+1) - 1 <= 2n - 1 since 2^k <= n
因此,您有以下限制:
2n - 1 + logn
即O(n)
。