日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【离散数学中的数据结构与算法】十 汉诺塔

發(fā)布時(shí)間:2023/12/10 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【离散数学中的数据结构与算法】十 汉诺塔 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

漢諾塔也是經(jīng)典的算法問題

文章目錄

    • 1 漢諾塔問題

1 漢諾塔問題

法國數(shù)學(xué)家盧卡斯(Edouard Lucas)在1883年提出了一個(gè)數(shù)學(xué)游戲:

  • 傳說在世界中心貝拿勒斯(印度北部)的圣廟里,一塊黃銅板上有三根寶石柱。印度教的主神大梵天在創(chuàng)造世界的時(shí)候,在其中一根柱上從下到上地穿好了由大到小的64片金盤。大梵天命令僧侶們將圓盤從下面開始按大小順序重新擺放在另一根柱子上,并且規(guī)定, 在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動(dòng)一個(gè)圓盤。預(yù)言說當(dāng)這些盤子移動(dòng)完畢時(shí),世界就將在一聲霹靂中消滅,而梵塔、廟宇和眾生也都將同歸于盡。

考慮該問題的一般形式:有 n 個(gè)圓盤,最初自下而上、自大而小地穿在A柱上, 每次按規(guī)則(上述)移動(dòng)一個(gè)圓盤,最終將所有圓盤移動(dòng)到C柱上。

假如現(xiàn)在有如下圖的盤子:

則一共需要移動(dòng)7次。自己手動(dòng)畫畫就知道了。

那么現(xiàn)在盤子有n個(gè),如下圖:


該如何移動(dòng)?實(shí)際上這是遞歸的問題(遞歸在后面的學(xué)習(xí)中會(huì)學(xué)到)

  • 先將A柱上所有其他盤子移到B柱上(這是一個(gè)類似于自己的子問題),只留下最下面的盤子,也就是n盤子
  • 接著將最大的盤子從A柱移到C柱,之后不必再管它。
  • 最后再將剛才移到B柱上的盤子移到C柱上(這又是一個(gè)子問題) 。

用 T(n) 表示移動(dòng) n 個(gè)圓盤所需要的步數(shù)

根據(jù)算法

  • 先把前面 n-1 個(gè)盤子轉(zhuǎn)移到B上;
  • 然后把第 n 個(gè)盤子轉(zhuǎn)到C上(n這個(gè)盤子移動(dòng)了一次);
  • 最后再次將B上的 n-1 個(gè)盤子轉(zhuǎn)移到C上(這n-1個(gè)盤子移動(dòng)了兩次)
    • 得到遞推關(guān)系 T(n)=2T(n-1)+1

    這個(gè)公式,足以使用遞歸的形式寫出代碼。下面還可以直接求出具體的值:

    使用倒推法求解T(n)=2T(n-1)+1, T(1)=1:

    回到最初的漢諾塔問題, 要將64片金盤重新擺放在另一根柱子上, 最少需要 264-1 步, 即使僧侶每秒鐘移動(dòng)一步而且每次移動(dòng)都是正確的方法, 那么也需要 5.8*1011 年, 即5千多億年!

    總結(jié)

    以上是生活随笔為你收集整理的【离散数学中的数据结构与算法】十 汉诺塔的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。