如何计算以下算法的Big-O复杂度



我一直在尝试计算以下算法的Big-O,结果对我来说是O(n^5(。我不知道正确的答案是什么,但我的大多数同事都得到了O(n^2(。

for(i=1;i<=n;i++)
{
for(j=1 ; j <= i*i ; j++)
{
for(k=1 ; k<= n/2 ; k++) 
{
x = y + z;
}
}
}

我所做的是从最里面的循环开始。所以我计算出最里面的循环将运行n/2次,然后我转到第二个嵌套的for循环,它将运行i^2次,从最外面的循环开始运行i次,因为i1n不等。这意味着第二个嵌套的for循环将总共运行Sigma(i^2) from i=1 to i=n次,因此总共运行了n*(n+1)*(2n+1)/6次。所以代码运行的总量是n^5的顺序,所以我得出结论,这个顺序一定是O(n^5)。这种方法和我计算的答案有问题吗?

我刚开始做DSA,这是我的第一次任务,所以很抱歉我可能犯了任何基本错误。

内部循环总是具有相同的迭代次数(n/2(,因为它独立于ij。就其本身而言,它具有O(n(的复杂性。

另外两个循环产生内部执行的平方序列之和(1+4+9+…(。

这个平方和对应于正方形金字塔数,并且具有O(n3(的阶数。

内环的阶数为O(n(,因此我们得到O(n4(

最新更新