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

时间:2018-04-20 10:27:13

标签: time time-complexity complexity-theory

我已阅读了几篇关于时间复杂性和循环的帖子,并对下面的嵌套for循环的时间复杂性提出了疑问,以便确保我的解决方案:

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

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

1 个答案:

答案 0 :(得分:2)

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

  • i = 0 =&gt; j将从1运行到n =&gt; n次
  • i = 1 =&gt; j将从2运行到n =&gt; (n-1)次
  • i = 2 =&gt; j将从3运行到n =&gt; (n-2)次
  • ............................................
  • i = n-1 =&gt; j将从n运行到n =&gt; 1次

所以添加所有条款,我们得到

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

这等于O(n^2)。所以是的,你的结论是正确的。