以下嵌套循环的Big-Oh是什么:
sum=0;
for(i=0;i<n;i++)
for(j=0;j<i*n;j++)
sum+=i;
和
sum=0;
for(i=0;i<n;i++)
for(j=0;j<i*i;j++)
sum+=i;
我相信它是O(n ^ 2),但我遇到过的都是使用n作为测试的两个循环,所以我不知道O(n ^ 2)是否正确。如果有人可以验证我的理解或解释我为什么错,我会很感激。谢谢!
答案 0 :(得分:4)
我会说它们都是O(n^3)
,因为在这两种情况下,内循环都是O(n^2)
而外循环是O(n)
。当然,它们的运行时间远小于n ^ 3次,但是如果你将运行时作为n的函数绘制,当n变大时,你会发现形状看起来更像是立方而不是二次。我的证据是,如果你为第一个展开总和,你会得到:
因为你有n个术语,每个术语都是O(n^2)
,所以整个事情都是O(n^3)
,尽管这个术语非常小O(n^3)
。
对于第二个:
甚至小于第一个,但仍然是O(n^3)
。