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 语句如何影响复杂性。您可能不想向我提供答案,但请指导正确的方向,因为我根本没有得到它。
答案 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)