这段代码的时间复杂度是多少?

时间:2011-06-01 10:29:11

标签: c big-o time-complexity

int i = 1;
while (i < n/2)
{
    i = i * 2;
    int j = i;

    while (j > 1)
        --j;
}

2 个答案:

答案 0 :(得分:5)

O(n): 外循环在每次迭代中运行logn次:i = 1,2,4,8,... n / 4(入口值)
内循环运行2*i次(入口值)
总的来说,你得到:2+4+8+...+n/2 = n-2 = O(n)

答案 1 :(得分:2)

内部循环在第一次迭代时执行两次,然后执行四次,然后执行八次,等等。

所以你需要弄清楚总和的终止位置:

2 + 4 + 8 + ...

然后找出如何评估它(线索:几何系列)。