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

2021-07-22 13:23:06 字數 1808 閱讀 8012

問題及**:

/*

* 檔名稱: 1.cpp

* 作 者:路亞麗

* 完成日期:2023年 9月 8日

* 版 本 號:v1.0

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

10. 寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64

11. 片金片,這就是所謂的漢諾塔。不論白天黑夜,總有乙個僧侶在按照下面的法則移動這些金片:

12. 一次只移動一片,不管在哪根針上,小片必須在大片上面。僧侶們預言,當所有的金片都從梵天

13. 穿好的那根針上移到另外一根針上時,世界就將在一聲霹靂中消滅,而梵塔、廟宇和眾生也都將

14. 同歸於盡。

15. 可以演算法出,當盤子數為n 個時,需要移動的次數是f(n)=2 n ?1 。n=64時,假如每秒鐘移一次,

16. 共需要18446744073709551615秒。乙個平年365天有31536000秒,閏年366天有31622400秒,

17. 平均每年31556952秒,移完這些金片需要5845.54億年以上,而地球存在至今不過45億年,太陽系

18. 的預期壽命據說也就是數百億年。真的過了5845.54億年,不說太陽系和銀河系,至少地球上的一

19. 切生命,連同梵塔、廟宇等,都早已經灰飛煙滅。據此,2 n從數量級上看大得不得了。用遞迴算

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

* 輸入描述:無

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

*/#include #define disccount 4

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

int main()

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

}

執行結果:盤子數為4時:

盤子數為8時:

盤子數為16時:

盤子數為20時:

盤子數為24時:

知識點總結:

採用了遞迴演算法來求解。

指數級複雜度的演算法當n逐漸增大時,所需的執行時間會成**性增長,時間耗費更長。

學習心得:

通過這道題更加深入的了解了演算法複雜度,掌握了遞迴演算法。

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

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

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

檔名稱 專案3 體驗複雜度 2 漢諾塔.cpp 作 者 周潔 完成日期 2015年 9月13 日 版 本 號 問題描述 有乙個印度的古老傳說 在世界中心貝拿勒斯 在印度北部 的聖廟裡,一塊黃銅板上插著三根寶石針。印度教 輸入描述 需要移動的盤子數 程式輸出 盤子移動的次數 用遞迴演算法求解漢諾塔問題...

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

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