此算法的Big O是什么?对我来说,看起来O(n ^ 3)^
是指数。
A()
{
int i,j,k,n;
for(i=1;i<=n;i++)
{
for(j=1;j<=i^2;j++)
{
for(k=1;k<=n/2;k++)
{
statement ;
}
}
}
}
答案 0 :(得分:3)
不,是O(n^4)
。
说明:
第一次,最外层循环运行,第二次循环运行1^2
次,最内层循环运行n/2
次。
总体1^2 . n/2
第二次,最外层循环运行,第二次循环运行2^2
次,最内层循环运行n/2
次。
总体2^2 . n/2
...
同样在n^2 . n/2
(最外层循环)的最后一次迭代中直到i
总结一下:(n/2)(1^2 + 2^2 + 3^2 + .... n^2)
= n/2.[n(n+1)(2n+1)/6]
(使用第一个n
数字的平方和的属性)
哪个是O(n^4)
答案 1 :(得分:1)
似乎是O(n^2*i^2)
。
如果i^2 <= n
,则变为O(n^3)
。
L.E。我刚刚看到你在第一个循环中使用i
。在这种情况下,i <= n
,因此它变为O(n^4)
。
答案 2 :(得分:1)
C运算符^执行xor,所以中间循环在第二遍传递出口。这使得它的运行时间不变。
变量n是未初始化的,所以我们无法真正说出最外层或最内层的循环会做什么。
如果n是常数,则整个运行时间是常量(1的顺序) 如果传入n,则运行时间为N平方,因为中间循环具有恒定时间。