大O表示计算

问题描述 投票:1回答:1

我不肯确定下面碎片代码的重要符号,给定的表达式是我想弄清楚的一部分。我知道给出两个简单的,默认的for循环导致O(n^2),但后者完全不同。以下是说明。

的算法

for (j = 0; j < n; j++)
{
  for (k = j; k < n; k++)
  {
  }
}

将导致表达式给出的多次迭代:

= n + (n-1) + (n-2) + (n-3) + ........ + (n - n)
  • 将上述系列表达式减少为代数表达式,无需求和。
  • 确定代数表达式后,表达Big O表示法中的表现。
c++ data-structures big-o
1个回答
4
投票

你可以使用这种方法(据说当他是一个小伙子时由高斯应用)。

如果你把所有数字加起来两次,你就得到了

     1   +   2   +   3   + ... +  n
+    n   + (n-1) + (n-2) + ... +  1
—————————————————————————————————————--
   (n+1) + (n+1) + (n+1) + ... + (n+1)   = n(n+1)

从而,

1 + 2 + 3 + ... + n = n(n+1)/2

n(n+1)/2(n^2)/2 + n/2,所以它在O(n^2)

© www.soinside.com 2019 - 2024. All rights reserved.