对于以下代码片段,O(n)的运行时间复杂度是多少?

时间:2017-06-30 04:31:37

标签: algorithm time-complexity big-o code-analysis

我看了嵌套的相互依赖的循环,我无法弄清楚下面代码的时间复杂度:

void check(int n)
{ 
    int i,j,k;
    for(i=0;i<=n/2;i++)
    {
        for(j=0;j<=i*i;j++)
        {
            for(k=0;k<j*j;k++)
            {    
                printf("HELLO");    //any O(1) task
            }
        }
    }
}

3 个答案:

答案 0 :(得分:3)

sum

sum

为了计算时间复杂度,我们可以忽略低阶项。 &#39; i&#39; 的最高权力是6,所以

sum

我们知道:

sum

因此

sum

答案 1 :(得分:2)

我认为这是O(N^7)因为总步骤的公式是

cursor.execute*(..)

我不知道如何解决这些总结,所以我在这里提出一个问题,并从接受的答案中得到一个很好的解释

enter image description here

我不知道是否适合引用我的问题作为答案,但该帖肯定会回答你的问题,我相信它会帮助你解决未来类似的问题

已编辑:

感谢@ hk6279,我忽略了公式,在最深的循环中它应该是1而不是k

然而,同样的参考原则也应该起作用。

答案 2 :(得分:1)

嗯,我认为这太难了,但没有。很少的数学支持给了我完美的答案。

首先,我们要考虑执行printf()函数的次数。 当i = 1时,它会执行1次, 当i = 2时,同样会执行1 + 4 + 9 + 16次,当i = 3时,它会跟随(1 + 4 + 9 + 16 + 25 + 36 + 49 + 64 + 81)次。 / p>

记住模式,当i = n时,执行将像(n ^ 2自然数的平方和)次。

现在找时间复杂度:

(1平方项之和)+(4平方项之和)+(9平方项之和)+ ...... +(n ^ 2平方项之和)=约(n ^ 2) (n ^ 2 +1)(2 * n ^ 2 +1)/ 6 +常数

- &gt;显然n ^ 6是表达式中的最大项,O(n ^ 6)将是时间复杂度