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

问题描述

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

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次,{{ 1}}从i1不等。这意味着第二个嵌套的for循环将总共运行n次,因此总共运行Sigma(i^2) from i=1 to i=n次。因此,该代码将要运行的总数为n*(n+1)*(2n+1)/6的顺序,因此我得出结论,该顺序必须为n^5。这种方法和我计算出的答案有问题吗?

我刚开始使用DSA,这是我的第一个任务,对可能犯的任何基本错误表示歉意。

解决方法

内部循环始终具有相同的迭代次数( n / 2),因为它独立于 i j 。它本身具有 O(n)的复杂度。

另外两个循环导致内部部分执行的平方和(1 + 4 + 9 + ...)。

此平方和对应于square pyramidal number,并具有 O(n 3 的顺序。

内部循环的顺序为 O(n),因此我们得到 O(n 4

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...