这个双嵌套循环的时间复杂度是多少?

时间:2017-04-19 19:40:32

标签: c algorithm time-complexity big-o

您好我对以下代码段的时间复杂性感到困惑, 如果有人能够阐明这一点,那将是很好的。

# Inventory File
#
[east.k.example.com]
east ansible_connection=local

[east2.k.example.com]
east2 ansible_connection=local

1 个答案:

答案 0 :(得分:4)

在这种情况下,请记住这一点:

  

如果有疑问,请在里面工作!

我们来看看你的代码:

 for ( i = 1; i <= n ; i ++)
    for ( j= i+1; j <= n; j++)
      //print something

这里,打印的成本是Θ(1)(假设你总是打印相同的东西),所以我们可以这样重写这段代码:

 for ( i = 1; i <= n ; i ++)
    for ( j= i+1; j <= n; j++)
       do Θ(1) work

现在,让我们从内到外工作。那个内循环要做什么?好吧,当i = 1时,它将运行n - 1次迭代。当i = 2时,它将运行n - 2次迭代。当i = 3时,它将运行n - 3次迭代。从这个意义上讲,完成的工作是Θ(n - i),所以我们可以用这样的东西替换内循环:

 for ( i = 1; i <= n ; i ++)
    do Θ(n - i) work

现在,让我们来看看这个外循环。第一次,这将是(大致)n - 1工作,第二次它将做n - 2工作,第三次它将做n - 3工作,等等。换句话说,总计这里完成的工作(大致)等于

  

(n - 1)+(n - 2)+(n - 3)+ ... + 3 + 2 + 1

这是一个名为Gauss's sum的着名和,其值为n(n-1)/ 2,即Θ(n 2 )。因此,这里完成的总工作是Θ(n 2 ),正如@Lashane在评论中指出的那样。