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

Algorithm 为什么这个算法的复杂性是O(n^2)?,algorithm,big-o,time-complexity,complexity-theory,asymptotic-complexity,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; intb=0; 对于(int i=n;i>0;i--) 对于(int j=0;jSo),整个代码块将运行的总次数 = n + (n-1) + ...+ 1 = n * (n+1) / 2 = O(n^2). 其他语句将采用O(1),因此它们的对复杂性没有影响(作用不大)(它们

我知道这个算法的最大O复杂性是O(n^2),但我不明白为什么

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

对于(int j=0;jSo),整个代码块将运行的总次数

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

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

因此,整个代码块将运行的总次数

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

其他语句将采用O(1),因此它们的对复杂性没有影响(作用不大)(它们是一个常数)。

基本上是因为一个循环中的操作比一个循环中的多n^2个。

基本上是因为一个循环中的操作比一个循环中的多n^2个。

外循环|内循环
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(n2)

外循环|内循环
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(n2)

n+(n-1)+(n-2)+…+1=?我认为它必须等于总迭代次数。n+(n-1)+(n-2)+…+1=?我认为它必须等于总迭代次数。我明白了!你是如何将序列设置为n*(n+1)的/2?@OmarN-这是一个公式--->从1=1+2+…+n=n(n+1)/2开始的前n个连续正整数之和。一旦你得到了这个公式,我就明白它是如何变成O(n^2)的了,但我不知道这个公式是如何推导出来的。你能告诉我你是如何得出这个公式的吗?或者如果这是一个新问题的主题,那么最好发布一个新问题。谢谢你!感谢你的帮助!根据一个众所周知的故事,这个公式是很久以前由一个名叫卡尔·弗里德里希·高斯的小学生推导出来的当他的数学老师想休息一下,让学生们把从1到100的所有数字相加时。年轻的高斯意识到,如果他把最低和最高的数字(1+100,2+99等)配对在一起,每对数字加起来就是101(n+1),这样的数字就有50对(n/2)。因此,从1到n的总和就是(n+1)(n/2)1.老师没有得到休息,高斯后来成为了一名伟大的数学家,我明白了!你是如何将序列设为n*(n+1)/2的?@OmarN-这是一个公式--->从1=1+2+…+n=n(n+1)/2开始的前n个连续正整数之和。一旦你得到了这个公式,我就明白它是如何变成O(n^2)的了,但我不知道这个公式是如何推导出来的。你能告诉我你是如何得出这个公式的吗?或者如果这是一个新问题的主题,那么最好发布一个新问题。谢谢你!感谢你的帮助!根据一个众所周知的故事,这个公式是很久以前由一个名叫卡尔·弗里德里希·高斯的小学生推导出来的当他的数学老师想休息一下,让学生们把从1到100的所有数字相加时。年轻的高斯意识到,如果他把最低和最高的数字(1+100,2+99等)配对在一起,每对数字加起来就是101(n+1),这样的数字就有50对(n/2)。因此,从1到n的总和就是(n+1)(n/2)老师没有休息,高斯继续成为一个伟大的数学家,在这个问题上也提到了同样的问题,你没有给OP的问题增加任何新的内容。考虑改进它,或者删除它。同样的,在这个问题中提到了,你没有给OP的问题增加任何新的东西。删除它。