如果复杂条件为O(n * log(n))

时间:2018-06-03 19:47:06

标签: algorithm data-structures time-complexity big-o

s=0

for(i=1; i<n; i = i*2){ 
  if (i<20)
    for (j=0; j<n; j++)
    {
        s=s+i*j;
    }
    s=s+1
}

我正在尝试为上述算法建立大复杂性。外循环从 1 开始并运行到 n i 中的计数器每次迭代加倍,因此这是 log(n )行为。内部循环独立于 0 n O(n)行为。?

我不明白 if 语句如何影响复杂性。您可能不想向我提供答案,但请指导正确的方向,因为我根本没有得到它。

1 个答案:

答案 0 :(得分:4)

内循环是O(N),但它只会运行5次, 即i = 1, 2, 4, 8, 16

在前5次迭代后,您的代码基本上变为

for(i=32; i<n; i = i*2){ 
    s=s+1
}

O(log(N))

所以总的复杂性是:

O(5 * N + log(N)) = O(N)