我看了嵌套的相互依赖的循环,我无法弄清楚下面代码的时间复杂度:
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
}
}
}
}
答案 0 :(得分:3)
为了计算时间复杂度,我们可以忽略低阶项。 &#39; i&#39; 的最高权力是6,所以
我们知道:
因此
答案 1 :(得分:2)
我认为这是O(N^7)
因为总步骤的公式是
我不知道如何解决这些总结,所以我在这里提出一个问题,并从接受的答案中得到一个很好的解释
我不知道是否适合引用我的问题作为答案,但该帖肯定会回答你的问题,我相信它会帮助你解决未来类似的问题
已编辑:
感谢@ 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)将是时间复杂度