为什么这个算法O(n ^ 2)复杂?

时间:2015-11-07 06:00:57

标签: algorithm big-o time-complexity complexity-theory asymptotic-complexity

我知道这个算法的大O复杂度是O(n ^ 2),但我无法理解为什么。

int b=0;
for(int i=n; i>0; i--)
   for(int j=0; j<i; j++)
      b=b+5;

我知道外环是O(n)。我知道内循环将运行n +(n-1)+(n-2)+ ... + 1次。这就是我能得到的。我不知道从那里去哪里。

  

我的问题是,有人可以解释为什么该算法是O(n ^ 2)?

3 个答案:

答案 0 :(得分:4)

所以,整个代码块运行的总次数

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

其他陈述将采用O(1),因此它们对复杂性没有影响(影响不大)(它们是常数)。

答案 1 :(得分:1)

外循环|内循环
i = n |内循环执行 n次
i = n-1 |内循环执行 n-1次
i = n-2 |内循环执行 n-2次



i = 1 |内循环执行 1次并退出

现在总结内循环执行的总次数:n +(n-1)+(n-2)+ ..... + 1 = n *(n + 1)/ 2 = O(n 2

答案 2 :(得分:0)

基本上因为在单个循环中有多于n ^ 2个操作。