我有一个程序,并试图计算其复杂性。我想确定我没有弄错
for(int i=4; i<=n; i=i*4)
{
cout<<"counter for first loop: "<<++count1<<endl;
for(int j=i;j>=0;j=j-4)
{
cout<<"counter for second loop: "<<++count2<<endl;
for(int k=0;k<=n;k++)
{
cout<<"counter for third loop: "<<++count3<<endl;
}
}
}
这里,第三个循环的复杂度是O(n),然后与第二个循环一起,复杂度变为O(n.log 4 i),整个程序的复杂度为O (N。(日志<子> 4 子> i)个 2 )。我的回答是对的?感谢
答案 0 :(得分:2)
最内层循环的复杂性是O(n)。中间的复杂性是O(i / 4),其又是O(i)。最外层循环的复杂性是O(log 4 n)。代码的总复杂度为O(nilog 4 n),等于O(n。(log 4 n) 2 )。
答案 1 :(得分:0)
您可以正式进行以下操作:
执行此片段:
sum = 0;
for( i = 4 ; i <= n; i = i * 4 ) {
for( j = i ; j >= 0 ; j = j - 4 ) {
for( k = 0 ; k <= n ; k ++ ) {
sum ++;
}
}
}
我们获得:
结果与上述公式完全一致。
此外,两个内部循环的运行时间都是O(n)...这意味着,当一起执行时,我们得到O(n²)。