这个算法的大O.

时间:2017-10-13 16:56:08

标签: algorithm analysis

此算法的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 ;
            }
        }
    }
}

3 个答案:

答案 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平方,因为中间循环具有恒定时间。