我知道这个算法的大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)?
答案 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个操作。