您好我对以下代码段的时间复杂性感到困惑, 如果有人能够阐明这一点,那将是很好的。
# Inventory File
#
[east.k.example.com]
east ansible_connection=local
[east2.k.example.com]
east2 ansible_connection=local
答案 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在评论中指出的那样。