第二週專案3體驗複雜度 漢諾塔問題
問題及程式碼:
/* copyright (t) 2016,煙臺大學計算機學院 *All rights reserved. *檔名稱:cpp1.cpp *作者:張相如 *完成日期:2016年9月8日 *版本號:v1.0 *問題描述:用遞迴演算法求解漢諾塔問題,其複雜度可以求得為O(2^n) ,是指數級的演算法。請到課程主頁下載程式執行一下,體驗盤子數discCount為4、8、16、20、24時在時間耗費上的差異,你能忍受多大的discCount。 *輸入描述:無(盤子數已定義) *程式輸出:盤子需要移動的次數 */ #include <stdio.h> #define discCount 24 //數值分別改為4、8、12、16、20、24並執行結果 long move(int, char, char,char); int main() { long count; count=move(discCount,'A','B','C'); printf("%d個盤子需要移動%ld次\n", discCount, count); return 0; } long move(int n, char A, char B,char C) { long c1,c2; if(n==1) return 1; else { c1=move(n-1,A,C,B); c2=move(n-1,B,A,C); return c1+c2+1; } }
執行結果:
知識點總結:
演算法的複雜度
心得體會:
在本次測試中,盤子的數量增加,會導致移動次數的增加,根據遞迴的原理,移動次數是以指數級增加的。這導致計算機的運算量急劇增加。當盤子增加到24個時,移動次數已經達到了16777215次,所以計算機無法立即出現結果。本實驗主要是體驗了演算法的複雜度以及對於遞迴思想的理解。
相關推薦
第二週專案3體驗複雜度 漢諾塔問題
問題及程式碼: /* copyright (t) 2016,煙臺大學計算機學院 *All rights reserved. *檔名稱:cpp1.cpp *作者:張相如 *完成日期:2016年9月8日 *版本號:v1.0 *問題描述:用遞迴演算法求解漢諾塔問題,
第二週—專案3 體驗複雜度—漢諾塔
問題描述及程式碼: /* *煙臺大學計控學院 *作 者:楊徵 *完成日期:2015年9月11日 *問題描述:有一個印度的古老傳說:在世界中心貝拿勒斯(在印度北部)的聖廟裡,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從
第二週-專案3 體驗複雜度-漢諾塔問題
問題及程式碼: /* *Copyright (c) 2016, 煙臺大學計算機與控制工程學院 *All rights reserved. *檔名稱:s3 *作 者:孫麗瑋 *完成日期:2016年9月6日 *問題描述:有一個印度的古老傳說:在世界中心貝拿勒
第二週專案4 體驗複雜度---漢諾塔
/* * 煙臺大學計算機與控制工程學院 *檔名稱:main.cpp *作 者:王旭 *完成日期:2015年9月12日 *版 本 號:v
第二週專案3-體驗複雜度(2)漢諾塔
問題及程式碼: /* *煙臺大學計算機與控制工程學院 *檔名稱:lulu.cpp *作 者:蘆亞茹 *完成日期:2015年9月13日 *問題描述:漢諾塔 *輸入描述:無 *程
第二週專案3 體驗複雜度
#include <stdio.h> #include <time.h> #include <stdlib.h> #define MAXNUM 100000 void quicksort(int data[],int first,int last) { int i,
第二週 專案3(2)--體驗複雜度---漢諾塔
/* *Copyright (c)2016,煙臺大學計算機學院 *All rights reserved. *檔名稱:傳寫.cpp *作者:李欣 *完成日期:2016年9月8日 *版本號:v1.0 * *問題描述:用遞迴演算法求解漢諾塔問題,體驗盤子數為4、8、16、20、24時在時間耗費
第二週 體驗複雜度--漢諾塔
/* *Copyright(c)2014,煙臺大學計算機與控制工程學院 *All rights reserved. *檔名稱:test.cpp *作者:楊珺 *完成日期:2015年9月7日 *版本號:v1.0 *問題描述:有一個印度的古老傳說:在世界中心貝拿勒
第三週專案三-體驗複雜度2(漢諾塔問題)
/* *Copyright (c) 2017, 煙臺大學計算機學院 *All rights reserved. *檔名稱:zha.cpp *作者:張思琦 *完成日期:2017年9月13日 *版 本 號:v1.0 * *問題描述:漢諾塔問題(計算移動n個盤子需要
第二週——專案3複雜度體驗(2)漢諾塔
/* *Copyright (c++) 2015,煙臺大學計算機學院 *All rights reserved. *檔名稱:hut.cpp *作者:商文軻 *完成日期:2014年9月17日 *版本號:vc6.0 *問題描述:用
第二週專案3複雜度體驗 漢諾塔
<pre class="cpp" name="code">01./* 02.*Copyright (c)2015,煙臺大學計算機與控制工程學院 03.*All rights reserved. 04.*檔名稱:漢諾塔.cbp 05.*作 者:李涵睿
(第二週專案3)體驗複雜度
(1)兩種排序演算法的執行時間 提供兩種排序演算法,複雜度為O(n 2 )的選擇排序selectsort,和複雜度為O(nlogn) 的快速排序quicksort,在main函式中加入了對執行時間的統計。 利用一個將近10萬條資料的檔案作為輸入資料執行程式,感受兩種演算
第二週-專案3
#include <stdio.h> #include <time.h> #include <stdlib.h> #define MAXNUM 100000 void selectsort(int a[], in
第十二週專案3 - 圖遍歷演算法實現(2)
/*Copyright (c) 2015, 煙臺大學計算機與控制工程學院 * All rights reserved. * 檔名稱:H1.cpp * 作者:辛志勐 * 完成日期:2015年11月23日 * 版本號:VC6.0 * 問題描述:廣度優先遍歷——BFS * 輸入描述:無 * 程式輸出:圖的
第十二週專案3 - 圖遍歷演算法實現(1)
/*Copyright (c) 2015, 煙臺大學計算機與控制工程學院 * All rights reserved. * 檔名稱:H1.cpp * 作者:辛志勐 * 完成日期:2015年11月23日 * 版本號:VC6.0 * 問題描述:實現圖遍歷演算法,輸出圖結構的深度優先(DFS)遍歷序列
資料結構第二週 專案2程式的多組織檔案
**問題及程式碼: /* *(1) .h 標頭檔案:定義資料型別、宣告自定義函式、定義巨集等 *(2).cpp 原始檔1:用於實現標頭檔案中宣告的自定義函式 *(3).cpp 原始檔2:定義main()函式,用於呼叫相關函式,實現問題求解目標。 *標頭檔案
第12周專案3漢諾塔--移動步驟(遞迴函式)
問題及程式碼: /* *Copyright (c)2014,煙臺大學計算機與控制工程學院 *All rights reserved. *檔名稱:hannuota.cpp *作 者:單昕昕 *完成日期:2014年11月13日 *版 本 號:v1.0 *
演算法之漢諾塔時間複雜度計算
設a, b, c是3個塔座:開始時,塔座a上有n個自上而下、由小到大地疊在一起圓盤,各圓盤從小到大編號為1, 2, …, n,現要求將塔座a上的這一疊圓盤移到塔座b上,並仍按同樣順序疊置,移動圓盤時遵守以下移動規則: 規則1:每次只能移動1個圓盤; 規則2:不允許將較大的圓
第十一週 專案 3 點類派生直線類 .
#include <iostream> #include<Cmath> using namespace std; class Point{ public: Point():x(0),y(0){}; Point(double x0,do
第五週專案3-時間類(2)修改
修改原因:在上一篇博文中第五週專案3-時間類(2)中提交的程式碼存在一些問題: (1) 老師給出的程式碼中,輸入60或24也算作合法時間,但是在現實生活中並不存在這樣的時間,所以要把程式碼改一下; (2)當輸入的要增加的秒,分,小時數加上原本的時,分,秒數大於60或者24