第二周 体验复杂度--汉诺塔
用遞歸算法求解漢諾塔問(wèn)題的代碼:
#include <stdio.h> #define discCount 4//4,5,6,7,8... long move(int, char, char,char); int main() {long count;count=move(discCount,'A','B','C');printf("%d個(gè)盤(pán)子需要移動(dòng)%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;} }運(yùn)行結(jié)果:
當(dāng)體驗(yàn)盤(pán)子數(shù)discCount=4時(shí):
當(dāng)體驗(yàn)盤(pán)子數(shù)discCount=8時(shí):
當(dāng)體驗(yàn)盤(pán)子數(shù)discCount=16時(shí):
當(dāng)體驗(yàn)盤(pán)子數(shù)discCount=20時(shí):
當(dāng)體驗(yàn)盤(pán)子數(shù)discCount=24時(shí):
總結(jié):
???????? 通過(guò)運(yùn)行結(jié)果可以得出,當(dāng)盤(pán)子數(shù)為n,需要移動(dòng)的次數(shù)是f(n)=2^n-1。假如移動(dòng)一次需要1秒,n=4時(shí),需要15秒;n=8時(shí),需要255s;n=16時(shí),需要65535s;n=20時(shí),需要1048575s;n=24時(shí),需要16777215s……2^n從數(shù)量級(jí)上看是非常大的。
???????? 用遞歸算法求解漢諾塔問(wèn)題,其復(fù)雜度可以求得為O(2^n),是指數(shù)級(jí)的算法。隨著n的增大,結(jié)果的增長(zhǎng)速度越來(lái)越快!
?
?
總結(jié)
以上是生活随笔為你收集整理的第二周 体验复杂度--汉诺塔的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: OTRS工单管理系统
- 下一篇: orcad中添加图片