大O表示计算

时间:2018-03-01 07:35:46

标签: c++ data-structures big-o

我无法确定以下碎片代码的重要符号,给定的表达式是我想弄清楚的一部分。我知道给出两个简单的默认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表示法中的表现。

1 个答案:

答案 0 :(得分:4)

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

如果将所有数字相加两次,则

bytes

因此,

     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