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

Time complexity of an unorthodox nested for loop

我已经阅读了一些处理时间复杂度和循环的帖子,并且对以下嵌套 for 循环的时间复杂度有疑问,以确保我的解决方案:

for(int i = 0; i < n; i++){
 for(int j = n; j > i; j--){
      #print something
 }}

现在我知道外层循环的时间复杂度是O(n),因为迭代次数是n。 然而,我想内部循环应该只迭代 n/2 次,因为当 i 向 n 递增时,j 以相同的方式从 n 向 0 递减。因此,内部循环应该在 n/2 次迭代后停止。 因此,我建议时间复杂度为 O(n*n/2) 或简化为 O(n^2)。 我对吗?提前致谢。

让我们看看循环是怎样的 运行ning:

  • 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)。所以是的,你的结论是正确的。