Time 非正统嵌套for循环的时间复杂度

Time 非正统嵌套for循环的时间复杂度,time,time-complexity,complexity-theory,Time,Time Complexity,Complexity Theory,我已经阅读了一些关于时间复杂性和循环的帖子,并对以下嵌套for循环的时间复杂性提出了一个问题,以确保我的解决方案: for(int i = 0; i < n; i++){ for(int j = n; j > i; j--){ #print something }} for(int i=0;ii;j--){ #打印一些东西 }} 现在我知道外循环的时间复杂度是O(n),因为迭代次数是n。 然而,我猜想内部循环应该只迭代n/2次,因为当我向上计数时,j以相同的方式从

我已经阅读了一些关于时间复杂性和循环的帖子,并对以下嵌套for循环的时间复杂性提出了一个问题,以确保我的解决方案:

for(int i = 0; i < n; i++){
 for(int j = n; j > i; j--){
      #print something
 }}
for(int i=0;ii;j--){
#打印一些东西
}}
现在我知道外循环的时间复杂度是O(n),因为迭代次数是n。 然而,我猜想内部循环应该只迭代n/2次,因为当我向上计数时,j以相同的方式从n向0递减。因此,内部循环应该在n/2次迭代后停止。 因此,我建议时间复杂度为O(n*n/2)或简化的O(n^2)。
我说得对吗?提前感谢。

让我们看看循环是如何运行的:

  • i=0=>j将从1运行到n=>n次
  • i=1=>j将运行2到n=>(n-1)次
  • i=2=>j将运行3到n=>(n-2)次
  • i=n-1=>j将从n运行到n=>1次
所以加上所有的条款,我们得到

n + (n-1) + (n-2) + .... + 1 = n*(n+1)/2
这等于O(n^2)。是的,你的结论是正确的。

为什么这是“非正统的”?而且,尽管内部循环的平均运行次数是N/2,但它会因i的变化而变化。