漢諾塔問題 到底需要多少時間

2021-10-19 17:17:29 字數 1647 閱讀 1361

學過計算機的基本都對漢諾塔問題很熟悉了,即使沒有學過計算機的的,想必也或多或少的了解漢諾塔問題,這篇文章通過數學的方式來求解這個問題。

傳說: 在世界中心貝拿勒斯(在印度北部)的聖廟裡,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的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 ...