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

2021-08-14 02:41:25 字數 2154 閱讀 2316

/*   

*檔名稱:main.cpp

*作 者:李首言

*完成日期:2023年12月26日

*版 本 號:v1.0

*

*問題描述:漢諾塔問題(計算移動n個盤子需要移動的次數)

*輸入描述:盤子數目n

*程式輸出:見程式執行截圖

*/

(2)漢諾塔 

有乙個印度的古老傳說:在世界中心貝拿勒斯(在印度北部)的聖廟裡,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64片金片,這就是所謂的漢諾塔。不論白天黑夜,總有乙個僧侶在按照下面的法則移動這些金片:一次只移動一片,不管在哪根針上,小片必須在大片上面。僧侶們預言,當所有的金片都從梵天穿好的那根針上移到另外一根針上時,世界就將在一聲霹靂中消滅,而梵塔、廟宇和眾生也都將同歸於盡。 

可以演算法出,當盤子數為

n個時,需要移動的次數是f(

n)=2

n−1。n=64時,假如每秒鐘移一次,共需要18446744073709551615秒。乙個平年365天有31536000秒,閏年366天有31622400秒,平均每年31556952秒,移完這些金片需要5845.54億年以上,而地球存在至今不過45億年,太陽系的預期壽命據說也就是數百億年。真的過了5845.54億年,不說太陽系和銀河系,至少地球上的一切生命,連同梵塔、廟宇等,都早已經灰飛煙滅。據此,2n

從數量級上看大得不得了。 

用遞迴演算法求解漢諾塔問題,其複雜度可以求得為o(

2n),是指數級的演算法。請執行一下,體驗盤子數disccount為4、8、16、20、24時在時間耗費上的差異,你能忍受多大的disccount。

漢諾塔程式

(4個盤子)

(8個盤子)

(16個盤子)

(20個盤子)

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

問題及 cpp view plain copy 檔名稱 複雜度 漢諾塔.cbp 作 者 董雪 完成日期 2016年9月8日 版 本 號 v1.0 問題描述 有乙個印度的古老傳說 在世界中心貝拿勒斯 在印度北部 的聖廟裡,一塊黃銅板上插著三根 寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從...

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

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

第二週 專案3 體驗複雜度

include include include define maxnum 100000 void selectsort int a,int n if k j int main while fscanf fp,d x n eof n printf 資料量 d,開始排序.n t1 time 0 sel...