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

2021-07-22 12:16:16 字數 1894 閱讀 5328

問題及**:

/*  

*檔名稱:123.cpp

*完成日期:2023年9月7號

*版本號:v1.0.1

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

寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的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。

輸入描述:無

輸出描述:金片的移動次數

*/

#include #define disccount 4 //改變disccount 執行在8,16,20,24下的結果

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

int main()

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

}

執行結果:

1.4個盤子  即disccount為4

2.8個盤子   即disccount為8

3.16個盤子 即disccount為16

4.20個盤子 即disccount為20

5.24個盤子 即disccount為24

分析資料並得出結論:

由題意,如果一秒鐘移動一次盤子,當n=4(盤子為4個)時,移動時間為15秒;

當n=8時,移動時間為255秒,即4.25分鐘;當n=16時,移動時間為65535秒,即18.2小時;

當n=20時,移動時間為1048575,即12.1天;

當n=24時,移動過時間為16777215,即194.2天。

16個盤子之內算是正常,20個可以忍受,24個時間太長,不能忍受。

知識點總結:

運用了遞迴的解題方法,這個思路簡化了複雜的運算,避免因為過長的程式出現錯誤,造成不必要的麻煩。

學習心得:

漢諾塔問題,是從模型中抽象出的數學問題,運用了遞迴的思路設計求解,在今後類似題目中也可以運用。

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

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

第2周 專案3 體驗複雜度

問題及 檔名稱 test.cpp 作 者 董子賓 完成日期 2015年 9 月 11日 版 本 號 v1.0 問題描述 體驗複雜度是o n 2 的選擇排序程式和複雜度為o nlogn 的快速排序程式 問題輸入 無 問題輸出 程式執行時間 複雜度是o n 2 的選擇排序程式 include inclu...

第2周專案3體驗複雜度

複雜度是o n 2 的選擇排序程式 問題及 煙台大學計算機與控制工程學院 問題描述 排序是電腦科學中的乙個基本問題,產生了很多種適合不同情況下適用的演算法,也一直作為演算法研究的熱點。本專案提供兩種排序演算法,複雜度為o n 2 的選擇排序selectsort,和複雜度為o nlogn 的快速排序q...