为什么这个代码的算法复杂度为1 / 2n ^ 2 + n + 1?

时间:2014-04-19 21:17:11

标签: algorithm big-o time-complexity

以下代码:

  print a

  for (i = 0; i < n; i++)
    for (j = i; j < n; j++)
      print b

显然,打印a的n大只有1,但我不明白第二部分是1 / 2n + 1 / 2n ^ 2.

第一个for循环代表n然后第二个for循环代表(1/2 + 1 / 2n)我猜?

4 个答案:

答案 0 :(得分:3)

外循环运行n次。

内部循环运行n, n-1, n-2, ..., 1次。

循环内部代码的复杂性为O(1),因此总复杂度为:

n + n-1 + n-2 + ... + 1 = n(n+1)/2 = (1/2)n^2 + (1/2)n = (n^2)/2 + n/2 = O(n^2)

答案 1 :(得分:0)

对于i = 0print将执行n次。

对于i = 1print将执行n-1次。

对于i = 2print将执行n-2次。

。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。

对于i = n - 1print将执行1次。

总结一下,print将执行n + n-1 + n-2 + ... + 1次。

因此,复杂性为O(n^2)

答案 2 :(得分:0)

在for循环中,可以通过

计算调用print语句的总时间
n + (n-1) + (n-2) + ... + 1

总和为n(n+1)/2。因此,这种复杂性的重要标志应该是O(n^2)

答案 3 :(得分:0)

如果您对离散数学感到满意,那么使用Sigma表示法逐步进行操作会让您看到所寻求的结果:

enter image description here