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

Avr*_*ber -3 c big-o time-complexity

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

    while (j > 1)
        --j;
}
Run Code Online (Sandbox Code Playgroud)

ami*_*mit 5

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

  • @Jon:实际上没有任何混乱,在任何情况下,算法都会在i = n/4(进入最后一次迭代)时完成迭代(而不是我之前写的......编辑的n/2).并且仍然是O(n) (3认同)