版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、分治法1、二分搜索算法是利用( 分治策略)實(shí)現(xiàn)的算法。9. 實(shí)現(xiàn)循環(huán)賽日程表利用的算法是(分治策略)27、 Strassen 矩陣乘法是利用(分治策略 )實(shí)現(xiàn)的算法。34實(shí)現(xiàn)合并排序利用的算法是(分治策略) 。實(shí)現(xiàn)大整數(shù)的乘法是利用的算法( 分治策略 ) 。17實(shí)現(xiàn)棋盤覆蓋算法利用的算法是(分治法) 。29、使用分治法求解不需要滿足的條件是(子問題必須是一樣的) 。不可以使用分治法求解的是( 0/1 背包問題 ) 。動(dòng)態(tài)規(guī)劃下列不是動(dòng)態(tài)規(guī)劃算法基本步驟的是( 構(gòu)造最優(yōu)解)下列是動(dòng)態(tài)規(guī)劃算法基本要素的是(子問題重疊性質(zhì)) 。下列算法中通常以自底向上的方式求解最優(yōu)解的是(動(dòng)態(tài)規(guī)劃法 )備忘錄方法是
2、那種算法的變形。 ( 動(dòng)態(tài)規(guī)劃法)最長公共子序列算法利用的算法是( 動(dòng)態(tài)規(guī)劃法) 。矩陣連乘問題的算法可由(動(dòng)態(tài)規(guī)劃算法B)設(shè)計(jì)實(shí)現(xiàn)。實(shí)現(xiàn)最大子段和利用的算法是( 動(dòng)態(tài)規(guī)劃法 ) 。貪心算法能解決的問題:單源最短路徑問題,最小花費(fèi)生成樹問題,背包問題,活動(dòng)安排問題,不能解決的問題: N 皇后問題, 0/1 背包問題是貪心算法的基本要素的是(貪心選擇性質(zhì)和最優(yōu)子結(jié)構(gòu)性質(zhì)) ?;厮莘ɑ厮莘ń饴眯惺圬泦T問題時(shí)的解空間樹是( 排列樹 ) 。剪枝函數(shù)是回溯法中為避免無效搜索采取的策略回溯法的效率不依賴于下列哪些因素( 確定解空間的時(shí)間)分支限界法最大效益優(yōu)先是( 分支界限法 )的一搜索方式。分支限界法解
3、最大團(tuán)問題時(shí),活結(jié)點(diǎn)表的組織形式是( 最大堆 ) 。分支限界法解旅行售貨員問題時(shí),活結(jié)點(diǎn)表的組織形式是( 最小堆 )優(yōu)先隊(duì)列式分支限界法選取擴(kuò)展結(jié)點(diǎn)的原則是( 結(jié)點(diǎn)的優(yōu)先級(jí))在對(duì)問題的解空間樹進(jìn)行搜索的方法中 , 一個(gè)活結(jié)點(diǎn)最多有一次機(jī)會(huì)成為活結(jié)點(diǎn)的是( 分支限界法 ).從活結(jié)點(diǎn)表中選擇下一個(gè)擴(kuò)展結(jié)點(diǎn)的不同方式將導(dǎo)致不同的分支限界法, 以下除 ( 棧式分支限界法 ) 之外都是最常見的方式 .(1)隊(duì)列式(FIFO)分支限界法:按照隊(duì)列先進(jìn)先出(FIFO)原則選取下一個(gè)節(jié)點(diǎn)為擴(kuò)展節(jié)點(diǎn)。( 2)優(yōu)先隊(duì)列式分支限界法:按照優(yōu)先隊(duì)列中規(guī)定的優(yōu)先級(jí)選取優(yōu)先級(jí)最高的節(jié)點(diǎn)成為當(dāng)前擴(kuò)展節(jié)點(diǎn)。(最優(yōu)子結(jié)構(gòu)性質(zhì))
4、是貪心算法與動(dòng)態(tài)規(guī)劃算法的共同點(diǎn)。貪心算法與動(dòng)態(tài)規(guī)劃算法的主要區(qū)別是( 貪心選擇性質(zhì)) ?;厮菟惴ê头种藿绶ǖ膯栴}的解空間樹不會(huì)是 ( 無序樹 ).14哈弗曼編碼的貪心算法所需的計(jì)算時(shí)間為(B) 。A、O( n2n )B、O( nlogn )C、O( 2n)D、O( n)21、下面關(guān)于NP問題說法正確的是(B )A NP 問題都是不可能解決的問題B P類問題包含在NP類問題中C NP完全問題是P類問題的子集D NP類問題包含在P類問題中40、背包問題的貪心算法所需的計(jì)算時(shí)間為(B)A、 O(n2n)B、 O(nlogn ) C、 O(2n)D、 O(n)42 0-1 背包問題的回溯算法所需的
5、計(jì)算時(shí)間為( A)A、 O( n2n)B、 O( nlogn ) C 、 O( 2n) D、 O( n).47. 背包問題的貪心算法所需的計(jì)算時(shí)間為( B) 。A、 O( n2n )B、 O( nlogn ) C 、 O( 2n)D、 O( n)53 采用貪心算法的最優(yōu)裝載問題的主要計(jì)算量在于將集裝箱依其重量從小到大排序, 故算法的時(shí)間復(fù)雜度為 ( B )。A、 O( n2n)B、 O( nlogn ) C 、 O( 2n) D 、 O( n)56、算法是由若干條指令組成的有窮序列,而且滿足以下性質(zhì)(D )( 1) 輸入:有 0 個(gè)或多個(gè)輸入( 2) 輸出:至少有一個(gè)輸出( 3) 確定性:指令
6、清晰,無歧義( 4) 有限性:指令執(zhí)行次數(shù)有限,而且執(zhí)行時(shí)間有限A (2)(3)B(1)(2)(4) C(1)(3)(4) D (2)(3)(4)57、函數(shù)32n+10nlogn的漸進(jìn)表達(dá)式是(B ).A. 2 n B. 32 n C. nlog n D. 10nlog n59、用動(dòng)態(tài)規(guī)劃算法解決最大字段和問題,其時(shí)間復(fù)雜性為(B ).A.logn B.n C.n 2 D.nlogn 61、設(shè)f(N),g(N)是定義在正數(shù)集上的正函數(shù),如果存在正的常數(shù)C和自然數(shù)N,使得當(dāng)N>L時(shí)有f(N) &Cg(N),則稱函數(shù)f(N)當(dāng)N充分大時(shí)有下界g(N),記作f(N) Q(g(N),即
7、f(N)的階(A )g(N) 的階.A.不高于B.不低于C.等價(jià)于D.逼近二、填空題2、程序是 算法用某種程序設(shè)計(jì)語言的具體實(shí)現(xiàn)。3、算法的“確定性”指的是組成算法的每條指令 是清晰的,無歧義的。6、算法是指解決問題的一種方法或一個(gè)過程。7、從分治法的一般設(shè)計(jì)模式可以看出,用它設(shè)計(jì)出的程序一般是遞歸算法。11、計(jì)算一個(gè)算法時(shí)間復(fù)雜度通??梢杂?jì)算循環(huán)次數(shù)、基本操作的頻率或計(jì)算步。14、解決0/1背包問題可以使用動(dòng)態(tài)規(guī)劃、回溯法和分支限界法,其中不需要排序的是動(dòng)態(tài)規(guī)劃,需要排序的是回溯法 ,分支限界法。15、使用回溯法進(jìn)行狀態(tài)空間樹裁剪分支時(shí)一般有兩個(gè)標(biāo)準(zhǔn):約束條件和目標(biāo)函數(shù)的界,N皇后問題和0/
8、1背包問題正好是兩種不同的類型,其中同時(shí)使用約束條件和目標(biāo)函數(shù)的界進(jìn)行裁剪的是0/1背包問題,只使用約束條件進(jìn)行裁剪的是N 室后問題。30.回溯法是一種既帶有系統(tǒng)性 又帶有 跳躍性的搜索算法。33 .回溯法搜索解空間樹時(shí),常用的兩種剪枝函數(shù)為約束函數(shù) 和限界函數(shù)。34 .任何可用計(jì)算機(jī)求解的問題所需的時(shí)間都與其規(guī)模 有關(guān)。35 .快速排序算法的性能取決于劃分的對(duì)稱性 o36 . Prim 算法利用 貪心 策略求解 最小牛成樹 問題.其時(shí)間復(fù)雜度是O(n2)。37 .圖的m著色問題可用 回溯法求解,其解空間樹中葉子結(jié)點(diǎn)個(gè)數(shù)是 _m n_,解空間樹中每個(gè)內(nèi)結(jié)點(diǎn)的孩子數(shù)是 m。4 .若序列X=B,C
9、,A,D,B,C,D , Y=A,C,B,A,B,D,C,D,請(qǐng)給出序列X和Y的一個(gè)最長公共子序列 BABCD 或CABCD或CADCD。5 .用回溯法解問題時(shí),應(yīng)明確定義問題的解空間,問題的解空間至少應(yīng)包含一個(gè)(最優(yōu))解8.0-1背包問題的回溯算法所需的計(jì)算時(shí)間為一o(n*2n)_,用動(dòng)態(tài)規(guī)劃算法所需的計(jì)算時(shí)間為o(minnc,2 n_。二、綜合題(50分)1 .寫出設(shè)計(jì)動(dòng)態(tài)規(guī)劃算法的主要步驟。問題具有最優(yōu)子結(jié)構(gòu)性質(zhì);構(gòu)造最優(yōu)值的遞歸關(guān)系表達(dá)式;3最優(yōu)值的算法描述;構(gòu)造最優(yōu)解;2 .流水作業(yè)調(diào)度問題的johnson算法的思想。令N=i|a i<b, N=i|a i>=b;將N中作
10、業(yè)按a的非減序排序得到N',將N中作業(yè)按bi的 非增序排序得到N/;N'中作業(yè)接N/中作業(yè)就構(gòu)成了滿足Johnson法則的最優(yōu)調(diào)度。3 .若n=4,在機(jī)器M1和M2上加工作業(yè)i所需的時(shí)間分別為 a和bi,且(ai,a 2,a 3,a 4)=(4,5,12,10), (bi,b 2,b 3,b 4)=(8,2,15,9)求4個(gè)作業(yè)的最優(yōu)調(diào)度方案,并計(jì)算最優(yōu)值。步驟為:N1=1, 3, N2=2, 4;N' =1 , 3, N2' =4, 2; 最優(yōu)值為:384 .使用回溯法解0/1背包問題:n=3, C=9, V=6,10,3 , W=3,4,4,其解空間有長度為
11、3的0-1 向量組成,要求用一棵完全二叉樹表示其解空間(從根出發(fā),左 1右0),并畫出其解空間樹,計(jì) 算其最優(yōu)值及最優(yōu)解。解空間為(0,0,0),(0,1,0),(0,0,1),(1,0,0),(0,1,1),(1,0,1),(1,1,0),(1,1,1)。解空間樹為:該問題的最優(yōu)值為:16最優(yōu)解為:(1, 1, 0)5 .設(shè)S=X,長,一,Xn是嚴(yán)格遞增的有序集,利用二叉樹的結(jié)點(diǎn)來存儲(chǔ)S中的元素,在表示S的二叉搜索樹中搜索一個(gè)元素 X,返回的結(jié)果有兩種情形,(1)在二叉搜索樹的內(nèi)結(jié)點(diǎn)中找到 X=X, 其概率為bio (2)在二叉搜索樹的葉結(jié)點(diǎn)中確定 XC (X, X+1),其概率為a。在表示
12、S的二叉搜 索樹T中,設(shè)存儲(chǔ)元素X的結(jié)點(diǎn)深度為C ;葉結(jié)點(diǎn)(X, X+1)的結(jié)點(diǎn)深度為di ,則二叉搜索樹T 的平均路長p為多少?假設(shè)二叉搜索樹Tij=X, X+1,X最優(yōu)值為mij, Wij=ai-1+b+bj+aj,貝U mij(1<=i<=j<=n)遞歸關(guān)系表達(dá)式為什么?nn二叉樹T的平均路長P= bi *(1 Ci) + aj* dj i 1j 0mij=Wij+minmik+mk+1j (1<=i<=j<=n,mii-1=0)mij=0 (i>j)6 .描述0-1背包問題。已知一個(gè)背包的容量為C,有n件物品,物品i的重量為W,價(jià)值為V,求應(yīng)如
13、何選擇裝入背包中 的物品,使得裝入背包中物品的總價(jià)值最大。三、簡答題 ( 30 分)1 .流水作業(yè)調(diào)度中,已知有n個(gè)作業(yè),機(jī)器M1和M2上加工作業(yè)i所需的時(shí)間分別為a和bi,請(qǐng) 寫出流水作業(yè)調(diào)度問題的 johnson 法則中對(duì) ai 和 bi 的排序算法。 (函數(shù)名可寫為 sort(s,n) )2 . 最優(yōu)二叉搜索樹問題的動(dòng)態(tài)規(guī)劃算法(設(shè)函數(shù)名 binarysearchtree) )1.void sort(flowjope s,int n)int i,k,j,l;for(i=1;i<=n-1;i+)/ 選擇排序k=i;while(k<=n&&sk.tag!=0) k
14、+;if(k>n) break;/ 沒有 ai ,跳出elsefor(j=k+1;j<=n;j+)if(sj.tag=0)if(sk.a>sj.a) k=j;swap(si.index,sk.index);swap(si.tag,sk.tag); l=i;/ 記下當(dāng)前第一個(gè)bi 的下標(biāo)for(i=l;i<=n-1;i+)k=i;for(j=k+1;j<=n;j+)if(sk.b<sj.b) k=j;swap(si.index,sk.index); / 只移動(dòng) index 和 tagswap(si.tag,sk.tag); 2.void binarysearc
15、htree(int a,int b,int n,int *m,int *s,int *w)int i,j,k,t,l;for(i=1;i<=n+1;i+) wii-1=ai-1;mii-1=0;for(l=0;l<=n-1;l+)/l是下標(biāo) j-i 的差for(i=1;i<=n-l;i+) j=i+l;wij=wij-1+aj+bj;mij=mii-1+mi+1j+wij;sij=i;for(k=i+1;k<=j;k+) t=mik-1+mk+1j+wij;if(t<mij) mij=t;sij=k;一、 填空題(本題15分,每小題1分)1、算法就是一組有窮的 規(guī)
16、則,它們規(guī)定了解決某一特定類型問題的一系列運(yùn)算2、在進(jìn)行問題的計(jì)算復(fù)雜性分析之前,首先必須建立求解問題所用的計(jì)算模型。3個(gè)基本計(jì)算模 型是隨機(jī)存取機(jī)RAM 、 隨機(jī)存取存儲(chǔ)程存機(jī)RASP、 圖靈機(jī) 。3、算法的復(fù)雜性是算法效率 的度量,是評(píng)價(jià)算法優(yōu)劣的重要依據(jù)。4、計(jì)算機(jī)的資源最重要的是時(shí)間和空間 資源5、f(n尸 6 X2n+n2, f(n)的漸進(jìn)性態(tài) f(n尸 O(2An)6、貪心算法總是做出在當(dāng)前看來最好的選擇。也就是說貪心算法并不從整體最優(yōu)考慮,它所做出的選擇只是在某種意義上的局部最優(yōu)結(jié)構(gòu)二、簡答題(本題25分,每小題5分)1、 簡單描述分治法的基本思想。2、 簡述動(dòng)態(tài)規(guī)劃方法所運(yùn)用的
17、最優(yōu)化原理。3、 何謂最優(yōu)子結(jié)構(gòu)性質(zhì)?4、 簡單描述回溯法基本思想。5、 何謂 P、NR NPCR題三、算法填空(本題20分,每小題5分)1、n后問題回溯算法(1)用二維數(shù)組ANN存儲(chǔ)皇后位置,若第i行第j列放有皇后,則Aij 為非0值,否則值為00分別用一維數(shù)組MN、L2*N-1、R2*N-1表示豎列、左斜線、右斜線是否放有棋子,有則值為1,否則值為00for(j=0;j<N;j+)if( 1) /* 安全檢查*/ Aij=i+1; /* 放皇后*/if(i=N-1)輸出結(jié)果;else 3; ; /* 試探下一行 */4;/* 去皇后*/2、數(shù)塔問題。有形如下圖所示的數(shù)塔,從頂部出發(fā),
18、在每一結(jié)點(diǎn)可以選擇向左走或是向右走, 一起走到底層,要求找出一條路徑,使路徑上的值最大。for(r=n-2;r>=0;r-) /自底向上遞歸計(jì)算for(c=0; 1;c+)if( tr+1c>tr+1c+1)2else 3 ;Hanoi(n,a,b,c) if(n=1)3、Hanoi 算法elseHanoi(n-1,b, a, c); 4、Dijkstra算法求單源最短路徑du:s到u的距離pu:記錄前一節(jié)點(diǎn)信息Init-single-source(G,s) for each vertex v VG do dv=00; 1ds=0 Relax(u,v,w) if dv>du+
19、w(u,v) then dv=du+wu,v;2dijkstra(G,w,s)1. Init-single-source(G,s)2. S=3. Q=VG4. while Q<> do u=min(Q) S=S U u for each vertex 3下圖中從v1 畫出求得最 棄的結(jié)點(diǎn)用 圓圈。框賽,現(xiàn)設(shè)計(jì)表:do 4四、算法理解題(本題10分) 根據(jù)優(yōu)先隊(duì)列式分支限界法,求 點(diǎn)到v9點(diǎn)的單源最短路徑,請(qǐng) 優(yōu)解的解空間樹。要求中間被舍 x標(biāo)記,獲得中間解的結(jié)點(diǎn)用單 起,最優(yōu)解用雙圓圈框起。五、算法理解題(本題5分) 設(shè)有n=3個(gè)運(yùn)動(dòng)員要進(jìn)行循環(huán)一個(gè)滿足以下要求的比賽日程每個(gè)選手必
20、須與其他n-1名選手比賽各一次;每個(gè)選手一天至多只能賽一次;循環(huán)賽要在最短時(shí)間內(nèi)完成。(1)如果n=2k,循環(huán)賽最少需要進(jìn)行幾天;(2)當(dāng)n=23=8時(shí),請(qǐng)畫出循環(huán)賽日程表。六、算法設(shè)計(jì)題(本題15分)分別用貪心算法、動(dòng)態(tài)規(guī)劃法、回溯法設(shè)計(jì) 0-1背包問題。要求:說明所使用的算法策略;寫 出算法實(shí)現(xiàn)的主要步驟;分析算法的時(shí)間。七、算法設(shè)計(jì)題(本題10分)通過鍵盤輸入一個(gè)高精度的正整數(shù) n(n的有效位數(shù)0 240),去掉其中任意s個(gè)數(shù)字后,剩下的 數(shù)字按原左右次序?qū)⒔M成一個(gè)新的正整數(shù)。 編程對(duì)給定的n和s,尋找一種方案,使得剩下的數(shù)字 組成的新數(shù)最小?!緲永斎搿?78543S=4【樣例輸出】1
21、3二、簡答題(本題25分,每小題5分)6、分治法的基本思想 是將一個(gè)規(guī)模為n的問題分解為k個(gè)規(guī)模較小的子問題,這些子問題互相 獨(dú)立且與原問題相同;對(duì)這 k個(gè)子問題分別求解。如果子問題的規(guī)模仍然不夠小,則再劃分 為k個(gè)子問題,如此遞歸的進(jìn)行下去,直到問題規(guī)模足夠小,很容易求出其解為止;將求出 的小規(guī)模的問題的解合并為一個(gè)更大規(guī)模的問題的解,自底向上逐步求出原來問題的解。7、“最優(yōu)化原理”用數(shù)學(xué)化的語言來描述:假設(shè)為了解決某一優(yōu)化問題,需要依次作出n個(gè)決策D1, D2,Dn,如若這個(gè)決策序列是最優(yōu)的,對(duì)于任何一個(gè)整數(shù)k, 1 < k < n ,不論前面k個(gè)決策是怎樣的,以后的最優(yōu)決策只
22、取決于由前面決策所確定的當(dāng)前狀態(tài),即以后的決 策Dk+1, Dk+2,Dn也是最優(yōu)的。8、某個(gè)問題的最優(yōu)解包含著其子問題的最優(yōu)解。這種性質(zhì)稱為最優(yōu)子結(jié)構(gòu)性質(zhì)。9、回溯法的基本思想是在一棵含有問題全部可能解的狀態(tài)空間樹上進(jìn)行深度優(yōu)先搜索,解為葉 子結(jié)點(diǎn)。搜索過程中,每到達(dá)一個(gè)結(jié)點(diǎn)時(shí),則判斷該結(jié)點(diǎn)為根的子樹是否含有問題的解,如 果可以確定該子樹中不含有問題的解,則放棄對(duì)該子樹的搜索,退回到上層父結(jié)點(diǎn),繼續(xù)下 一步深度優(yōu)先搜索過程。在回溯法中,并不是先構(gòu)造出整棵狀態(tài)空間樹,再進(jìn)行搜索,而是 在搜索過程,逐步構(gòu)造出狀態(tài)空間樹,即邊搜索,邊構(gòu)造。10、P(Polynomial問題):也即是多項(xiàng)式復(fù)雜程度
23、的問題。NP就是Non-deterministic Polynomial的問題,也即是多項(xiàng)式復(fù)雜程度的非確定性問題。NPC(NP Complete)問題,這種問題只有把解域里面的所有可能都窮舉了之后才能得出答案, 這樣的問題是NP里面最難的問題,這種問題就是 NPC'可題。三、算法填空(本題20分,每小題5分)1、n后問題回溯算法(1) !Mj&&!Li+j&&!Ri-j+N(2) Mj=Li+j=Ri-j+N=1;(3) try(i+1,M,L,R,A) Aij=0(5) Mj=Li+j=Ri-j+N=02、數(shù)塔問題。(1) c<=r(2)trc
24、+=tr+1c(3) trc+=tr+1c+13、Hanoi 算法(1) move(a,c)(2) Hanoi(n-1, a, c , b)(3) Move(a,c)4、(1) pv=NIL(2) pv=u(3) v adju(4) Relax(u,v,w)四、算法理解題(本題10分)五、(1) 8天(2分);(2)當(dāng)n=23=8時(shí),循環(huán)賽日程表(3分)。六、算法設(shè)計(jì)題(本題15分)(1)貪心算法 O (nlog (n)?首先計(jì)算每種物品單位重量的價(jià)值 Vi/Wi , 價(jià)值最高的物品裝入背包。若將這種物品全部 則選擇單位重量價(jià)值次高的物品并盡可能多地 包裝滿為止。?具體算法可描述如下:1 2
25、3 42 1 4 33 4 1 24 3 2 15 6 7 86 5 8 77 8 5 68 7 6 51 2 3 4略,將盡可能多的單位重量 的物品總重量未超過C,ft略一直地進(jìn)行下去,直到背void Knapsack(int n,float M,float v,float w,float x口)Sort(n,v,w);int i;for (i=1;i<=n;i+) xi=0;float c=M;for (i=1;i<=n;i+)if (wi>c) break;xi=1;c-=wi;if (i<=n) xi=c/wi;(2)動(dòng)態(tài)規(guī)劃法O(nc)m(i , j)是背包容
26、量為j ,可選擇物品為i , i+1 ,n時(shí)0-1背包問題的最優(yōu)值。由0-1背包 問題的最優(yōu)子結(jié)構(gòu)性質(zhì),可以建立計(jì)算m(i , j)的遞歸式如下。void KnapSack(int v口,int w口,int c,int n,int m11)int jMax=min(wn-1,c);for (j=0;j<=jMax;j+) /*m(n,j)=0 0=<j<wn*/mnj=0;for (j=wn;j<=c;j+) /*m(n,j)=vn j>=wn*/mnj=vn;for (i=n-1;i>1;i-) int jMax=min(wi-1,c);for (j=0
27、;j<=jMax;j+) /*m(i,j)=m(i+1,j) 0=<j<wi*/mij=mi+1j;for (j=wi;j<=c;j+)/*m(n,j)=vn j>=wn*/mij=max(mi+1j,mi+1j-wi+vi);m1c=m2c;if(c>=w1)m1c=max(m1c,m2c-w1+v1);(3)回溯法O(2 n)cw:當(dāng)前重量 cp:當(dāng)前價(jià)值bestp :當(dāng)前最優(yōu)值void backtrack( int i)/回溯法 i初值1if(i > n) /到達(dá)葉結(jié)點(diǎn) bestp = cp;return;if(cw + wi <= c)
28、/ 搜索左子樹 cw += wi; cp += Pi; backtrack(i+1); cw -= wi; cp = Pi; if(Bound(i+1)>bestp)/搜索右子樹 backtrack(i+1);七、算法設(shè)計(jì)題(本題10分)為了盡可能地逼近目標(biāo),我們選取的貪心策略為:每一步總是選擇一個(gè)使剩下的數(shù)最小的數(shù)字 刪去,即按高位到低位的順序搜索,若各位數(shù)字遞增,則刪除最后一個(gè)數(shù)字,否則刪除第一個(gè)遞 減區(qū)間的首字符。然后回到用首,按上述規(guī)則再刪除下一個(gè)數(shù)字。重復(fù)以上過程 s次,剩下的數(shù) 字用便是問題的解了。具體算法如下:輸入s, n;while ( s > 0 ) i=1; /
29、從用首開始找while (i < length(n) && (ni<ni+1)i+;delete(n,i,1); / 刪除字符串n的第i個(gè)字符 s-;while (length(n)>1)&& (n1=' 0')delete(n,1,1); /刪去用首可能產(chǎn)生的無用零輸出n;三、算法填空1 .背包問題的貪心算法void Knapsack(int n,float M,float v,float w,float x口)Sort(n,v,w);int i;for (i=1;i<=n;i+) xi=0;float c=M;for
30、(i=1;i<=n;i+) if (wi>c) break;xi=1;c - =wi;if (i<=n) xi=c/wi;2 .最大子段和:動(dòng)態(tài)規(guī)劃算法int MaxSum(int n, int a口)int sum=0, b=0; /sum存儲(chǔ)當(dāng)前最大的 bj, b 存儲(chǔ) bjfor(int j=1; j<=n ; j+) if (b>0) b+= aj;else b=ai;/一旦某個(gè)區(qū)段和為負(fù),則從下一個(gè)位置累和if(b>sum) sum=b;return sum ;3 .快速排序template<class Type>void QuickS
31、ort (Type a口,int p, int r)if (p<r) int q=Partition(a,p,r);QuickSort (a,p,q-1); 對(duì)左半段排序QuickSort (a,q+1,r); 對(duì)右半段排序4 . IF歹I問題Template <class Type>void perm(Type list口,int k, int m ) /產(chǎn)生listk:m 的所有排列if(k=m)_ /只剩下一個(gè)元素for (int i=0;i<=m;i+) cout<<listi;cout<<endl;else /還有多個(gè)元素待排列,遞歸產(chǎn)
32、生排列for (int i=k; i<=m; i+)swap(listk, listi);perm(list,k+1;m);swap(listk,listi);5.給定已按升序排好序的n個(gè)元素a0:n-1,現(xiàn)要在這n個(gè)元素中找出一特定元素 據(jù)此容易設(shè)計(jì)出二分搜索算法:template<class Type>int BinarySearch(Type a口,const Type& x, int l, int r)while (l<=r )int m = (l+r)/2 );if (x = am) return m;if (x < am ) r = m-1;
33、else l = m+1;return -1;6、合并排序描述如下:template<class Type>void Mergesort(Type a , int left, int right)if ( left<right )int i=( left+right)/2;Mergesort(a, left, i );Mergesort(a, i+1, right);Merge(a,b, left,i,right);/ 合并到數(shù)組 bCopy(a,b, left,right ); /復(fù)制到數(shù)組 a7、以下是計(jì)算xm的值的過程int power ( x, m )/計(jì)算xm的值并
34、返回。y=( 1 );i=m;While(i- - >0)y=y*x;(return y) ;四、問答題1 .用計(jì)算機(jī)求解問題的步驟:1、問題分析2、數(shù)學(xué)模型建立3、算法設(shè)計(jì)與選擇4、算法指標(biāo)5、算法分析6、算法實(shí)現(xiàn)7、程序調(diào)試8、結(jié)果整理文檔編制2 .算法定義:算法是指在解決問題時(shí),按照某種機(jī)械步驟一定可以得到問題結(jié)果的處理過程3 .算法的三要素1、操作2、控制結(jié)構(gòu)3、數(shù)據(jù)結(jié)構(gòu)13 .分治法與動(dòng)態(tài)規(guī)劃法的相同點(diǎn)是:將待求解的問題分解成若干個(gè)子問題,先求解子問題,然后從這些子問題的解得到原問題的解。兩者的不同點(diǎn)是:適合于用動(dòng)態(tài)規(guī)劃法求解的問題,經(jīng)分解得到的子問題往往不是互相獨(dú)立的。 而用
35、分治法求解的問題,經(jīng)分解得到的子問題往往是互相獨(dú)立的。回溯法中常見的兩類典型的解空間樹是子集樹和排列樹。22.請(qǐng)敘述動(dòng)態(tài)規(guī)劃算法與貪心算法的異同。共同點(diǎn):都需要最優(yōu)子結(jié)構(gòu)性質(zhì),都用來求有優(yōu)化問題。不同點(diǎn):動(dòng)態(tài)規(guī)劃:每一步作一個(gè)選擇一依賴于子問題的解。貪心方法:每一步作一個(gè)選擇一不依賴于子問題的解。動(dòng)態(tài)規(guī)劃方法的條件:子問題的重疊性質(zhì)。可用貪心方法的條件:最優(yōu)子結(jié)構(gòu)性質(zhì);貪心選擇性質(zhì)。動(dòng)態(tài)規(guī)劃:自底向上求解;貪心方法:自頂向下求解??捎秘澬姆〞r(shí),動(dòng)態(tài)規(guī)劃方法可能不適用;可用動(dòng)態(tài)規(guī)劃方法時(shí),貪心法可能不適用。23 .請(qǐng)說明動(dòng)態(tài)規(guī)劃方法為什么需要最優(yōu)子結(jié)構(gòu)性質(zhì)。答:最優(yōu)子結(jié)構(gòu)性質(zhì)是指大問題的最優(yōu)解包
36、含子問題的最優(yōu)解。動(dòng)態(tài)規(guī)劃方法是自底向上計(jì)算各個(gè)子問題的最優(yōu)解,即先計(jì)算子問題的最優(yōu)解,然后再利用子問題的最優(yōu)解構(gòu)造大問題的最優(yōu)解,因此需要最優(yōu)子結(jié)構(gòu).24 .請(qǐng)說明:(1)優(yōu)先隊(duì)列可用什么數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)?(2)優(yōu)先隊(duì)列插入算法基本思想?(3)優(yōu)先隊(duì)列插入算法時(shí)間復(fù)雜度?答:(1)堆。(2)在小根堆中,將元素x插入到堆的末尾,然后將元素x的關(guān)鍵字與其雙親的關(guān)鍵字比較,若元素x的關(guān)鍵字小于其雙親的關(guān)鍵字,則將元素x與其雙親交換,然后再將元素 x與其新雙親的關(guān)鍵字相比,直到元素x的關(guān)鍵字大于雙親的關(guān)鍵字,或元素 x到根為止。 O( log n)26.在算法復(fù)雜性分析中,Q Q、這三個(gè)記號(hào)的意義是什么
37、?在忽略常數(shù)因子的情況下,Q Q、分別提供了算法運(yùn)行時(shí)間的什么界?答:如果存在兩個(gè)正常數(shù)c和N0,對(duì)于所有的N> N0,有|f(N &qg(明,則記作:f(N)= qg(N»。這時(shí)我們說f(N)的階不高于g(M的階。若存在兩個(gè)正常數(shù)C和自然數(shù)NO,使彳馬當(dāng)N > N0時(shí)有|f(N)| Cg(N)| ,記為f(N=?(g(Z)。這時(shí)我們說f(N)的階不低于g(M的階。如果存在正常數(shù)cl, c2和nO,對(duì)于所有的n>nO,有c1|g(N)|<|f(N)|< c2|g(N)|則記作 f(N)=(g,( N)O。、日分別提供了算法運(yùn)行時(shí)間的上界、下界、平
38、均五、算法設(shè)計(jì)與分析題1.用動(dòng)態(tài)規(guī)劃策略求解最長公共子序列問題:(1)給出計(jì)算最優(yōu)值的遞歸方程。(2)給定兩個(gè)序列X=B,C,D,A , Y=A,B,C,B,請(qǐng)采用動(dòng)態(tài)規(guī)劃策略求出其最長公共子序列,要求給出過程。答:1(2)Y A B C B最長公共子序列: B C 2.對(duì)下列各組函數(shù)f (n) 和g (n),確定 f (n) = O (g (n) 或 f (n) = Q(g (n)或 f(n) = °(g(n),并簡要說明理由。 f(n)=2 n;g(n尸n!f(n尸ng (n)=log n(3) f(n)=100g(n)=log100f(n尸ng(n)= 3(5) f(n)=3
39、ng(n)=2(1)f(n) = O(g(n)因?yàn)間(n)的階比f(n)的階高。(2)f(n) = Q (g(n)因?yàn)間(n)的階比f(n)的階低。(3)f(n) =0 (g(n)因?yàn)間(n)與f(n)同階。(4)f(n) = O(g(n)因?yàn)?5)f(n) = Q (g(n)因?yàn)間(n)的階比f(n)的階高g(n)的階比f(n)的階低3.對(duì)下圖所示的連通網(wǎng)絡(luò)G,用克魯斯卡爾(Kruskal)算法求G的最小生成樹T,請(qǐng)寫出在算法執(zhí)行過程中,依次加入T的邊集TE中的邊。說明該算法的貪心策略和算法的基本思想,并簡要分析算法的時(shí)間復(fù)雜度。TE=(3,4), (2,3),(1,5),(4,6) (4,
40、5) 貪心策略是每次都在連接兩個(gè)不同連通分量的邊中選權(quán)值最小的邊?;舅枷耄菏紫葘D中所有頂點(diǎn)都放到生成樹中, 然后每次都在連接兩個(gè)不同連通分量的邊中選權(quán)值最小的邊,將其放入生成樹中,直到生成樹中有n-1條邊。時(shí)間復(fù)雜度為:O(eloge)divide 、4.請(qǐng)用分治策略設(shè)計(jì)遞歸的歸并排序算法,并分析其時(shí)間復(fù)雜性(要求:分別給出conquer 、 combine 這三個(gè)階段所花的時(shí)間,并在此基礎(chǔ)上列出遞歸方程,最后用套用公式法求出其解的漸進(jìn)階) 。答 : Template <class Type>void MergeSort (Type a , int left, int righ
41、t) if (left<right) int i=( left+right ) /2;MergeSort ( a, left, i ) ;MergeSort ( a, i+1, right ) ;Merge(a, b, left, right);Copy(a, b, left, right);Divide 階段的時(shí)間復(fù)雜性: O(1)Conquer 階段的時(shí)間復(fù)雜性: 2T(n)Combine階段的時(shí)間復(fù)雜性:O (n)用套用公式法: a=2, b=2, n log ba = n , f(n)=n, 因?yàn)?f(n) 與 nlog ba 同階,T(n) = O (nlogn)1 2 3 4
42、 5 6 75、設(shè)有n=2k個(gè)運(yùn)動(dòng)員要進(jìn)行循環(huán)賽,現(xiàn)設(shè)計(jì)一個(gè)滿足以下要求的比賽日程表 每個(gè)選手必須與其他n-1名選手比賽各一次;每個(gè)選手一天至多只能賽一次a,b,c,d,e,f的一種最優(yōu)編碼。解:1)、哈夫曼算法是構(gòu)造最優(yōu)編碼樹的貪心算法賽要在最短時(shí)間內(nèi)完成.分)循環(huán)賽最少需要進(jìn)行(n-1 )天.分)當(dāng)n=23=8時(shí),請(qǐng)畫出循環(huán)賽日程表:哈夫曼算法來找字符a,b,c,d,e,f的最優(yōu)編碼出現(xiàn)在文件中比為 20:10:6:4:44:16。要求:分)簡述使用哈夫曼算法構(gòu)造最優(yōu)編碼的基本步分)構(gòu)造對(duì)應(yīng)的哈夫曼樹,并據(jù)此給出其基本思想是,首先所有字符對(duì)應(yīng)n棵樹構(gòu)成的森林,每棵樹只有一個(gè)結(jié)點(diǎn),根權(quán)為對(duì)應(yīng)字符的頻率。然后,重復(fù) 卜列過程n-
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東司法警官職業(yè)學(xué)院《英語視聽說IV》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東省外語藝術(shù)職業(yè)學(xué)院《現(xiàn)代漢語(二)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東輕工職業(yè)技術(shù)學(xué)院《物聯(lián)網(wǎng)移動(dòng)應(yīng)用開發(fā)實(shí)踐》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東石油化工學(xué)院《土木工程專業(yè)導(dǎo)論》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東南方職業(yè)學(xué)院《兒童文學(xué)理論教學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東茂名幼兒師范專科學(xué)?!懂a(chǎn)品形態(tài)設(shè)計(jì)基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東茂名健康職業(yè)學(xué)院《小學(xué)隊(duì)原理與實(shí)踐》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東理工職業(yè)學(xué)院《口腔內(nèi)科學(xué)1》2023-2024學(xué)年第一學(xué)期期末試卷
- 五年級(jí)數(shù)學(xué)(小數(shù)四則混合運(yùn)算)計(jì)算題專項(xiàng)練習(xí)及答案匯編
- 2022年施工實(shí)習(xí)報(bào)告
- 新入職員工年終工作總結(jié)課件
- 10、美的微波爐美食創(chuàng)意拍攝腳本
- 07FK02防空地下室通風(fēng)設(shè)備安裝PDF高清圖集
- ANSI-ASQ-Z1.4-抽樣標(biāo)準(zhǔn)培訓(xùn)教材
- 思想品德鑒定表(學(xué)生模板)
- 滿堂支架計(jì)算
- MA5680T開局配置
- (完整word版)澳大利亞簽證54表(家庭構(gòu)成)
- 螺桿式風(fēng)冷冷水(熱泵)機(jī)組電路圖
- CFG樁施工記錄表范本
- 《錄音技術(shù)與藝術(shù)》課程教學(xué)大綱(新版)(共11頁)
評(píng)論
0/150
提交評(píng)論