查找以下代码的Big O.

时间:2015-05-05 02:54:24

标签: algorithm

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?非常感谢你!

1 个答案:

答案 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的幂,即因此它是外部循环将执行的迭代次数。