嵌套循环中代码的时间复杂度

时间:2018-03-18 14:34:24

标签: time-complexity big-o complexity-theory

鉴于

for (int i = 1; i <= n - 1; i++)
    for (int j = i + 1; j <= n; j++)
        Console.WriteLine(i, j);

据我所知,外部for循环运行4n - 1次,内部运行3n ^ 2 - 3次,但我不明白为什么print语句运行n(n - 1)/ 2次。我只得到n(n - 1)作为我的时间复杂度,但幻灯片说n(n - 1)/ 2。我错过了什么?

2 个答案:

答案 0 :(得分:1)

  • 对于i = 1,j从2变化到n =&gt; n-1次
  • 对于i = 2,j从3变化到n =&gt; n-2次

...

...

  • 对于i = n-1 j从n变化到n =&gt; 1次

所以操作次数=&gt; (n-1)+(n-2)+(n-3)+ .... + 1 求解为n(n-1)/ 2(记住n个自然数求和的公式 - https://cseweb.ucsd.edu/groups/tatami/handdemos/sum/

答案 1 :(得分:1)

你没有错过太多,因为n(n - 1)n(n - 1)/2的大O界限是O(n^2)。你展示的双循环将由O(n^2)限制在上边界,我认为这是主要观点。