重溫漢諾塔
上高中時,在同學的文曲星上第一次看到漢諾塔這個遊戲,靠著機械的背誦,勉強可以玩過幾關。當時覺得很好玩,也很難,也沒有多想。後來學習計算機,知道了這個漢諾塔這個東西中其實還蘊含著數學的道理,覺得是個奇妙的發明。
今天看書,突然看到了漢諾塔的解法的偽**,覺得挺好的,於是google了一下漢諾塔的由來,分享一下。
漢諾塔的由來
漢諾塔是源自印度神話裡的玩具。(一直以為是中國發明的呢,嘻嘻)
上帝創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按大小順序摞著64片**圓盤。
上帝命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。
有人相信婆羅門至今還在一刻不停地移動著圓盤。
也有預言說,這件事完成時宇宙會在一瞬間閃電式毀滅。但是這一天什麼時候到來,還是個未知?
寫的還挺玄乎的,不過還挺有意思的。其實聰明的人早已算出來這天在什麼時候了。呵呵,當然不是2023年啦,具體什麼時候,看我娓娓道來。
程式偽**:
algorithm solvetowers( numberofdisks, startpole, temppole, endpole) }
看完了**,按常理就會分析複雜度了。這類文章實在太多了,不過為了維護故事的完整性,總要寫出結尾。
話說,令m(n)表示解決n個盤子的問題所要移動的此數。顯而易見,m(1) = 1 。
對於上面的偽**,當n > 1 時, 使用兩個遞迴就是分別解決兩個n – 1 盤子的問題。於是有
m(n) = m(n - 1) + 1 + m( n - 1) = 2m( n - 1) + 1
通過數學歸納,可以證明m(n) = 2^n – 1 ( n >= 1)
於是按照劇情,m(64) = 2^64 – 1 , 假如入移動每個盤子都要1秒的話,這個時間恐怕也要14038618012023年呢。到時候婆羅門王還玩不玩這個玩具還不知道呢。至於宇宙的存亡,嘿嘿,到時在說吧~~
python 漢諾塔 Python漢諾塔
import turtle class stack def init self self.items def isempty self return len self.items 0 def push self,item def pop self return self.items.pop def ...
漢諾塔合集之漢諾塔3
漢諾塔3 步驟分析 1.當只有乙個圓盤時,要從a到b再到c 2.同樣擴充套件經典漢諾塔問題來看,先把a柱上 n 1 個圓盤,經b移動到c 3.把最後乙個圓盤從a移動到b 4.把c柱上的 n 1 個圓盤,經b移動 移回 到a 5.把b上的最後乙個圓盤從b移到c 6.最後把a上的 n 1 個圓盤經過b移...
漢諾塔問題
問題 假設有3個分別命名為x,y,z的寶塔,在塔座x上插有n個直徑大小各不相同,從小到大編號為1,2,3。n的圓盤。現要求將x軸上的n個圓盤移至塔座z上 並仍然按同樣的順序疊排,圓盤移動時必須遵循下列規則 1.每次只能移動乙個圓盤 2.圓盤可以插在x,y和z中的任一塔座上 3.任何時刻都不能將乙個較...