版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Word 格式斐波那契數(shù)列算法分析背景:假定你有一雄一雌一對(duì)剛出生的兔子,它們?cè)陂L(zhǎng)到一個(gè)月大小時(shí)開始交配,在第二月結(jié)束時(shí),雌兔子產(chǎn)下另一對(duì)兔子,過了一個(gè)月后它們也開始繁殖,如此這般持續(xù)下去。每只雌兔在開始繁殖時(shí)每月都產(chǎn)下一對(duì)兔子,假定沒有兔子死亡,在一年后總共會(huì)有多少對(duì)兔子?在一月底,最初的一對(duì)兔子交配,但是還只有1 對(duì)兔子;在二月底,雌兔產(chǎn)下一對(duì)兔子,共有 2 對(duì)兔子;在三月底,最老的雌兔產(chǎn)下第二對(duì)兔子,共有3 對(duì)兔子;在四月底,最老的雌兔產(chǎn)下第三對(duì)兔子,兩個(gè)月前生的雌兔產(chǎn)下一對(duì)兔子,共有5對(duì)兔子;如此這般計(jì)算下去,兔子對(duì)數(shù)分別是: 1, 1, 2, 3, 5, 8, 13, 21, 34,
2、 55,89,144,. 看出規(guī)律了嗎?從第3 個(gè)數(shù)目開始,每個(gè)數(shù)目都是前面兩個(gè)數(shù)目之和。這就是著名的斐波那契(Fibonacci )數(shù)列。有趣問題:1,有一段樓梯有10 級(jí)臺(tái)階 ,規(guī)定每一步只能跨一級(jí)或兩級(jí),要登上第10 級(jí)臺(tái)階有幾種不同的走法 ?答:這就是一個(gè)斐波那契數(shù)列:登上第一級(jí)臺(tái)階有一種登法;登上兩級(jí)臺(tái)階,有兩種登法;登上三級(jí)臺(tái)階,有三種登法;登上四級(jí)臺(tái)階,有五種方法所以,1, 2, 3, 5 , 8, 13登上十級(jí),有89 種。2,數(shù)列中相鄰兩項(xiàng)的前項(xiàng)比后項(xiàng)的極限是多少,就是問,當(dāng)n 趨于無窮大時(shí),F(xiàn)(n)/F(n+1)的極限是多少?答: 這個(gè)可由它的通項(xiàng)公式直接得到,極限是(-1
3、+ 5)/2 ,這個(gè)就是所謂的黃金分割點(diǎn),也是代表大自然的和諧的一個(gè)數(shù)字。數(shù)學(xué)表示:Fibonacci 數(shù)列的數(shù)學(xué)表達(dá)式就是:F(n) =F(n-1) + F(n-2)F(1) =1F(2) =1遞歸程序 1:Fibonacci 數(shù)列可以用很直觀的二叉遞歸程序來寫,用C+ 語(yǔ)言的描述如下:longfib1(intn)if (n =2)return1;完美整理Word 格式elsereturn fib1(n-1) +fib1(n-2);看上去程序的遞歸使用很恰當(dāng),可是在用 VC2005 的環(huán)境下測(cè)試 n=37 的時(shí)候用了大約3s,而 n=45的時(shí)候基本下樓打完飯也看不到結(jié)果 顯然這種遞歸的效率太
4、低了!遞歸效率分析:例如,用下面一個(gè)測(cè)試函數(shù):longfib1(intn, int*arr)arrn+;if (n =2的時(shí)候我們分析可知:T(N)=T(N-1) + T(N-2)+ 2而 fib(n) = fib(n-1) + fib(n-2) ,所以有 T(N) = fib(n) ,歸納法證明可得:fib(N)4時(shí), fib (N )=(3/2)N標(biāo)準(zhǔn)寫法:顯然這個(gè) O((3/2)N) 是以指數(shù)增長(zhǎng)的算法,基本上是最壞的情況。完美整理Word 格式其實(shí),這違反了遞歸的一個(gè)規(guī)則:合成效益法則。合成效益法則( Compoundinterest rule ):在求解一個(gè)問題的同一實(shí)例的時(shí)候,切勿
5、在不同的遞歸調(diào)用中做重復(fù)性的工作。所以在上面的代碼中調(diào)用fib(N-1) 的時(shí)候?qū)嶋H上同時(shí)計(jì)算了fib(N-2) 。這種小的重復(fù)計(jì)算在遞歸過程中就會(huì)產(chǎn)生巨大的運(yùn)行時(shí)間。遞歸程序 2:用一叉遞歸程序就可以得到近似線性的效率,用C+ 語(yǔ)言的描述如下:longfib(intn, longa, longb, intcount)if (count=n)returnb;returnfib(n,b, a+b,+count);longfib2(intn)returnfib(n,0,1, 1);這種方法雖然是遞歸了,但是并不直觀,而且效率上相比下面的迭代循環(huán)并沒有優(yōu)勢(shì)。迭代解法:Fibonacci 數(shù)列用迭代程
6、序來寫也很容易,用C+ 語(yǔ)言的描述如下:/ 也可以用數(shù)組將每次計(jì)算的f(n) 存儲(chǔ)下來,用來下次計(jì)算用(空間換時(shí)間)longfib3(intn)longx =0,y =1;for(intj =1; j n; j+)y =x + y;x =y - x;returny;這時(shí)程序的效率顯然為O(N), N = 45 的時(shí)候 =2)可以將它寫成矩陣乘法形式:將右邊連續(xù)的展開就得到:下面就是要用O(log(n)的算法計(jì)算:顯然用二分法來求,結(jié)合一些面向?qū)ο蟮母拍?,C+ 代碼如下:class Matrixpublic :longmatr22;Matrix( const Matrix&rhs);Matrix
7、( longa, longb, longc, longd);Matrix&operator =( const Matrix&);friendMatrixoperator *( const Matrix&lhs, const Matrix&rhs)Matrixret(0,0,0,0);ret.matr00=lhs.matr00*rhs.matr00+lhs.matr01*rhs.matr10;ret.matr01=lhs.matr00*rhs.matr01+ lhs.matr01*rhs.matr11;ret.matr10=lhs.matr10*rhs.matr00+ lhs.matr11*rh
8、s.matr10;ret.matr11=lhs.matr10*rhs.matr01+lhs.matr11*rhs.matr11;returnret;Matrix:Matrix(longa,long b, long c, long d)this-matr00=a;this-matr01=b;this-matr10=c;this-matr11=d;完美整理Word 格式Matrix:Matrix(constMatrix &rhs)this-matr00=rhs.matr00;this-matr01=rhs.matr01;this-matr10=rhs.matr10;this-matr11=rhs.
9、matr11;Matrix&Matrix:operator=( constMatrix&rhs)this-matr00=rhs.matr00;this-matr01=rhs.matr01;this-matr10=rhs.matr10;this-matr11=rhs.matr11;return * this;Matrixpower( const Matrix&m,intn)if (n =1)returnm;if (n%2=0)returnpower(m*m,n/2);elsereturnpower(m*m,n/2)* m;longfib4(intn)Matrixmatrix0(1,1, 1, 0
10、);matrix0=power(matrix0,n-1);returnmatrix0.matr00;這時(shí)程序的效率為O (log(N) ) 。完美整理Word 格式公式解法:在 O(1)的時(shí)間就能求得到F(n) 了:注意:其中 x 表示取距離x 最近的整數(shù)。用 C+ 寫的代碼如下:longfib5(intn)doublez =sqrt(5.0);doublex =(1 +z)/2;doubley =(1 - z)/2;return(pow(x,n) - pow(y,n)/z+0.5;這個(gè)與數(shù)學(xué)庫(kù)實(shí)現(xiàn)開方和乘方本身效率有關(guān)的,我想應(yīng)該還是在O(log(n)的效率??偨Y(jié):上面給出了5 中求解斐波那
11、契數(shù)列的方法,用測(cè)試程序主函數(shù)如下:intmain()coutfib1(45)endl;coutfib2(45)endl;coutfib3(45)endl;coutfib4(45)endl;coutfib5(45)endl;return0;函數(shù) fib1 會(huì)等待好久,其它的都能很快得出結(jié)果,并且相同為:1134903170 。而后面兩種只有在n =1000000000的時(shí)候會(huì)顯示出優(yōu)勢(shì)。由于我的程序都沒有涉及到高精度,所以要是求大數(shù)據(jù)的話,可以通過取模來獲得結(jié)果的后4 位來測(cè)試效率與正確性。另外斐波那契數(shù)列在實(shí)際工作中應(yīng)該用的很少,尤其是當(dāng)數(shù)據(jù)n 很大的時(shí)候(例如:1000000000 ),所
12、以綜合考慮基本普通的非遞歸O(n) 方法就很好了,沒有必要用矩陣乘法。完美整理Word 格式1、 N 皇后問題算法設(shè)計(jì)ALGORITHMprocedure PLACE(k)/ 如果一個(gè)皇后能放在第k 行的 X(k) 列,則返回 true ;否則返回false。 X 是一個(gè)全程數(shù)組,進(jìn)入此過程時(shí)已置了k 個(gè)值。 /global X(1 :k) ; integer i , ki 1while i0 do/ 對(duì)所有的行執(zhí)行以下語(yǔ)句/X(k) X(k)+1/ 移到下一列 /While X(k) n and not PLACE(k)doX(k) X(k) 十 l; /如果第 k 個(gè)皇后的列X(k) 不合
13、理,就看下一列/if X(k) n/ 找到一個(gè)位置/then if k=n/ 是一個(gè)完整的解嗎/then print(X)/ 是,打印這個(gè)數(shù)組/elsek k+1; X(k) 0 ; endif/ 擴(kuò)展,搜索下一個(gè)皇后/else kk 1/ 回溯 /endifend NQUEENSProgram :#include完美整理Word 格式#includeint k=0,a20,j=1,flag,n,c=0;/k為解的個(gè)數(shù) ,n 為皇后的個(gè)數(shù) ,flag 標(biāo)記有沒有放置皇后void lycQueen()/遞歸求解函數(shù)int i,h;/i為行號(hào) ,h 為列號(hào)for(h=1;h=n;h+)aj=h;f
14、or(i=1;ij;i+)/將第 j 個(gè)皇后的位置依次跟前面j-1 個(gè)皇后比較if(ai=aj|abs(aj-ai)=abs(j-i) flag=0;break;/兩個(gè)皇后在同一行或者同一對(duì)角線上,沖突else flag=1;/ 沒沖突 , 放置一個(gè)皇后/forif(flag=0&aj!=n) continue;/沒試探完 ,繼續(xù)試探if(flag=1&j=n)/放置完 n 個(gè)皇后 ,得到一個(gè)解k=k+1;c=1;/解的個(gè)數(shù)加1for(i=1;i=n;i+)printf(%d ,ai);/輸出第 i 個(gè)皇后放置的行號(hào)printf(n);if(aj = n)flag = 0;/ifif(flag=1&j!=n)j+;lycQueen();/遞歸調(diào)用if(flag=0&aj=n)j-;/回溯 , 退回去重新試探/for/lycQu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 湖北省多校聯(lián)考2024年中考語(yǔ)文信息模擬測(cè)試卷含答案
- 2024-2025年中國(guó)汽車?yán)^電器電商行業(yè)投資潛力分析及行業(yè)發(fā)展趨勢(shì)報(bào)告
- 2025年美白產(chǎn)品市場(chǎng)分析報(bào)告
- 高效節(jié)能蒸發(fā)式冷凝器項(xiàng)目可行性研究報(bào)告申請(qǐng)備案
- 2025年中國(guó)服裝零售市場(chǎng)調(diào)查研究及行業(yè)投資潛力預(yù)測(cè)報(bào)告
- 拖拉機(jī)方向盤項(xiàng)目可行性研究報(bào)告
- 2025加工廠勞動(dòng)合同范本
- 2025有擔(dān)保的借款合同范本
- 2025執(zhí)業(yè)醫(yī)師聘用合同
- 空氣動(dòng)力學(xué)優(yōu)化技術(shù):拓?fù)鋬?yōu)化:拓?fù)鋬?yōu)化項(xiàng)目設(shè)計(jì)與實(shí)踐
- 數(shù)據(jù)庫(kù)原理-期末考試題和答案
- 醫(yī)療健康咨詢服務(wù)合同
- (高清版)AQ 1056-2008 煤礦通風(fēng)能力核定標(biāo)準(zhǔn)
- 新材料專利申請(qǐng)與保護(hù)考核試卷
- NB-T+10131-2019水電工程水庫(kù)區(qū)工程地質(zhì)勘察規(guī)程
- 2024河南中考數(shù)學(xué)專題復(fù)習(xí)第六章 第一節(jié) 圓的基本性質(zhì) 課件
- 南京市聯(lián)合體2022-2023學(xué)年七年級(jí)上學(xué)期期末生物試題
- 熱性驚厥診斷治療與管理專家共識(shí)
- 《橋梁輕量化監(jiān)測(cè)系統(tǒng)建設(shè)規(guī)范(征求意見稿)》
- 現(xiàn)代農(nóng)業(yè)產(chǎn)業(yè)園建設(shè)規(guī)劃方案(2篇)
評(píng)論
0/150
提交評(píng)論