學過計算機的基本都對漢諾塔問題很熟悉了,即使沒有學過計算機的的,想必也或多或少的了解漢諾塔問題,這篇文章通過數學的方式來求解這個問題。
傳說: 在世界中心貝拿勒斯(在印度北部)的聖廟裡,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64片金片,這就是所謂的漢諾塔。不論白天黑夜,總有乙個僧侶在按照下面的法則移動這些金片:一次只移動一片,不管在哪根針上,小片必須在大片上面。僧侶們預言,當所有的金片都從梵天穿好的那根針上移到另外一根針上時,世界就將在一聲霹靂中消滅,而梵塔、廟宇和眾生也都將同歸於盡。
這是乙個非常經典的遞迴問題。
思路很簡單:
假設有n個金片,需要把這些金片從第一根寶石針移動到第三個寶石針中。
首先需要把n-1個金片移動到第二根寶石針上
再把最後乙個也就是最大的那乙個移動到第三根寶石針上
最後再把那n-1個金片移動到第3根寶石針上
這是典型的遞迴問題, 定義f(n)是需要移動的次數
f(1) = 1
f(2) = 3
f(3) = 7
…f(n) = 2f(n-1)+1
高中的時候接觸了數學歸納法,如果忘記了也每關係,這裡給出完整的"套路"。
根據以上內容,可知:
f(0)=0 f(1) = 1 f(2) = 3 f(3) = 7 f(4) = 15 f(5) = 31 …
好像有點規律, f(n) = 2^n -1
那麼這個猜想正確嗎?用數學歸納法證明一下。
定義數學歸納法是證明某個命題關於整數n(對所有的n>=n0)成立的一種一般的方法。首先,當n為最小值n0時我們證明命題,這稱為基礎,然後假設對於包含再n0和n-1之間的所有值,已經證明命題成立,對於n>n0證明命題,這種方法稱為數學歸納法。
證明f(0) = 2^0 -1, 顯然基礎是正確的
假設n-1取代n的時候上述猜想成立,且對於n>0建立歸納,
f(n) = 2f(n-1) + 1 = 2(2^(n-1)-1)+1
= 2^n-2+1
= 2^n -1
因此,對於n來說,上面的猜想依然成立,至此證明完畢,鼓掌。
對於漢諾塔問題,f(n) = 2^64-1
這是乙個什麼概念, 即使是每微秒移動一次, 也需要5000世紀的時間, 到那個時候,世界也許真的將在一聲霹靂中消滅,而梵塔、廟宇和眾生也都將同歸於盡。
傳說: 罕王打算獎賞西洋棋的發明人──宰相西薩·班·達依爾。國王問他想要什麼,他對國王說:「陛下,請您在這張棋盤的第1個小格里賞給我一粒麥子,在第2個小格里給2粒,第3個小格給4粒,以後每一小格都比前一小格加一倍。請您把這樣擺滿棋盤上所有64格的麥粒,都賞給您的僕人吧!」國王覺得這個要求太容易滿足了,就命令給他這些麥粒。當人們把一袋一袋的麥子搬來開始計數時,國王才發現:就是把全印度甚至全世界的麥粒全拿來,也滿足不了那位宰相的要求。
還有直線分割圓形,約瑟夫環問題等等。
書到用時方恨少。
漢諾塔問題
問題 假設有3個分別命名為x,y,z的寶塔,在塔座x上插有n個直徑大小各不相同,從小到大編號為1,2,3。n的圓盤。現要求將x軸上的n個圓盤移至塔座z上 並仍然按同樣的順序疊排,圓盤移動時必須遵循下列規則 1.每次只能移動乙個圓盤 2.圓盤可以插在x,y和z中的任一塔座上 3.任何時刻都不能將乙個較...
漢諾塔問題
問題是 印度的乙個古老的傳說。開天闢地的神勃拉瑪在乙個廟裡留下了三根金剛石的棒,第一根上面套著64個圓的金片,最大的乙個在底下,其餘乙個比乙個小,依次疊上去,廟裡的眾僧不倦地把它們乙個個地從這根棒搬到另一根棒上,規定可利用中間的一根棒作為幫助,但每次只能搬乙個,而且大的不能放在小的上面。解答結果請自...
漢諾塔問題
漢諾塔如下圖所示 需要我們完成的事情是把盤子移動到c,規則就不贅述了。演算法思想 總體來說是利用遞迴完成的。假設 1 a上只有乙個盤子,我們直接移動到c即可 2 a上有兩個盤子,我們把第二個盤子上面的所有盤子 此時只有乙個,比較容易 移動到b,再把第二個盤子移動到目的地c,最後把b上的盤子移動到c ...