算法設(shè)計(jì)與分析復(fù)習(xí)題目及答案.._第1頁(yè)
算法設(shè)計(jì)與分析復(fù)習(xí)題目及答案.._第2頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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)棋盤(pán)覆蓋算法利用的算法是(分治法)。29、使用分治法求解不需要滿足的條件是(子問(wèn)題必須是一樣的)。不可以使用分治法求解的是(0/1背包問(wèn)題)。動(dòng)態(tài)規(guī)劃下列不是動(dòng)態(tài)規(guī)劃算法基本步驟的是(構(gòu)造最優(yōu)解)下列是動(dòng)態(tài)規(guī)劃算法基本要素的是(子問(wèn)題重疊性質(zhì))。下列算法中通常以自底向上的方式求解最優(yōu)解的是(動(dòng)態(tài)規(guī)劃法)備忘錄方法是那種算法的變形。(動(dòng)態(tài)規(guī)劃法)最長(zhǎng)公

2、共子序列算法利用的算法是(動(dòng)態(tài)規(guī)劃法)。矩陣連乘問(wèn)題的算法可由(動(dòng)態(tài)規(guī)劃算法B)設(shè)計(jì)實(shí)現(xiàn)。實(shí)現(xiàn)最大子段和利用的算法是(動(dòng)態(tài)規(guī)劃法)。貪心算法能解決的問(wèn)題:?jiǎn)卧醋疃搪窂絾?wèn)題,最小花費(fèi)生成樹(shù)問(wèn)題,背包問(wèn)題,活動(dòng)安排問(wèn)題,不能解決的問(wèn)題:N皇后問(wèn)題,0/1背包問(wèn)題是貪心算法的基本要素的是(貪心選擇性質(zhì)和最優(yōu)子結(jié)構(gòu)性質(zhì))?;厮莘ɑ厮莘ń饴眯惺圬泦T問(wèn)題時(shí)的解空間樹(shù)是(排列樹(shù))。剪枝函數(shù)是回溯法中為避免無(wú)效搜索采取的策略回溯法的效率不依賴于下列哪些因素(確定解空間的時(shí)間)分支限界法最大效益優(yōu)先是(分支界限法)的一搜索方式。分支限界法解最大團(tuán)問(wèn)題時(shí),活結(jié)點(diǎn)表的組織形式是(最大堆)。分支限界法解旅行售貨員問(wèn)題

3、時(shí),活結(jié)點(diǎn)表的組織形式是(最小堆)優(yōu)先隊(duì)列式分支限界法選取擴(kuò)展結(jié)點(diǎn)的原則是(結(jié)點(diǎn)的優(yōu)先級(jí))在對(duì)問(wèn)題的解空間樹(shù)進(jìn)行搜索的方法中,一個(gè)活結(jié)點(diǎn)最多有一次機(jī)會(huì)成為活結(jié)點(diǎn)的是(分支限界法).從活結(jié)點(diǎn)表中選擇下一個(gè)擴(kuò)展結(jié)點(diǎn)的不同方式將導(dǎo)致不同的分支限界法,以下除(棧式分支限界法)之外都是最常見(jiàn)的方式.(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ì))是貪心算法與動(dòng)態(tài)規(guī)劃算法的共同點(diǎn)。貪心算法與動(dòng)態(tài)規(guī)劃算法的主要區(qū)別是(貪心選擇性質(zhì))回溯算法和分支限界法的

4、問(wèn)題的解空間樹(shù)不會(huì)是(無(wú)序樹(shù)).14哈弗曼編碼的貪心算法所需的計(jì)算時(shí)間為(B)。A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)21、下面關(guān)于NP問(wèn)題說(shuō)法正確的是(B)ANP問(wèn)題都是不可能解決的問(wèn)題BP類問(wèn)題包含在NP類問(wèn)題中CNP完全問(wèn)題是P類問(wèn)題的子集DNP類問(wèn)題包含在P類問(wèn)題中40、背包問(wèn)題的貪心算法所需的計(jì)算時(shí)間為(B)A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)420-1背包問(wèn)題的回溯算法所需的計(jì)算時(shí)間為(A)A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)47.背包問(wèn)題的貪心算法所需的計(jì)算時(shí)間為(B)。A、O(n2n)B、O(nlogn

5、)C、O(2n)D、O(n)53采用貪心算法的最優(yōu)裝載問(wèn)題的主要計(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) 確定性:指令清晰,無(wú)歧義(4) 有限性:指令執(zhí)行次數(shù)有限,而且執(zhí)行時(shí)間有限A(1)(2)(3)B(1)(2)(4)C(1)(3)(4)D(1)(2)(3)(4)57、函數(shù)32n+10nlogn的漸進(jìn)表達(dá)式是(B).A.2nB.32nC.nlognD.10nlogn59、用動(dòng)態(tài)規(guī)劃算

6、法解決最大字段和問(wèn)題,其時(shí)間復(fù)雜性為(B).A.lognB.nC.n2D.nlogn61、設(shè)f(N),g(N)是定義在正數(shù)集上的正函數(shù),如果存在正的常數(shù)C和自然數(shù)N0,使得當(dāng)N>N0時(shí)有f(N)SCg(N),則稱函數(shù)f(N)當(dāng)N充分大時(shí)有下界g(N),記作f(N)eO(g(N),即f(N)的階(A)g(N)的階.A.不高于B.不低于C.等價(jià)于D.逼近二、填空題2、程序是算法用某種程序設(shè)計(jì)語(yǔ)言的具體實(shí)現(xiàn)。3、算法的“確定性”指的是組成算法的每條暑丄是清晰的,無(wú)歧義的。6、算法是指解決問(wèn)題的一種方法或一個(gè)過(guò)程。7、從分治法的一般設(shè)計(jì)模式可以看出,用它設(shè)計(jì)出的程序一般是遞歸算法11、計(jì)算一個(gè)算

7、法時(shí)間復(fù)雜度通常可以計(jì)算循環(huán)次數(shù)、基本操作的頻率或計(jì)算步。14、解決0/1背包問(wèn)題可以使用動(dòng)態(tài)規(guī)劃、回溯法和分支限界法,其中不需要排序的是動(dòng)態(tài)規(guī)劃,需要排序的是回溯法,分支限界法。15、使用回溯法進(jìn)行狀態(tài)空間樹(shù)裁剪分支時(shí)一般有兩個(gè)標(biāo)準(zhǔn):約束條件和目標(biāo)函數(shù)的界,N皇后問(wèn)題和0/1背包問(wèn)題正好是兩種不同的類型,其中同時(shí)使用約束條件和目標(biāo)函數(shù)的界進(jìn)行裁剪的是0/1背包問(wèn)題,只使用約束條件進(jìn)行裁剪的是N皇后問(wèn)題。30.回溯法是一種既帶有系統(tǒng)性又帶有跳躍性的搜索算法。33. 回溯法搜索解空間樹(shù)時(shí),常用的兩種剪枝函數(shù)為約束函數(shù)和限界函數(shù)。34. 任何可用計(jì)算機(jī)求解的問(wèn)題所需的時(shí)間都與其規(guī)模有關(guān)。35. 快

8、速排序算法的性能取決于劃分的對(duì)稱性。36. Prim算法利用貪心策略求解最小生成樹(shù)問(wèn)題,其時(shí)間復(fù)雜度是O(n8.0-1背包問(wèn)題的回溯算法所需的計(jì)算時(shí)間為_(kāi)o(n*2n),用動(dòng)態(tài)規(guī)劃算法所需的計(jì)算時(shí)間為o(minnc,2_。二、綜合題(50分)寫(xiě)出設(shè)計(jì)動(dòng)態(tài)規(guī)劃算法的主要步驟。問(wèn)題具有最優(yōu)子結(jié)構(gòu)性質(zhì);構(gòu)造最優(yōu)值的遞歸關(guān)系表達(dá)式;3最優(yōu)值的算法描述;構(gòu)造最優(yōu)解;流水作業(yè)調(diào)度問(wèn)題的johnson算法的思想。令片=1&5,N2=i|a>=b;將N1中作業(yè)按a.的非減序排序得到N'將N中作業(yè)按b的非增序排序得到N'叮中作業(yè)接N'中作業(yè)就構(gòu)成了滿足Johnson法則的最

9、優(yōu)調(diào)度。)。37. 圖的m著色問(wèn)題可用回溯法求解,其解空間樹(shù)中葉子結(jié)點(diǎn)個(gè)數(shù)是mj,解空間樹(shù)中每個(gè)內(nèi)結(jié)點(diǎn)的孩子數(shù)是m。4. 若序列X=B,C,A,D,B,C,D,Y=A,C,B,A,B,D,C,D,請(qǐng)給出序列X和Y的一個(gè)最長(zhǎng)公共子序列BABCD或CABCD或CADCD。5用回溯法解問(wèn)題時(shí),應(yīng)明確定義問(wèn)題的解空間,問(wèn)題的解空間至少應(yīng)包含一個(gè)(最優(yōu))解3若n=4,在機(jī)器Ml和M2上加工作業(yè)i所需的時(shí)間分別為a和b,且(a,a,a,a)=(4,5,12,10),(b,b,b,b)=(8,2,15,9)求4個(gè)作業(yè)的最優(yōu)調(diào)度方l234l234案,并計(jì)算最優(yōu)值。步驟為:N1二1,3,N2=2,4;N'

10、;=l,3,N'=4,2;最優(yōu)值為:384使用回溯法解0/1背包問(wèn)題:n=3,C=9,V=6,10,3,W=3,4,4,其解空間有長(zhǎng)度為3的0-1向量組成,要求用一棵完全二叉樹(shù)表示其解空間(從根出發(fā),左1右0),并畫(huà)出其解空間樹(shù),計(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)0)1,161,解空間樹(shù)為:最優(yōu)解為是嚴(yán)格遞增的有序集,利用二叉樹(shù)的結(jié)點(diǎn)來(lái)存儲(chǔ)S中該問(wèn)題的最優(yōu)值為5. 設(shè)S=X,X,,X12n的元素,在表示S的二叉搜索樹(shù)中搜索一個(gè)元素X,返回的結(jié)果有兩種情形,(1)在二

11、叉搜索樹(shù)的內(nèi)結(jié)點(diǎn)中找到X=X,其概率為b。(2)在二叉搜索樹(shù)的葉結(jié)點(diǎn)中確定Xe(X,X/,其概率為a.。在表示S的二叉搜索樹(shù)T中,設(shè)存儲(chǔ)元素X的結(jié)點(diǎn)深度為C葉結(jié)點(diǎn)(X,X,)的結(jié)點(diǎn)深度為d,則二叉搜索樹(shù)T的平均路長(zhǎng)p為多少?假設(shè)二叉搜索樹(shù)Tij=X,,X.最優(yōu)值為mij,Wij=a+b+b+a,則mij(1<=i<=j<=n)遞歸關(guān)系表達(dá)式為什么?i-1ijj二叉樹(shù)T的平均路長(zhǎng)P=£bi*(l+Ci)+工aj*dji=1j=0mij=Wij+minmik+mk+1j(1<=i<=j<=n,mii-1=0)mij=0(i>j)6. 描述0-1背

12、包問(wèn)題。已知一個(gè)背包的容量為C,有n件物品,物品i的重量為W,價(jià)值為V,求應(yīng)如ii何選擇裝入背包中的物品,使得裝入背包中物品的總價(jià)值最大。三、簡(jiǎn)答題(30分)1. 流水作業(yè)調(diào)度中,已知有n個(gè)作業(yè),機(jī)器Ml和M2上加工作業(yè)i所需的時(shí)間分別為a和b,請(qǐng)寫(xiě)出流水作業(yè)調(diào)度問(wèn)題的johnson法則中對(duì)a和b的排序算法。(函數(shù)名可寫(xiě)為sort(s,n)2. 最優(yōu)二叉搜索樹(shù)問(wèn)題的動(dòng)態(tài)規(guī)劃算法(設(shè)函數(shù)名binarysearchtree)1.voidsort(flowjopes,intn)inti,k,j,l;for(i=1;i<=n-1;i+)/選擇排序k=i;while(k<=n&&am

13、p;sk.tag!=0)k+;if(k>n)break;/沒(méi)有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.voidbinarysearcht

14、ree(inta,intb,intn,int*m,int*s,int*w)inti,j,k,t,l;for(i=1;i<=n+1;i+)wii-1=ai-1;mii-1=0;for(l=0;lv=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ī)則,它們規(guī)定了解決某一特定類型問(wèn)題的一系

15、列運(yùn)算2、在進(jìn)行問(wèn)題的計(jì)算復(fù)雜性分析之前,首先必須建立求解問(wèn)題所用的計(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)=6x2n+n2,f(n)的漸進(jìn)性態(tài)f(n)=O(2An)6、貪心算法總是做出在當(dāng)前看來(lái)的選擇。也就是說(shuō)貪心算法并不從整體最優(yōu)考慮,它所做出的選擇只是在某種意義上的局部最優(yōu)結(jié)構(gòu)二、簡(jiǎn)答題(本題25分,每小題5分)1、簡(jiǎn)單描述分治法的基本思想。2、簡(jiǎn)述動(dòng)態(tài)規(guī)劃方法所運(yùn)用的最優(yōu)化原理。3、何謂最優(yōu)子結(jié)構(gòu)性質(zhì)?4、簡(jiǎn)單描述回溯法基本思想。5、

16、何謂P、NP、NPC問(wèn)題三、算法填空(本題20分,每小題5分)1、n后問(wèn)題回溯算法(1) 用二維數(shù)組ANN存儲(chǔ)皇后位置,若第i行第j列放有皇后,則Aij為非0值,否則值為0。(2) 分別用一維數(shù)組MN、L2*N-1、R2*N-1表示豎列、左斜線、右斜線是否放有棋子,有則值為1,否則值為0。for(j=0;j<N;j+)if(1)/*安全檢查*/Aij=i+1;/*放皇后*/4 ;5 ;;/*去皇后*/if(i=N-1)輸出結(jié)果;else3;;/*試探下一行*/2、數(shù)塔問(wèn)題。有形如下圖所示的數(shù)塔,從頂部出發(fā),在每一結(jié)點(diǎn)可以選擇向左走或是向右走,一起走到底層,要求找出一條路徑,使路徑上的值最

17、大。for(r=n-2;r>=0;r-)/自底向上遞歸計(jì)算for(c=0;1;c+)if(tr+lc>tr+lc+l)else33、Hanoi算法Hanoi(n,a,b,c)if(n=1)1else29Hanoi(n-1,b,a,c);34、Dijkstra算法求單源最短路徑du:s到u的距離pu:記錄前一節(jié)點(diǎn)信息Init-single-source(G,s)foreachvertexv$VGdodv二g;ds=0Relax(u,v,w)ifdv>du+w(u,v)thendv=du+wu,v;2dijkstra(G,w,s)1. Init-single-source(G,s

18、)2. s=e3. Q=VG4. whileQ<>0dou=min(Q)S=SUuforeachvertex3do4四、算法理解題(本題10分)根據(jù)優(yōu)先隊(duì)列式分支限界法,求下圖中從v1點(diǎn)到v9點(diǎn)的單源最短路徑,請(qǐng)畫(huà)出求得最優(yōu)解的解空間樹(shù)。要求中間被舍棄的結(jié)點(diǎn)用X標(biāo)記,獲得中間解的結(jié)點(diǎn)用單圓圈O框起,最優(yōu)解用雙圓圈框起。五、算法理解題(本題5分)設(shè)有n=2k個(gè)運(yùn)動(dòng)員要進(jìn)行循環(huán)賽,現(xiàn)設(shè)計(jì)一個(gè)滿足以下要求的比賽日程表: 每個(gè)選手必須與其他n-1名選手比賽各一次; 每個(gè)選手一天至多只能賽一次; 循環(huán)賽要在最短時(shí)間內(nèi)完成。(1)如果n=2k,循環(huán)賽最少需要進(jìn)行幾天;(2)當(dāng)n=23=8時(shí),請(qǐng)

19、畫(huà)出循環(huán)賽日程表。六、算法設(shè)計(jì)題(本題15分)分別用貪心算法、動(dòng)態(tài)規(guī)劃法、回溯法設(shè)計(jì)0-1背包問(wèn)題。要求:說(shuō)明所使用的算法策略;寫(xiě)出算法實(shí)現(xiàn)的主要步驟;分析算法的時(shí)間。七、算法設(shè)計(jì)題(本題10分)通過(guò)鍵盤(pán)輸入一個(gè)高精度的正整數(shù)n(n的有效位數(shù)<240),去掉其中任意s個(gè)數(shù)字后,剩下的數(shù)字按原左右次序?qū)⒔M成一個(gè)新的正整數(shù)。編程對(duì)給定的n和s,尋找一種方案,使得剩下的數(shù)字組成的新數(shù)最小。【樣例輸入】178543S=4【樣例輸出】13二、簡(jiǎn)答題(本題25分,每小題5分)6、分治法的基本思想是將一個(gè)規(guī)模為n的問(wèn)題分解為k個(gè)規(guī)模較小的子問(wèn)題,這些子問(wèn)題互相獨(dú)立且與原問(wèn)題相同;對(duì)這k個(gè)子問(wèn)題分別求解

20、。如果子問(wèn)題的規(guī)模仍然不夠小,則再劃分為k個(gè)子問(wèn)題,如此遞歸的進(jìn)行下去,直到問(wèn)題規(guī)模足夠小,很容易求出其解為止;將求出的小規(guī)模的問(wèn)題的解合并為一個(gè)更大規(guī)模的問(wèn)題的解,自底向上逐步求出原來(lái)問(wèn)題的解。7、“最優(yōu)化原理”用數(shù)學(xué)化的語(yǔ)言來(lái)描述:假設(shè)為了解決某一優(yōu)化問(wèn)題,需要依次作出n個(gè)決策DI,D2,,Dn,如若這個(gè)決策序列是最優(yōu)的,對(duì)于任何一個(gè)整數(shù)k,1<k<n,不論前面k個(gè)決策是怎樣的,以后的最優(yōu)決策只取決于由前面決策所確定的當(dāng)前狀態(tài),即以后的決策Dk+1,Dk+2,Dn也是最優(yōu)的。8、某個(gè)問(wèn)題的最優(yōu)解包含著其子問(wèn)題的最優(yōu)解。這種性質(zhì)稱為最優(yōu)子結(jié)構(gòu)性質(zhì)。9、回溯法的基本思想是在一棵含有

21、問(wèn)題全部可能解的狀態(tài)空間樹(shù)上進(jìn)行深度優(yōu)先搜索,解為葉子結(jié)點(diǎn)。搜索過(guò)程中,每到達(dá)一個(gè)結(jié)點(diǎn)時(shí),則判斷該結(jié)點(diǎn)為根的子樹(shù)是否含有問(wèn)題的解,如果可以確定該子樹(shù)中不含有問(wèn)題的解,則放棄對(duì)該子樹(shù)的搜索,退回到上層父結(jié)點(diǎn),繼續(xù)下一步深度優(yōu)先搜索過(guò)程。在回溯法中,并不是先構(gòu)造出整棵狀態(tài)空間樹(shù),再進(jìn)行搜索,而是在搜索過(guò)程,逐步構(gòu)造出狀態(tài)空間樹(shù),即邊搜索,邊構(gòu)造。10、P(Polynomial問(wèn)題):也即是多項(xiàng)式復(fù)雜程度的問(wèn)題。NP就是Non-deterministicPolynomial的問(wèn)題,也即是多項(xiàng)式復(fù)雜程度的非確定性問(wèn)題。NPC(NPComplete)問(wèn)題,這種問(wèn)題只有把解域里面的所有可能都窮舉了之后才能

22、得出答案,這樣的問(wèn)題是NP里面最難的問(wèn)題,這種問(wèn)題就是NPC問(wèn)題。三、算法填空(本題20分,每小題5分1、n后問(wèn)題回溯算法(1) !Mj&&!Li+j&&!Ri-j+N(2) Mj=Li+j=Ri-j+N=1;(3) try(i+1,M,L,R,A)(4) Aij=0(5) Mj=Li+j=Ri-j+N=02、數(shù)塔問(wèn)題。(1)c<=r(2) trc+=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)vWadju(4)Rel

23、ax(u,v,w)四、算法理解題(本題10分)五、(1)8天(2分);(2)當(dāng)n=23=8時(shí),循環(huán)賽日程表(3分)六、算法設(shè)計(jì)題(本題15分)1234567821436587341278564321876556781234658721437856341287654321(1)貪心算法O(nlog(n)>首先計(jì)算每種物品單位重量的價(jià)值Vi/Wi,然后,依貪心選擇策略,將盡可能多的單位重量?jī)r(jià)值最高的物品裝入背包。若將這種物品全部裝入背包后,背包內(nèi)的物品總重量未超過(guò)C,則選擇單位重量?jī)r(jià)值次高的物品并盡可能多地裝入背包。依此策略一直地進(jìn)行下去,直到背包裝滿為止。>具體算法可描述如下:voi

24、dKnapsack(intn,floatM,floatv,floatw,floatx)Sort(n,v,w);inti;for(i=1;i<=n;i+)xi=0;floatc=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)是背包容量為j,可選擇物品為i,i+1,n時(shí)0-1背包問(wèn)題的最優(yōu)值。由0-1背包問(wèn)題的最優(yōu)子結(jié)構(gòu)性質(zhì),可以建立計(jì)算m(i,j)的遞歸式如下。fmaxm(i+1,j),m(i+1,j-w)+vj>wm(i,j)=5/.ji八/.im(i+1

25、,j)0<j<wi.fvj>wm(n,j)=5nn00<j<wnvoidKnapSack(intv,intw,intc,intn,intm11)intjMax=min(wn-1,c);for(j=0;j<=jMax;j+)/*m(n,j)=00=<j<wn*/mnj=0;for(j=wn;j<=c;j+)/*m(n,j)=vnj>=wn*/mnj=vn;for(i=n-1;i>1;i-)intjMax=min(wi-1,c);for(j=0;j<=jMax;j+)/*m(i,j)=m(i+1,j)0=<j<wi

26、*/mij=mi+1j;for(j=wi;j<=c;j+)/*m(n,j)=vnj>=wn*/mij=max(mi+1j,mi+1j-wi+vi);m1c=m2c;if(c>=w1)m1c=max(m1c,m2c-w1+v1);(3)回溯法O(2n)cw:當(dāng)前重量cp:當(dāng)前價(jià)值bestp:當(dāng)前最優(yōu)值voidbacktrack(inti)回溯法i初值1if(i>n)/到達(dá)葉結(jié)點(diǎn)bestp=cp;return;if(cw+wi<=c)/搜索左子樹(shù)cw+=wi;cp+=pi;backtrack(i+1);cw-=wi;cp-=pi;if(Bound(i+1)>be

27、stp)/搜索右子樹(shù)backtrack(i+1);七、算法設(shè)計(jì)題(本題10分)為了盡可能地逼近目標(biāo),我們選取的貪心策略為:每一步總是選擇一個(gè)使剩下的數(shù)最小的數(shù)字刪去,即按高位到低位的順序搜索,若各位數(shù)字遞增,則刪除最后一個(gè)數(shù)字,否則刪除第一個(gè)遞減區(qū)間的首字符。然后回到串首,按上述規(guī)則再刪除下一個(gè)數(shù)字。重復(fù)以上過(guò)程s次,剩下的數(shù)字串便是問(wèn)題的解了。具體算法如下:輸入s,n;while(s>0)i=1;/從串首開(kāi)始找while(i<length(n)&&(ni<ni+1)i+;delete(n,i,1);/刪除字符串n的第i個(gè)字符s-;while(length(n

28、)>1)&&(n1=0')delete(n,1,1);/刪去串首可能產(chǎn)生的無(wú)用零輸出n;三、算法填空1.背包問(wèn)題的貪心算法voidKnapsack(intn,floatM,floatv,floatw,floatx)Sort(n,v,w);inti;for(i=1;i<=n;i+)xi=0;floatc=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ī)劃算法intMaxSum(intn,inta)intsum=0,b=0;/sum存儲(chǔ)當(dāng)前最大的bj,b存儲(chǔ)b

29、jfor(intj=1;j<=n;j+)if(b>0)b+=aj;elseb=ai;;/一旦某個(gè)區(qū)段和為負(fù),則從下一個(gè)位置累和if(b>sum)sum二b;returnsum;3. 快速排序template<classType>voidQuickSort(Typea,intp,intr)if(p<r)intq=Partition(a,p,r);QuickSort(a,p,q-l);/對(duì)左半段排序QuickSort(a,q+l,r);/對(duì)右半段排序4. 排列問(wèn)題Template<classType>voidperm(Typelist,intk,in

30、tm)/產(chǎn)生listk:m的所有排列if(k=m)/只剩下一個(gè)元素for(inti=0;i<=m;i+)cout<<listi;cout<<endl;else/還有多個(gè)元素待排列,遞歸產(chǎn)生排列for(inti二k;i二m;i+)swap(listk,listi);perm(list,k+l;m);swap(listk,listi);5. 給定已按升序排好序的n個(gè)元素a0:n-l,現(xiàn)要在這n個(gè)元素中找出一特定元素x。據(jù)此容易設(shè)計(jì)出二分搜索算法:template<classType>intBinarySearch(Typea,constType&x

31、,intl,intr)while(l<=r)intm=(l+r)/2);if(x=am)returnm;if(x<am)r=m-1;elsel=m+1;return-1;6、合并排序描述如下:template<classType>voidMergesort(Typea,intleft,intright)訐(leftright)inti=(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、以

32、下是計(jì)算xm的值的過(guò)程intpower(x,m)/計(jì)算xm的值并返回。y=(_);i=m;While(i->0)y=y*x;(returny);四、問(wèn)答題1.用計(jì)算機(jī)求解問(wèn)題的步驟:1、問(wèn)題分析2、數(shù)學(xué)模型建立3、算法設(shè)計(jì)與選擇4、算法指標(biāo)5、算法分析6、算法實(shí)現(xiàn)7、程序調(diào)試8、結(jié)果整理文檔編制2.算法定義:算法是指在解決問(wèn)題時(shí),按照某種機(jī)械步驟一定可以得到問(wèn)題結(jié)果的處理過(guò)程3. 算法的三要素1、操作2、控制結(jié)構(gòu)3、數(shù)據(jù)結(jié)構(gòu)13.分治法與動(dòng)態(tài)規(guī)劃法的相同點(diǎn)是:將待求解的問(wèn)題分解成若干個(gè)子問(wèn)題,先求解子問(wèn)題,然后從這些子問(wèn)題的解得到原問(wèn)題的解。兩者的不同點(diǎn)是:適合于用動(dòng)態(tài)規(guī)劃法求解的問(wèn)題,

33、經(jīng)分解得到的子問(wèn)題往往不是互相獨(dú)立的。而用分治法求解的問(wèn)題,經(jīng)分解得到的子問(wèn)題往往是互相獨(dú)立的?;厮莘ㄖ谐R?jiàn)的兩類典型的解空間樹(shù)是子集樹(shù)和排列樹(shù)。22. 請(qǐng)敘述動(dòng)態(tài)規(guī)劃算法與貪心算法的異同。共同點(diǎn):都需要最優(yōu)子結(jié)構(gòu)性質(zhì),都用來(lái)求有優(yōu)化問(wèn)題。不同點(diǎn):動(dòng)態(tài)規(guī)劃:每一步作一個(gè)選擇一依賴于子問(wèn)題的解。貪心方法:每一步作一個(gè)選擇一不依賴于子問(wèn)題的解。動(dòng)態(tài)規(guī)劃方法的條件:子問(wèn)題的重疊性質(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)說(shuō)明動(dòng)態(tài)規(guī)劃方法為什么需要最優(yōu)子結(jié)構(gòu)

34、性質(zhì)。答:最優(yōu)子結(jié)構(gòu)性質(zhì)是指大問(wèn)題的最優(yōu)解包含子問(wèn)題的最優(yōu)解。動(dòng)態(tài)規(guī)劃方法是自底向上計(jì)算各個(gè)子問(wèn)題的最優(yōu)解,即先計(jì)算子問(wèn)題的最優(yōu)解,然后再利用子問(wèn)題的最優(yōu)解構(gòu)造大問(wèn)題的最優(yōu)解,因此需要最優(yōu)子結(jié)構(gòu).24. 請(qǐng)說(shuō)明:優(yōu)先隊(duì)列可用什么數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)??jī)?yōu)先隊(duì)列插入算法基本思想??jī)?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到根為止。(3)O(logn)26.在算法復(fù)雜性分析中,O、Q、

35、0這三個(gè)記號(hào)的意義是什么?在忽略常數(shù)因子的情況下,O、Q、0分別提供了算法運(yùn)行時(shí)間的什么界?答:如果存在兩個(gè)正常數(shù)c和NO,對(duì)于所有的N三NO,有l(wèi)fN)l<Clg(N)l,則記作:N)=O(g(N)。這時(shí)我們說(shuō)f(N)的階不高于g(N)的階。若存在兩個(gè)正常數(shù)C和自然數(shù)NO,使得當(dāng)N三NO時(shí)有l(wèi)f(N)lClg(N)l,記為fN)=(g(N)o這時(shí)我們說(shuō)fN)的階不低于g(N)的階。如果存在正常數(shù)cl,c2和nO,對(duì)于所有的n三nO,有cllg(N)lWlf(N)lWc2lg(N)l貝V記作f(N)=(g,(N)0、Q、0分別提供了算法運(yùn)行時(shí)間的上界、下界、平均五、算法設(shè)計(jì)與分析題1.用

36、動(dòng)態(tài)規(guī)劃策略求解最長(zhǎng)公共子序列問(wèn)題:(l)給出計(jì)算最優(yōu)值的遞歸方程。(2)給定兩個(gè)序列X=B,C,D,A,Y=A,B,C,B,請(qǐng)采用動(dòng)態(tài)規(guī)劃策略求出其最長(zhǎng)公共子序列,要求給出過(guò)程。答:19當(dāng)i=0或j=0時(shí)ci,j=<ci1,j-1+1當(dāng)i,j0且x=y時(shí)iimax(ci,j1,ci1,j)當(dāng)i,j0且x豐y時(shí)ii(2)X0覽000B0011C00122D00121f2A01122最長(zhǎng)公共子序列:BC2.對(duì)下列各組函數(shù)f(n)和g(n),確定f(n)=O(g(n)或f(n)=Q(g(n)或f(n)=e(g(n),并簡(jiǎn)要說(shuō)明理由。(1)f(n)=2n;g(n)=n!f(n)=洛;g(n)=

37、logn2(3)f(n)=100;g(n)=log100(4)f(n)=n3;g(n)=3n(5)f(n)=3n;g(n)=2n答:(1)f(n)=O(g(n)因?yàn)間(n)的階比f(wàn)(n)的階高。(2)f(n)=Q(g(n)因?yàn)間(n)的階比f(wàn)(n)的階低。(3)f(n)=e(g(n)因?yàn)間(n)與f(n)同階。(4)f(n)=O(g(n)因?yàn)間(n)的階比f(wàn)(n)的階高。(5)f(n)=Q(g(n)因?yàn)間(n)的階比f(wàn)(n)的階低。3對(duì)下圖所示的連通網(wǎng)絡(luò)G,用克魯斯卡爾(Kruskal)算法求G的最小生成樹(shù)T,請(qǐng)寫(xiě)出在算法執(zhí)行過(guò)程中,依次加入T的邊集TE中的邊。說(shuō)明該算法的貪心策略和算法的基本

38、思想,并簡(jiǎn)要分析算法的時(shí)間復(fù)雜度。TE=(3,4),(2,3),(1,5),(4,6)(4,5)貪心策略是每次都在連接兩個(gè)不同連通分量的邊中選權(quán)值最小的邊?;舅枷耄菏紫葘D中所有頂點(diǎn)都放到生成樹(shù)中,然后每次都在連接兩個(gè)不同連通分量的邊中選權(quán)值最小的邊,將其放入生成樹(shù)中,直到生成樹(shù)中有n-1條邊。時(shí)間復(fù)雜度為:O(eloge)4. 請(qǐng)用分治策略設(shè)計(jì)遞歸的歸并排序算法,并分析其時(shí)間復(fù)雜性(要求:分別給出divide、conquer、combine這三個(gè)階段所花的時(shí)間,并在此基礎(chǔ)上列出遞歸方程,最后用套用公式法求出其解的漸進(jìn)階)。答:Template<classType>voidMer

39、geSort(Typea,intleft,intright)if(left<right)inti=(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ù)雜性:0(n)T(n)=f0(1)當(dāng)n=1n2T(n/2)+0(n)當(dāng)n>1用套用公式法:a=2,b=2,niogba=n,f(n)=n,因?yàn)閒(n)與nlogba同階,T(n)=0

40、(nlogn)123456712345678214365873412785643218765567812346587214378563412876543215、設(shè)有n=2k個(gè)運(yùn)動(dòng)員要進(jìn)行循環(huán)賽,現(xiàn)設(shè)計(jì)一個(gè)滿足以下要求的比賽日程表:每個(gè)選手必須與其他n-1名選手比賽各一次;每個(gè)選手一天至多只能賽一次;循環(huán)賽要在最短時(shí)間內(nèi)完成.(1)(4分)循環(huán)賽最少需要進(jìn)行(n-1)天.(2)(6分)當(dāng)n=23=8時(shí),請(qǐng)畫(huà)出循環(huán)賽日程表:6、考慮用哈夫曼算法來(lái)找字符a,b,c,d,e,f的最優(yōu)編碼。這些字符出現(xiàn)在文件中的頻數(shù)之比為20:10:6:4:44:16。要求:(1)(4分)簡(jiǎn)述使用哈夫曼算法構(gòu)造最優(yōu)編碼的基本步驟;(2)(5分)構(gòu)造對(duì)應(yīng)的哈夫曼樹(shù),并據(jù)此給出a,b,c,d,e,f的一種最

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論