【问题标题】:How to calcualte the Big-O complexity of the following algorithm?如何计算以下算法的 Big-O 复杂度?
【发布时间】:2020-08-29 18:12:31
【问题描述】:

我一直在尝试计算以下算法的 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 次,因为i1 不同到n。这意味着第二个嵌套 for 循环将总共运行 Sigma(i^2) from i=1 to i=n,因此总共运行 n*(n+1)*(2n+1)/6 次。所以代码运行的总量是n^5的顺序,所以我得出的结论是顺序必须是O(n^5)。这种方法和我计算的答案有问题吗?

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

【问题讨论】:

  • 第三个(内部)循环运行n/2 次,每次运行第二个循环。第二个循环运行(2n^3 + 3n^2 + n)/6 次。您如何从那里到达“n^5 的顺序”?
  • 我乘以所有循环运行的时间。第一个循环运行n 次,第二个循环运行(2n^3 + 3n^2 + n)/6 次,第三个循环运行n/2 次。所以乘法时 n 的最大次数是 5。
  • 这更适合cs.stackexchange.com
  • 不,第二个运行i^2 次,每次运行第一个运行,(2n^3 + 3n^2 + n)/6 不要再乘以 n
  • 第二个循环的顺序是n^3。第三个循环运行n/2每次第二个循环运行,所以整个事情的顺序是n^4。至于说明何时乘法或加法的确切一般规则......我必须考虑那个。

标签: algorithm time-complexity big-o computer-science complexity-theory


【解决方案1】:

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

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

这个平方和对应square pyramidal number,阶数为O(n3)

内循环的顺序是O(n),所以我们得到O(n4)

【讨论】:

    猜你喜欢
    • 2013-04-30
    • 1970-01-01
    • 2013-04-29
    • 2021-04-30
    • 2016-04-06
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多