📜  时间复杂度分析|河内塔(递归)

📅  最后修改于: 2021-04-29 03:07:02             🧑  作者: Mango

河内之塔是一个数学难题,其中我们有三个杆和n个盘。难题的目的是遵循以下简单规则将整个堆栈移动到另一根杆:
1)一次只能移动一个磁盘。
2)每步都包括从一个堆栈中取出上部磁盘并将其放在另一个堆栈的顶部,即,只有当磁盘是堆栈中最上面的磁盘时,才能移动该磁盘。
3)请勿在较小的磁盘上放置任何磁盘。

伪代码

TOH(n, x, y, z)
{
   if (n >= 1)
   {
      // put (n-1) disk to z by using y
      TOH((n-1), x, z, y)
   
       // move larger disk to right place
       move:x-->y
     
      // put (n-1) disk to right place 
      TOH((n-1), z, y, x)
   }
}

递归分析

递归方程: T(n) = 2T(n-1) + 1  -等式1

通过Backsubstitution解决:
T(n-1) = 2T(n-2) + 1  –——- equation-2
T(n-2) = 2T(n-3) + 1  –——– equation-3

借助于等式3,将T(n-2)的值放在等式–2中
T(n-1)= 2( 2T(n-3) + 1 ) + 1  -方程式4

在方程式4的帮助下将T(n-1)的值放在方程式1中
T(n)= 2( 2( 2T(n-3) + 1 ) + 1 ) + 1
T(n) = 2^3 T(n-3) + 2^2 + 2^1 + 1

归纳后:
T(n)= 2^k T(n-k) + 2^{(k-1)} + 2^{(k-2)} + ............ +2^2 + 2^1 + 1

基本条件T(1)= 1
n – k = 1
k = n-1
推,k = n-1
T(n) =2^{(n-1)}T(0) + + 2^{(n-2)} + ............ +2^2 +2^1 + 1

这是GP系列,总和是2^n - 1

T(n)= O( 2^n - 1)  ,或者你可以说O(2^n)  这是指数的

5个磁盘,即n = 5需要2 ^ 5-1 = 31个移动。