分治策略——Hanoi塔問題

一、單Hanoi塔

image.png

上圖為 3 階 Hanoi 塔

假設(shè)有三個(gè)命名為 A B C 的塔座 ,在塔座A上插有n個(gè)直徑大小不相同,由小到大編號(hào)為1 ,2 ,3 ,··· ,n的圓盤,要求將A座上的圓盤移至塔座C

并按同樣的順序疊排

圓盤移動(dòng)必須遵守下列規(guī)則:

1、每次只能移動(dòng)一個(gè)圓盤 。
2、圓盤可以插在任意一個(gè)塔座上 。
3、任何時(shí)刻都不能將一個(gè)較大的圓盤放在一個(gè)較小的圓盤上。
問把所有的圓盤從A柱移動(dòng)到C柱總計(jì)需要多少次移動(dòng)?

一種遞歸的求解方法是分三步解決這個(gè)問題。
第一步:使用同樣的方法將n-1個(gè)盤子從A柱移動(dòng)到B柱;
第二步:利用1次移動(dòng)將最下面的大盤子從A柱移動(dòng)到C柱;
第三步:還是用第一步的方法將B柱上的n-1個(gè)盤子移到C柱,用偽碼描述如下:

算法:Hanoi(A,C,n)

  1.   if n=1 then move(A,C)
    
  2.  else Hanoi(A,B,n-1)
    
  3.         move(A,C)
    
  4.         Hanoi(B,C,n-1)
    

使用這個(gè)算法,設(shè)總的移動(dòng)次數(shù)為T(n),行2與行4有兩次遞歸調(diào)用,每次調(diào)用的輸入實(shí)例規(guī)模是n-1,因此移動(dòng)次數(shù)為T(n-1),行3有1次移動(dòng),從而得到如下遞推方程:
T(n) = 2 T(n-1) + 1
初值 T(1) = 1
T(n) = 2 T(n-1) + 1
T(n-1) = 2 T(n-2) + 1
......
T(2) = 2 T
T(1) = 1

T(n) = 2( 2 T(n-2) +1 ) + 1 = 2 2 T(n-2) + 2 + 1 = 2^(n-1) T(1) + 1 = 2^(n-1) + 1
所以移動(dòng)次數(shù)為2^(n-1) + 1次

二、雙Hanoi塔
雙Hanoi塔問題是Hanoi塔問題的一種推廣,與Hanoi塔的不同點(diǎn)在于:2n個(gè)圓盤,分成大小不同的n對(duì),每對(duì)圓盤完全相同。初始,這些圓盤按照從大到小的次序從下到上放在A柱上,最終要把他們?nèi)恳频紺柱,移動(dòng)的規(guī)則與Hanoi塔相同。
(1)設(shè)計(jì)一個(gè)移動(dòng)的算法并給出偽碼描述。
(2)計(jì)算你的算法所需要的移動(dòng)次數(shù)。

解:
(1)算法設(shè)計(jì)思想:分治策略。先遞歸地將上面的2(n-1)個(gè)盤子從A柱移動(dòng)到B柱;用2次移動(dòng)將最大的2個(gè)盤子從A柱移動(dòng)到C柱;遞歸地將B柱的2(n-1)個(gè)盤子從B柱移動(dòng)到C柱。
偽碼描述是:
BiHanoi(A,C,n) //從A到C移動(dòng)2n只盤子

  1. if n=1 then BiMove(A,C)     //從A到C移動(dòng)2只盤子
    
  2. else BiHanoi(A,B,n-1)
    
  3.      BiMove(A,C)
    
  4.      BiHanoi(B,C,n-1)
    

(2)設(shè)2n個(gè)盤子的移動(dòng)次數(shù)是T(n),則第2行和第4行的遞歸調(diào)用的子問題規(guī)模是n-1,第3行是2次移動(dòng),于是有
T (n) = 2 T(n-1) + 2
T(1) = 2
解得 T(n) = 2^(n+1) -2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 相信學(xué)過《數(shù)據(jù)結(jié)構(gòu)與算法》這門課程的同學(xué)都有聽過漢諾塔問題,但是可能在大學(xué)的時(shí)候沒有鉆研過,或者在學(xué)的時(shí)候就...
    鄭土強(qiáng)ztq閱讀 3,189評(píng)論 2 3
  • Hanoi塔問題: 問題的提出:Hanoi塔由n個(gè)大小不同的圓盤和三根木柱a,b,c組成。開始時(shí),這n個(gè)圓盤由大到...
    單袍豬皮閱讀 3,426評(píng)論 0 0
  • 一個(gè)n層的漢諾塔,從A移動(dòng)到C 由于漢諾塔問題本身的限制,我們最先能思考到的點(diǎn)是第n層最后肯定是要放在C的最下面的...
    憤怒的熊貓V閱讀 1,169評(píng)論 0 0
  • 問題:大梵天創(chuàng)造世界的時(shí)候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門...
    有苦向瓜訴說閱讀 371評(píng)論 0 1
  • Hanoi(漢諾)塔問題,這是一個(gè)古典的數(shù)學(xué)問題。古印度有一個(gè)梵塔,塔內(nèi)有3個(gè)柱子A,B,C,開始時(shí)A柱上套有64...
    靜亞哦閱讀 478評(píng)論 0 0

友情鏈接更多精彩內(nèi)容