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

2021-07-05 09:04:28 字數 1628 閱讀 3544

/* 

*檔名稱:複雜度2漢諾塔.cpp

*作 者:彭子竹

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

*版 本 號: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。

*輸入描述:無

*程式輸出:移動次數

*/

**:

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

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

28.int main()

29.

35.

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

37.

47.}

執行結果:

4個盤子:

8個盤子:

16個盤子:

20個盤子:

24個盤子:

知識點總結:

加強了我們對遞迴的理解,遞迴演算法得優點就是降低複雜程度。

學習心得:

對遞迴演算法還是不熟練,以後加強練習。

(第二週專案3)體驗複雜度

1 兩種排序演算法的執行時間 提供兩種排序演算法,複雜度為o n 2 的選擇排序selectsort,和複雜度為o nlogn 的快速排序quicksort,在main函式中加入了對執行時間的統計。利用乙個將近10萬條資料的檔案作為輸入資料執行程式,感受兩種演算法在執行時間上的差異。執行中需要的資料...

第二週專案(4) 體驗複雜度

問題及 慢速排序 煙台大學電腦科學與技術學院 檔名稱 y.cpp 作 者 楊甯 完成日期 2015年9月11日 問題描述 兩種排序演算法的執行時間 輸入描述 無 程式輸出 資料量及排序執行過程 include include include define maxnum 100000 void sel...

第二週專案3(1)體驗複雜度

檔名稱 體驗複雜度.cpp 作 者 彭子竹 完成日期 2015年9月18日 版 本 號 v1.0 問題描述 排序是電腦科學中的乙個基本問題,產生了很多種適合不同情況下適 用的演算法,也一直作為演算法研究的熱點。本專案提供兩種排序演算法,復 雜度為o n 2 的選擇排序selectsort,和複雜度為...