迭代k层深循环嵌套的时间复杂度总是Θ(nᵏ)?

时间:2013-11-01 01:27:57

标签: algorithm big-o time-complexity

许多算法都有循环,如下所示:

for a from 1 to n
  for b from 1 to a
    for c from 1 to b
      for d from 1 to c
        for e from 1 to d
           ...
           // Do O(1) work

换句话说,循环嵌套是k层深,外层从1循环到n,每个内层从1循环到它上面的索引。例如,这在代码中显示迭代数组内所有位置的k元组。

假设k是固定的,那么这段代码的运行时间总是Θ(n k )?对于n = 1的特殊情况,工作是Θ(n),因为它只是数组上的标准循环,对于n = 2的情况,工作是Θ(n 2 ),因为内循环完成的工作由

给出
  

0 + 1 + 2 + ... + n-1 = n(n-1)/ 2 =Θ(n 2

当k变大时,这种模式会继续吗?或者只是巧合?

2 个答案:

答案 0 :(得分:2)

是的,时间复杂度为Θ(n k )。衡量此代码复杂性的一种方法是查看它生成的值。一个特别有用的观察是这些循环将遍历数组{1,2,3,...,n}的所有可能的k元素子集,并且将花费O(1)时间产生它们中的每一个。因此,我们可以说运行时由这些子集的数量给出。给定n元素集,k元素子集的数量为n选择k,其等于

  

N! / k!(n - k)!

这是由

给出的
  

n(n-1)(n-2)...(n - k + 1)/ k!

这个值当然不会超过这个值:

  

n·n·n·...·n / k! (带有k份副本)

     

= n k / k!

这个表达式是O(n k ),因为1 / k! term是固定常数。

类似地,当n - k +1≥n/ 2时,该表达式大于或等于

  

(n / 2)·(n / 2)·......(n / 2)/ k! (有k份n / 2)

     

= n k / k! 2 ķ

这是Ω(n k ),因为1 / k! 2 k 是固定常数。

由于运行时为O(n k )和Ω(n k ),运行时为Θ(n k )。< / p>

希望这有帮助!

答案 1 :(得分:0)

您可以使用以下等式:

enter image description here

其中 c 是最里面循环内的常量时间操作数, n 是元素数, r 是数字嵌套循环。