第2周時間專案3 體驗複雜度(2)漢諾塔

2021-07-05 07:02:48 字數 1649 閱讀 1290

/*   

檔名稱:專案3--體驗複雜度(2)漢諾塔.cpp   

作    者:李竹雅  

完成日期:2023年9月14日   

版 本 號:v1.0   

問題描述:有乙個印度的古老傳說:在世界中心貝拿勒斯(在印度北部)的聖廟裡,一塊黃銅板上插著三根寶石針。印度教

的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64片金片,這就是所謂的漢諾塔。

不論白天黑夜,總有乙個僧侶在按照下面的法則移動這些金片:一次只移動一片,不管在哪根針上,小片必須在大片上面。

僧侶們預言,當所有的金片都從梵天穿好的那根針上移到另外一根針上時,世界就將在一聲霹靂中消滅,而梵塔、廟宇和

眾生也都將同歸於盡。 可以演算法出,當盤子數為n個時,需要移動的次數是f(n)=2^n-1 。n=64時,假如每秒鐘移一次,共

需要18446744073709551615秒。乙個平年365天有31536000秒,閏年366天有31622400秒,平均每年31556952秒,移完這些金

片需要5845.54億年以上,而地球存在至今不過45億年,太陽系的預期壽命據說也就是數百億年。真的過了5845.54億年,不

說太陽系和銀河系,至少地球上的一切生命,連同梵塔、廟宇等,都早已經灰飛煙滅。據此,2^n從數量級上看大得不得了。

體驗盤子數disccount為4、8、16、20、24時在時間耗費上的差異,你能忍受多大的disccount。 

輸入描述:需要移動的盤子數。  

程式輸出:盤子的移動次數。

*/

01.#include 02.#define disccount 4   

03.long move(int, char, char,char);

04.int main()

05.

11.

12.long move(int n, char a, char b,char c)

13.

23.}

4個盤子

8個盤子

16個盤子

20個盤子

24個盤子

執行結果可知:

如果按照移動一次1s計算,4個盤子需要15s,8個盤子需要255s(4.25min),16個盤子需要65535s(18h),20個盤子需要1048575s(12.13天),24個盤子需要16777215s(194.18天)。

結論:複雜度是指數級的演算法,漢諾塔運用了遞迴演算法,遞迴演算法的好處有很多,大大簡化了程式的複雜度。

學習心得:

掌握好遞迴,對此演算法多加以利用將會受益匪淺。

第2周專案3 體驗複雜度(2)漢諾塔

問題及 檔名稱 1.cpp 作 者 路亞麗 完成日期 2016年 9月 8日 版 本 號 v1.0 問題描述 有乙個印度的古老傳說 在世界中心貝拿勒斯 在印度北部 的聖廟裡,一塊黃銅板上插著三根 10.寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64 11.片金...

第2周專案3 體驗複雜度(2)漢諾塔

問題及 檔名稱 k.cpp 作 者 王曼 完成日期 2016年9月8日 版 本 號 v1.0 問題描述 有乙個印度的古老傳說 在世界中心貝拿勒斯 在印度北部 的聖廟裡,一塊黃銅板上插著三根 寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64 片金片,這就是所謂的漢...

第2周專案3 體驗複雜度(2)

問題及 檔名稱 複雜度 漢諾塔.cbp 作 者 王聰 完成日期 2015年9月11日 版 本 號 v1.0 問題描述 有乙個印度的古老傳說 在世界中心貝拿勒斯 在印度北部 的聖廟裡,一塊黃銅板上插著三根 寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64 片金片,...