《算法分析與設計》期末考試復習題綱完整版_第1頁
《算法分析與設計》期末考試復習題綱完整版_第2頁
《算法分析與設計》期末考試復習題綱完整版_第3頁
《算法分析與設計》期末考試復習題綱完整版_第4頁
《算法分析與設計》期末考試復習題綱完整版_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、算法分析與設計期末復習題、選擇題1. 算法必須具備輸入、輸出和(A.可行性和安全性C.有窮性和安全性2. 算法分析中,記號O 表示(A. 漸進下界B.C. 非緊上界D.D)等4 個特性。B確定性和易讀性D有窮性和確定性B ),記號表示(A )漸進上界緊漸進界3. 假設某算法在車入規(guī)模為n時的計算時間為T(n)=3*2M 。在某臺計算機上實現(xiàn)并完成概算法的時間為t 秒?,F(xiàn)有另一臺計算機,其運行速度為第一臺的64 倍,那么在這臺新機器上用同一算法在t 秒內(nèi)能解輸入規(guī)模為多大的問題?( B ) 解題方法:3*2An*64=3*2AxA n+8B n+6C n+7D n+54. 設問題規(guī)模為N 時,某

2、遞歸算法的時間復雜度記為T(N) ,已知T(1)=1 ,T(N)=2T(N/2)+N/2 ,用O表示的時間復雜度為( C )。A O(logN)B O(N)C O(NlogN)D O(N2logN)5. 直接或間接調(diào)用自身的算法稱為(B )。A.貪心算法B.遞歸算法C.迭代算法D.回溯法6. Fibonacci 數(shù)列中,第4個和第 11 個數(shù)分別是(D )。A 5, 89B 3, 89C 5, 144D 3, 1447. 在有 8 個頂點的凸多邊形的三角剖分中,恰有(B )。A6 條弦和7 個三角形B5 條弦和6 個三角形C6條弦和6個三角形D5 條弦和5個三角形8. 一個問題可用動態(tài)規(guī)劃算法

3、或貪心算法求解的關鍵特征是問題的(B )。最優(yōu)子結(jié)構性質(zhì)定義最優(yōu)解)。單源最短路徑問題最小生成樹問題A重疊子問題BC.貪心選擇性質(zhì)D9. 下列哪個問題不用貪心法求解(CA.哈夫曼編碼問題BC.最大團問題D10. 下列算法中通常以自底向上的方式求解最優(yōu)解的是(B )。.動態(tài)規(guī)劃法A.備忘錄法C.貪心法11. 下列算法中不能解決A.貪心法C.回溯法D 回溯法0/1 背包問題的是(A )。B動態(tài)規(guī)劃D分支限界法D )。批處理作業(yè)問題哈夫曼編碼問題12. 下列哪個問題可以用貪心算法求解(A. LCS問題BC 0-1 背包問題D13. 用回溯法求解最優(yōu)裝載問題時,若待選物品為m 種,則該問題的解空間樹的

4、結(jié)點D 2m+1B2個數(shù)為(A m!C 2m+1-114. 二分搜索算法是利用(?A?)實現(xiàn)的算法。A.分治策略?B.動態(tài)規(guī)劃法?C.貪心法?D.回溯法15. 下列不是動態(tài)規(guī)劃算法基本步驟的是(?B?) 。 P44A.找出最優(yōu)解的性質(zhì) ? B.構造最優(yōu)解?C.算出最優(yōu)解(應該是最優(yōu)值)?D.定義最優(yōu)解16. 下面問題(B )不能使用貪心法解決。A.單源最短路徑問題B N 皇后問題C.最小花費生成樹問題D .背包問題17. 使用二分搜索算法在n 個有序元素表中搜索一個特定元素,在最好情況和最壞情況下搜索的時間復雜性分別為(A )。P17A O(1) , O(logn)B O(n) , O(log

5、n)C O(1) , O(nlogn)D O(n) , O(nlogn)18. 優(yōu)先隊列式分支限界法選取擴展結(jié)點的原則是(?C?) 。 P162A先進先出B.后進先出C.結(jié)點的優(yōu)先級D.隨機19. 下面不是分支界限法搜索方式的是(D )。P161A.廣度優(yōu)先B.最小耗費優(yōu)先C.最大效益優(yōu)先D .深度優(yōu)先20. 分支限界法解最大團問題時,活結(jié)點表的組織形式是(B )。A.最小堆B.最大堆C.棧D.數(shù)組21. 下列關于計算機算法的描述不正確的是(C )。 P1A.算法是指解決問題的一種方法或一個過程B.算法是若干指令的有窮序列C. 算法必須要有輸入和輸出D.算法是編程的思想22. 下列關于凸多邊形

6、最優(yōu)三角剖分問題描述不正確的是(A )。A n+1 個矩陣連乘的完全加括號和n 個點的凸多邊形的三角剖分對應B.在有n個頂點的凸多邊形的三角剖分中,恰有 n-3條弦C.該問題可以用動態(tài)規(guī)劃法來求解D.在有n個頂點的凸多邊形的三角剖分中,恰有n-2個三角形23. 動態(tài)規(guī)劃法求解問題的基本步驟不包括(C )。P44A.遞歸地定義最優(yōu)值B.分析最優(yōu)解的性質(zhì),并刻畫其結(jié)構特征C.根據(jù)計算最優(yōu)值時得到的信息,構造最優(yōu)解 (可以省去的)D.以自底向上的方式計算出最優(yōu)值24. 分治法所能解決的問題應具有的關鍵特征是(C )。P16A.該問題的規(guī)??s小到一定的程度就可以容易地解決B.該問題可以分解為若干個規(guī)模

7、較小的相同問題C.利用該問題分解出的子問題的解可以合并為該問題的解D.該問題所分解出的各個子問題是相互獨立的25. 下列關于回溯法的描述不正確的是( D )。P114 A.回溯法也稱為試探法B.回溯法有“通用解題法”之稱C.回溯法是一種能避免不必要搜索的窮舉式搜索法D.用回溯法對解空間作深度優(yōu)先搜索時只能用遞歸方法實現(xiàn)26. 常見的兩種分支限界法為( D )。P161A.廣度優(yōu)先分支限界法與深度優(yōu)先分支限界法;B.隊列式(FIFO)分支限界法與堆棧式分支限界法;C.排列樹法與子集樹法;D.隊列式(FIFO)分支限界法與優(yōu)先隊列式分支限界法;二、填空題1 .f(n)=3n 2+10 的漸近性態(tài)

8、f(n尸 O(?n 2 ),g(n)=10log3 n 的漸近性態(tài) g(n)= O(? n ?)。2 . 一個“好”的算法應具有正確性、可讀性 、 健壯性 和高效率和低存儲量需求等特性。3 .算法的時間復雜性函數(shù)表示為C=F(N,I,A) 、分析算法復雜性的目的在于比較_求解同意問題的兩個不同算法的效率 的效率。4 .構成遞歸式的兩個基本要素是遞歸的邊界條件 和 遞歸的定義。5 .單源最短路徑問題可用分支限界法和 貪心算法 求解。6 .用分治法實現(xiàn)快速排序算法時,最好情況下的時間復雜性為O(nlogn) ,最壞情況下的時間復雜性為O(nV),該算法所需的時間與運行時間和劃分 兩方面因素有關。

9、P267 .0-1背包問題的解空間樹為完全二叉 樹;n后問題的解空間樹為 排列 樹;8 .常見的分支限界法有隊列式( FIFO)分支限界法和優(yōu)先隊列式分支限界法。9 .回溯法搜索解空間樹時常用的兩種剪枝函數(shù)為約束函數(shù)和剪枝函數(shù)。10 .分支限界法解最大團問題時,活結(jié)點表的組織形式是最大堆;分支限界法解單源最短路徑問題時,活結(jié)點表的組織形式是最小堆。三、算法填空題1. 遞歸求解Hanoi塔問題/階乘問題。例1 :階乘函數(shù)n! P12階乘的非遞歸方式定義: n! n (n 1) (n 2)2 1試寫出階乖的遞歸式及算法。遞歸式為:1 n 0邊界條件n! n(n 1)! n 0 遞歸方程遞歸算法:i

10、nt factorial (int n) if (n=0) return 1;遞歸出 口return n * factorial (n-1); 遞歸調(diào)用例 2:用遞歸技術求解Hanoi 塔問題 ,Hanoi 塔的遞歸算法。P15其中 Hanoi (int n, int a, int c, int b) 表示將塔座A 上的 n 個盤子移至塔座C, 以塔座 B 為輔助。Move(a,c)表示將塔座a上編號為n的圓盤移至塔座c上。void hanoi (int n, int a, int c, int b)if (n > 0)hanoi(n-1, a, b, c);move(a,c);hano

11、i(n-1, b, c, a); 2. 用分治法求解快速排序問題??焖倥判蛩惴≒25 、作業(yè)、課件第2 章(2) 42 頁 -50 頁template<class Type>void QuickSort (Type a, int p, int r)if (p<r) int q=Partition(a,p,r);QuickSort (a,p,q-1);QuickSort (a,q+1,r);Partition 函數(shù)的具體實現(xiàn)template<class Type>int Partition (Type a, int p, int r)int i = p, j = r

12、 + 1;Type x=ap;/將 < x 的元素交換到左邊區(qū)域/將 > x 的元素交換到右邊區(qū)域while (true) while (a+i <x && i<r);while (a- -j >x);if (i >= j) break;Swap(ai, aj);ap = aj;aj = x;return j;3. 用貪心算法求解最優(yōu)裝載問題。最優(yōu)裝載問題P95 課件第 4 章 (2) 第 3-8 頁template<class Type>void Loading(int x, Type w, Type c, int n)int

13、*t = new int n+1;Sort(w, t, n);for (int i = 1; i <= n; i+) xi = 0;for (int j = 1; j <= n && wtj <= c; j+)xti = 1; c -= wtj;4. 用回溯法求解0-1 背包 / 批處理作業(yè)調(diào)度/ 最大團問題,要會畫解空間樹。例1:用回溯法求解0-1 背包 P133 課件第 5 章 (2) 第 24-38 頁template<typename Typew,typename Typep>class Knapprivate:Typep Bound(in

14、t i); /計算上界void Backtrack(int i);Typew c; / 背包容量int n; / 物品數(shù)Typew *w; /物品重量數(shù)組Typep *p; /物品價值數(shù)組Typew cw; /當前重量Typep cp; /當前價值Typep bestp; / 當前最優(yōu)價值;void Knap<Typew,Typep>:Backtrack(int i) if(i>n) bestp=cp; return; if(cw+wi<=c) / 進入左子樹 cw+=wi;cp+=pi;Backtrack(i+1);cw-=wi;cp-=pi; if(Bound(i+

15、1)>bestp) / 進入右子樹Backtrack(i+1);Typep Knap<Typew,Typep>:Bound(int i)Typew cleft=c-cw; / 剩余的背包容量Typep b=cp; /b 為當前價值/ 依次裝入單位重量價值高的整個物品while(i<=n&&wi<=cleft) cleft-=wi; b+=pi;i+; if(i<=n) / 裝入物品的一部分b+=pi*cleft/wi;return b; / 返回上界class Object / 物品類friend int Knapsack(int *,int

16、 *,int,int);public:int operator <(Object a) constreturn (d>=a.d);int ID; /物品編號float d; /單位重量價值;Typep Knapsack( Typep p,Typew w,Typew c,int n) / 為 Typep Knapsack 初始化Typew W=0; /總重量Typep P=0; /總價值Object* Q=new Objectn; / 創(chuàng)建物品數(shù)組,下標從0 開始for(int i=1;i<=n;i+) /初始物品數(shù)組數(shù)據(jù) Qi-1.ID=i;Qi-1.d=1.0*pi/wi;

17、P+=pi;W+=wi;if(W<=c) /能裝入所有物品return P;if(W<=c) /能裝入所有物品return P;QuickSort(Q,0,n-1); / 依物品單位重量價值非增排序Knap<Typew,Typep> K;K.p=new Typepn+1;K.w=new Typewn+1;for(int i=1;i<=n;i+) K.pi=pQi-1.ID; K.wi=wQi-1.ID; K.cp=0; K.cw=0; K.c=c;K.n=n; K.bestp=0; K.Backtrack(1);delete Q; delete K.w;delet

18、e K.p; return K.bestp;例2:批處理作業(yè)調(diào)度課件第 5 章 (2)P2-5 問題描述,課本 P125-127解空間:排列樹算法描述:class Flowshopstatic int m, / 各作業(yè)所需的處理時間 x,/ 當前作業(yè)調(diào)度 bestx, / 當前最優(yōu)作業(yè)調(diào)度 f2,/ 機器 2 完成處理時間f1,/ 機器 1 完成處理時間f,/ 完成時間和bestf, / 當前最優(yōu)的完成時間和n;/ 作業(yè)數(shù)static void Backtrack(int i)if (i > n) for (int j = 1; j <= n; j+) bestxj = xj; b

19、estf = f; elsefor (int j = i; j <= n; j+) f1+=mxj1;/第j 個作業(yè)在第一臺機器上所需時間f2i=(f2i-1>f1)?f2i-1:f1)+mxj2;f+=f2i;if (f < bestf) / 約束函數(shù) Swap(xi, xj); Backtrack(i+1); Swap(xi, xj);f1 - =mxj1;f - =f2i;例3:最大團問題,要會畫解空間樹。class Cliquefriend int MaxClique(int *,int ,int);public:void Print(); /輸出最優(yōu)解private

20、:void Backtrack(int i);int *a; 圖G的鄰接矩陣,下標從 1開始int n; /圖G的頂點數(shù)int *x; /當前解int *bestx; /當前最優(yōu)解int cn; /當前團的頂點數(shù)int bestn; /當前最大團的頂點數(shù);void Clique:Backtrack(int i) if(i>n) for(int j=1;j<=n;j+) bestxj=xj; bestn=cn; return;/ 判斷第 i 個頂點是否與已選頂點都有邊相連int OK=1;,已入選的頂點集與當前團中的頂點無邊相連只要與當前團中一個頂點無邊相連,則中止for(int j

21、=1;j<i;j+) /x1:i-1 if(xj&&aij=0) /i OK=0; break; /if(OK) / 進入左子樹 xi=1;cn+; Backtrack(i+1); xi=0; cn-; if(cn+n-i>bestn) /如有可能在右子樹中找到更大的團,則進入右子樹 xi=0; Backtrack(i+1); 計算時間:O(n2n )四、簡答題1. 請簡述使用動態(tài)規(guī)劃算法解題的基本步驟。P44動態(tài)規(guī)劃的設計分為以下4 個步驟:(1) 找出最優(yōu)解的性質(zhì),并刻劃其結(jié)構特征。(2) 遞歸地定義最優(yōu)值。(3) 以自底向上的方式計算出最優(yōu)值。(4) 根據(jù)計算

22、最優(yōu)值時得到的信息,構造最優(yōu)解。2. 簡述動態(tài)規(guī)劃方法與分治法的異同。P44相同點:動態(tài)規(guī)劃算法與分治法類似,其基本思想也是將待求解問題分解成若干個子問題,然后從這些子問題的解得到原問題的解。不同點:分治法的子問題互相獨立且與原問題相同。與分治法不同的是,適合于動態(tài)規(guī)劃求解的問題,經(jīng)分解得到的子問題往往不是互相獨立的。也就是各個子問題包含公共的子 子問題。3. 試比較 Prim 算法與 Kruskal 算法的異同。105-P107相同點: Prim( 普里姆 )算法和 Kruskal( 克魯斯卡爾)算法都可以看作是應用貪心算法構造最小生成樹的例子。利用了最小生成樹性質(zhì)。不同點:Prim(普里姆

23、)算法:在這個過程中選取到的所有邊恰好構成G的一棵最小生成樹T, T中包含G 的n-1 條邊,且不形成回路。Kruskal( 克魯斯卡爾)算法:是構造最小生成樹的另一個常用算法。該算法不是通過擴充連通子集來進行貪心選擇。而是通過選擇具有最小權的邊的集合來進行貪心選擇。在選擇的同時可以進行連通操作以便形成生成樹。4. 請簡述分支限界法的搜索策略。P161 課件第 6 章 (1) 第 6 頁(1) 分支限界法以廣度優(yōu)先或以最小耗費(最大效益)優(yōu)先的方式搜索問題的解空間樹。(2) 每一個活結(jié)點只有一次機會成為擴展結(jié)點。(3) 活結(jié)點一旦成為擴展結(jié)點,就一次性產(chǎn)生其所有兒子結(jié)點。(4) 兒子結(jié)點中,導

24、致不可行解或?qū)е路亲顑?yōu)解的兒子結(jié)點被舍棄,其余兒子結(jié)點被加入活結(jié)點表中。(5) 從活結(jié)點表中取下一結(jié)點成為當前擴展結(jié)點,并重復上述結(jié)點擴展過程。這個過程一直持續(xù)到找到所需的解或活結(jié)點表為空時為止。5. 試比較分支限界法與回溯法的異同。P161 課件第 6 章 (1) 第 5 頁不同點:(1) 求解目標:回溯法的求解目標是找出解空間樹中滿足約束條件的所有解,而分支限界法的求解目標則是找出滿足約束條件的一個解,或是在滿足約束條件的解中找出在某種意義下的最優(yōu)解。(2) 搜索方式:回溯法以深度優(yōu)先的方式搜索解空間樹,而分支限界法則以廣度優(yōu)先或以最小耗費優(yōu)先的方式搜索解空間樹。五、算法應用題1. 用動態(tài)

25、規(guī)劃求解凸多邊形最優(yōu)三角剖分問題。三角剖分的結(jié)構及其相關問題P61(1)語法樹與完全加括號方式一個表達式的完全加括號方式相應于一棵完全二叉樹,稱為表達式的語法樹。例如,完全加括號的矩陣連乘積(A1(A2A3)(A4(A5A6)所相應的語法樹如圖(a)所示。(2)語法樹與凸多邊形三角剖分凸多邊形P=v0,v1, vn-1的三角剖分也可以用語法樹表示。如圖: 根結(jié)點是邊v0v 6(可以任選)。 其他邊則是語法樹的葉子節(jié)點。v0v 6 是三角形v0v3v6 的一條邊。2、三角剖分與矩陣連乘P61(1)一般來說,凸多邊形的三角剖分和有n-1 個葉節(jié)點的語法樹存在一一對應關系。(2)N 個矩陣連乘的完全

26、加括號和有n 個葉節(jié)點的語法樹也存在一一對應關系。(3)所以,n個矩陣連乘的完全加括號和有n+1個節(jié)點的凸多邊形的三角剖分也存在一一對應關系。(4)矩陣連乘積中 A1 A2An中的每個矩陣 Ai對應于凸(n+1)邊形中的一條邊 vi-1vi。三角 剖分中的一條弦 vivj , i<j ,對應于矩陣連乘積 Ai+1:j。(5)矩陣連乘積的最優(yōu)計算次序問題是凸多邊形最優(yōu)三角剖分問題的特殊情況。課后習題(第3 章小結(jié) * )對于如下矩陣鏈P=10,100,5,50,30,20,60,45,50,請按照構造其最優(yōu)完全加括號方式,并列出相應的語法樹 和最優(yōu)三角剖分圖。2 .用貪心算法求解活動安排問

27、題/最小生成樹問題/哈夫曼編碼問題。貪心算法求解活動安排問題例:設待安排的11個活動的開始時間和結(jié)束時間按結(jié)束時間的非減序排列如下:最小生成樹問題 P103-P105哈夫曼編碼問題,前綴碼二叉樹表示法例子:圖a:與固定長度編碼對應的樹(葉子高度一致)圖b:與可變長度編碼對應的樹(葉子高度不一致)3 .用回溯法求解0-1背包問題/最優(yōu)裝載問題。用回溯法求0-1背包問題。P133,實例:n=5,M=50N12345W155252730P3012444650P/W22.41.761.701.67(1) .令bestp=0,將物體的序號按價值體積比排序結(jié)果是(2,1,3,4,5)N21345W5152

28、52730P1230444650P/W2.421.761.701.67(2) .根據(jù)排序得到部分解(1,1,1,0),估計當前部分解的價值 b,86+(50-45)*1.67=94.3, b >bestp.(3) .繼續(xù)向下搜索生成結(jié)點 F,得到可行解(1,1,1,0,0),得到價值為86,更新bestp=86(如圖 第3步)第3步第5步第8步(4) .回溯:沿E回溯到左孩子 D,生成相應右孩子G,得到部分解(1,1,0,1,此時b=93.1b>bestp,可以生成右子樹(第4步在第5步的基礎上沒有 H和I的圖形)(5) .繼續(xù)生成結(jié)點 H,I ,得到可行解(1,1,0,1,0 (

29、價值為88,更新bestp=88(如圖第5步)(6) .回溯H生成J,得到部分解(1,1,0,0 ),估計部分解b=92>88 (第6步在第8步的基礎上沒有K和L的圖形).繼續(xù)生成結(jié)點 K,得到可行解(1,1,0,0, 1 ),價值為92,更新bestp=92 (第7步在第8步的基礎上沒有L的圖形)(8) . K 是左孩子,生成其對應的右孩子L,得到可行解(1,1,0,0,0)(如圖第8步)(9) .回溯,沿結(jié)點L向上回溯到結(jié)點 B,生成結(jié)點M,得到部分解(1,0),估計部分解b=90<92,回溯(第9步在第10步的基礎上沒有 N的圖形)(10) .向上繼續(xù)回溯生成結(jié)點N,得到部分解(0),此時得到的b=74+10*(46/27) =91.03<92,回溯,此時已回到根結(jié)點,結(jié)束。最優(yōu)解 (1,1,0,0, 1 ), 價值為92.(如圖第10步) 練習n=8, M=110 ,W=( 1, 11,21,23,33,43,45,55 )P=(11,21,31,33,43,53,55,65 )用回溯法求此0-1 背包問題的最優(yōu)解。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論