《計(jì)算機(jī)算法設(shè)計(jì)與分析》習(xí)題及答案_第1頁
《計(jì)算機(jī)算法設(shè)計(jì)與分析》習(xí)題及答案_第2頁
《計(jì)算機(jī)算法設(shè)計(jì)與分析》習(xí)題及答案_第3頁
《計(jì)算機(jī)算法設(shè)計(jì)與分析》習(xí)題及答案_第4頁
《計(jì)算機(jī)算法設(shè)計(jì)與分析》習(xí)題及答案_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、計(jì)算機(jī)算法設(shè)計(jì)與分析習(xí)題及答案一選擇題1、二分搜索算法是利用( A )實(shí)現(xiàn)的算法。A、分治策略 B、動(dòng)態(tài)規(guī)劃法 C、貪心法 D、回溯法2、下列不是動(dòng)態(tài)規(guī)劃算法基本步驟的是( A )。A、找出最優(yōu)解的性質(zhì)   B、構(gòu)造最優(yōu)解   C、算出最優(yōu)解 D、定義最優(yōu)解3、最大效益優(yōu)先是( A )的一搜索方式。A、分支界限法      B、動(dòng)態(tài)規(guī)劃法    C、貪心法 D、回溯法4. 回溯法解旅行售貨員問題時(shí)的解空間樹是( A )。A、子集樹 B、排列樹 C、深度優(yōu)先生成樹 D

2、、廣度優(yōu)先生成樹5下列算法中通常以自底向上的方式求解最優(yōu)解的是(  B  )。A、備忘錄法 B、動(dòng)態(tài)規(guī)劃法 C、貪心法 D、回溯法6、衡量一個(gè)算法好壞的標(biāo)準(zhǔn)是( C )。A 運(yùn)行速度快 B 占用空間少 C 時(shí)間復(fù)雜度低 D 代碼短7、以下不可以使用分治法求解的是( D )。A 棋盤覆蓋問題 B 選擇問題 C 歸并排序 D 0/1背包問題8. 實(shí)現(xiàn)循環(huán)賽日程表利用的算法是( A )。A、分治策略 B、動(dòng)態(tài)規(guī)劃法 C、貪心法 D、回溯法9下面不是分支界限法搜索方式的是(  D  )。A、廣度優(yōu)先 B、最小耗費(fèi)優(yōu)先 C、最大效益優(yōu)

3、先 D、深度優(yōu)先10下列算法中通常以深度優(yōu)先方式系統(tǒng)搜索問題解的是(  D  )。A、備忘錄法 B、動(dòng)態(tài)規(guī)劃法 C、貪心法 D、回溯法11.備忘錄方法是那種算法的變形。( B )A、分治法 B、動(dòng)態(tài)規(guī)劃法 C、貪心法 D、回溯法12哈夫曼編碼的貪心算法所需的計(jì)算時(shí)間為(  B  )。A、O(n2n) B、O(nlogn) C、O(2n) D、O(n)13分支限界法解最大團(tuán)問題時(shí),活結(jié)點(diǎn)表的組織形式是( B  )。A、最小堆 B、最大堆 C、棧 D、數(shù)組14最長公共子序列算法利用的算法是(  B&

4、#160;)。A、分支界限法 B、動(dòng)態(tài)規(guī)劃法 C、貪心法 D、回溯法15實(shí)現(xiàn)棋盤覆蓋算法利用的算法是(  A )。A、分治法 B、動(dòng)態(tài)規(guī)劃法 C、貪心法 D、回溯法16.下面是貪心算法的基本要素的是(  C  )。A、重疊子問題 B、構(gòu)造最優(yōu)解 C、貪心選擇性質(zhì) D、定義最優(yōu)解17.回溯法的效率不依賴于下列哪些因素( D )A.滿足顯約束的值的個(gè)數(shù) B. 計(jì)算約束函數(shù)的時(shí)間 C.計(jì)算限界函數(shù)的時(shí)間 D. 確定解空間的時(shí)間18.下面哪種函數(shù)是回溯法中為避免無效搜索采取的策略(  B  )A遞歸函數(shù) B.剪枝函數(shù) C。

5、隨機(jī)數(shù)函數(shù) D.搜索函數(shù)19. (  D )是貪心算法與動(dòng)態(tài)規(guī)劃算法的共同點(diǎn)。A、重疊子問題 B、構(gòu)造最優(yōu)解 C、貪心選擇性質(zhì) D、最優(yōu)子結(jié)構(gòu)性質(zhì)20. 矩陣連乘問題的算法可由( B )設(shè)計(jì)實(shí)現(xiàn)。A、分支界限算法 B、動(dòng)態(tài)規(guī)劃算法 C、貪心算法 D、回溯算法21. 分支限界法解旅行售貨員問題時(shí),活結(jié)點(diǎn)表的組織形式是( A )。A、最小堆 B、最大堆 C、棧 D、數(shù)組22、Strassen矩陣乘法是利用( A )實(shí)現(xiàn)的算法。A、分治策略 B、動(dòng)態(tài)規(guī)劃法 C、貪心法 D、回溯法23、使用分治法求解不需要滿足的條件是( A )。A 子問題必須是一樣的 B 子問

6、題不能夠重復(fù)C 子問題的解可以合并 D 原問題和子問題使用相同的方法解24、下面問題( B )不能使用貪心法解決。A 單源最短路徑問題 B N皇后問題 C 最小生成樹問題 D 背包問題25、下列算法中不能解決0/1背包問題的是( A )A 貪心法 B 動(dòng)態(tài)規(guī)劃 C 回溯法 D 分支限界法26、回溯法搜索狀態(tài)空間樹是按照( C )的順序。A 中序遍歷 B 廣度優(yōu)先遍歷 C 深度優(yōu)先遍歷 D 層次優(yōu)先遍歷27實(shí)現(xiàn)合并排序利用的算法是(  A  )。A、分治策略 B、動(dòng)態(tài)規(guī)劃法 C、貪心法 D、回溯法28下列是動(dòng)態(tài)規(guī)劃算法基本要素的是(  D

7、0; )。A、定義最優(yōu)解 B、構(gòu)造最優(yōu)解 C、算出最優(yōu)解 D、子問題重疊性質(zhì)29下列算法中通常以自底向下的方式求解最優(yōu)解的是( B )。A、分治法 B、動(dòng)態(tài)規(guī)劃法 C、貪心法 D、回溯法30采用廣度優(yōu)先策略搜索的算法是(  A  )。A、分支界限法 B、動(dòng)態(tài)規(guī)劃法 C、貪心法 D、回溯法31、合并排序算法是利用(  A )實(shí)現(xiàn)的算法。A、分治策略 B、動(dòng)態(tài)規(guī)劃法 C、貪心法 D、回溯法32、背包問題的貪心算法所需的計(jì)算時(shí)間為( B )A、O(n2n) B、O(nlogn) C、O(2n) D、O(n)33實(shí)現(xiàn)大整數(shù)的乘法是利用的算法( 

8、0;C  )。A、貪心法 B、動(dòng)態(tài)規(guī)劃法 C、分治策略 D、回溯法340-1背包問題的回溯算法所需的計(jì)算時(shí)間為(  A  )A、O(n2n) B、O(nlogn) C、O(2n) D、O(n)35采用最大效益優(yōu)先搜索方式的算法是( A )。A、分支界限法 B、動(dòng)態(tài)規(guī)劃法 C、貪心法 D、回溯法36貪心算法與動(dòng)態(tài)規(guī)劃算法的主要區(qū)別是( B )。A、最優(yōu)子結(jié)構(gòu) B、貪心選擇性質(zhì) C、構(gòu)造最優(yōu)解 D、定義最優(yōu)解37. 實(shí)現(xiàn)最大子段和利用的算法是( B )。A、分治策略 B、動(dòng)態(tài)規(guī)劃法 C、貪心法 D、回溯法38

9、.優(yōu)先隊(duì)列式分支限界法選取擴(kuò)展結(jié)點(diǎn)的原則是( C )。A、先進(jìn)先出 B、后進(jìn)先出 C、結(jié)點(diǎn)的優(yōu)先級 D、隨機(jī)39.背包問題的貪心算法所需的計(jì)算時(shí)間為(  B  )。A、O(n2n) B、O(nlogn) C、O(2n) D、O(n)40、廣度優(yōu)先是(  A  )的一搜索方式。A、分支界限法      B、動(dòng)態(tài)規(guī)劃法    C、貪心法    D、回溯法41. 一個(gè)問題可用動(dòng)態(tài)規(guī)劃算法或貪心算法求解的關(guān)鍵特征是問題的( B )。A、重疊子問

10、題 B、最優(yōu)子結(jié)構(gòu)性質(zhì) C、貪心選擇性質(zhì) D、定義最優(yōu)解42采用貪心算法的最優(yōu)裝載問題的主要計(jì)算量在于將集裝箱依其重量從小到大排序,故算法的時(shí)間復(fù)雜度為 ( B ) 。A、O(n2n) B、O(nlogn) C、O(2n) D、O(n)43. 以深度優(yōu)先方式系統(tǒng)搜索問題解的算法稱為 ( D ) 。A、分支界限算法 B、概率算法 C、貪心算法 D、回溯算法44. 實(shí)現(xiàn)最長公共子序列利用的算法是(  B  )。A、分治策略 B、動(dòng)態(tài)規(guī)劃法 C、貪心法 D、回溯法A. void hanoi(int n, int A, int C, int B) if (n > 0

11、) hanoi(n-1,A,C, B); move(n,a,b); hanoi(n-1, C, B, A); 45. Hanoi塔問題如下圖所示?,F(xiàn)要求將塔座A上的的所有圓盤移到塔座B上,并仍按同樣順序疊置。移動(dòng)圓盤時(shí)遵守Hanoi塔問題的移動(dòng)規(guī)則。由此設(shè)計(jì)出解Hanoi塔問題的遞歸算法正確的為:(B)Hanoi塔B. void hanoi(int n, int A, int B, int C) if (n > 0) hanoi(n-1, A, C, B); move(n,a,b); hanoi(n-1, C, B, A); C. void hanoi(int n, int C, int

12、 B, int A) if (n > 0) hanoi(n-1, A, C, B); move(n,a,b); hanoi(n-1, C, B, A); D. void hanoi(int n, int C, int A, int B) if (n > 0) hanoi(n-1, A, C, B); move(n,a,b); hanoi(n-1, C, B, A); 46. 動(dòng)態(tài)規(guī)劃算法的基本要素為( C )A. 最優(yōu)子結(jié)構(gòu)性質(zhì)與貪心選擇性質(zhì) B重疊子問題性質(zhì)與貪心選擇性質(zhì)C最優(yōu)子結(jié)構(gòu)性質(zhì)與重疊子問題性質(zhì) D. 預(yù)排序與遞歸調(diào)用47. 能采用貪心算法求最優(yōu)解的問題,一般具有的重要性

13、質(zhì)為:( A )A. 最優(yōu)子結(jié)構(gòu)性質(zhì)與貪心選擇性質(zhì) B重疊子問題性質(zhì)與貪心選擇性質(zhì)C最優(yōu)子結(jié)構(gòu)性質(zhì)與重疊子問題性質(zhì) D. 預(yù)排序與遞歸調(diào)用48. 回溯法在問題的解空間樹中,按( D )策略,從根結(jié)點(diǎn)出發(fā)搜索解空間樹。A.廣度優(yōu)先 B. 活結(jié)點(diǎn)優(yōu)先 C.擴(kuò)展結(jié)點(diǎn)優(yōu)先 D. 深度優(yōu)先49. 分支限界法在問題的解空間樹中,按( A )策略,從根結(jié)點(diǎn)出發(fā)搜索解空間樹。 A.廣度優(yōu)先 B. 活結(jié)點(diǎn)優(yōu)先 C.擴(kuò)展結(jié)點(diǎn)優(yōu)先 D. 深度優(yōu)先50. 程序塊( A )是回溯法中遍歷排列樹的算法框架程序。void backtrack (int t) if (t>n) output(x); else for (

14、int i=t;i<=n;i+) swap(xt, xi); if (legal(t) backtrack(t+1); swap(xt, xi); A.void backtrack (int t) if (t>n) output(x); else for (int i=0;i<=1;i+) xt=i; if (legal(t) backtrack(t+1); B. C.void backtrack (int t) if (t>n) output(x); else for (int i=0;i<=1;i+) xt=i; if (legal(t) backtrack(

15、t-1); void backtrack (int t) if (t>n) output(x); else for (int i=t;i<=n;i+) swap(xt, xi); if (legal(t) backtrack(t+1); D.51. 常見的兩種分支限界法為(D)A. 廣度優(yōu)先分支限界法與深度優(yōu)先分支限界法;B. 隊(duì)列式(FIFO)分支限界法與堆棧式分支限界法;C. 排列樹法與子集樹法;D. 隊(duì)列式(FIFO)分支限界法與優(yōu)先隊(duì)列式分支限界法;二、填空題 1.算法的復(fù)雜性有 時(shí)間 復(fù)雜性和 空間 復(fù)雜性之分。2、程序是 算法   

16、0; 用某種程序設(shè)計(jì)語言的具體實(shí)現(xiàn)。3、算法的“確定性”指的是組成算法的每條 指令 是清晰的,無歧義的。4. 矩陣連乘問題的算法可由 動(dòng)態(tài)規(guī)劃 設(shè)計(jì)實(shí)現(xiàn)。5、算法是指解決問題的 一種方法 或 一個(gè)過程 。6、從分治法的一般設(shè)計(jì)模式可以看出,用它設(shè)計(jì)出的程序一般是 遞歸算法 。7、問題的 最優(yōu)子結(jié)構(gòu)性質(zhì) 是該問題可用動(dòng)態(tài)規(guī)劃算法或貪心算法求解的關(guān)鍵特征。8、以深度優(yōu)先方式系統(tǒng)搜索問題解的算法稱為 回溯法 。9、計(jì)算一個(gè)算法時(shí)間復(fù)雜度通??梢杂?jì)算 循環(huán)次數(shù) 、 基本操作的頻率 或計(jì)算步。10、解決0/1背包問題可以使用動(dòng)態(tài)規(guī)劃、回溯法和分支限界法,其中不需要排序的是 動(dòng)態(tài)規(guī)劃 ,需要排序

17、的是 回溯法 ,分支限界法 。11、使用回溯法進(jìn)行狀態(tài)空間樹裁剪分支時(shí)一般有兩個(gè)標(biāo)準(zhǔn):約束條件和目標(biāo)函數(shù)的界,N皇后問題和0/1背包問題正好是兩種不同的類型,其中同時(shí)使用約束條件和目標(biāo)函數(shù)的界進(jìn)行裁剪的是 0/1背包問題 ,只使用約束條件進(jìn)行裁剪的是 N皇后問題 。12、 貪心選擇性質(zhì) 是貪心算法可行的第一個(gè)基本要素,也是貪心算法與動(dòng)態(tài)規(guī)劃算法的主要區(qū)別。13、矩陣連乘問題的算法可由 動(dòng)態(tài)規(guī)劃 設(shè)計(jì)實(shí)現(xiàn)。14.貪心算法的基本要素是 貪心選擇 性質(zhì)和 最優(yōu)子結(jié)構(gòu) 性質(zhì) 。15. 動(dòng)態(tài)規(guī)劃算法的基本思想是將待求解問題分解成若干 子問題 ,先求解 子問題 ,然后從這些 子問題 的解得到原問題的解。1

18、6.算法是由若干條指令組成的有窮序列,且要滿足輸入、 輸出 、確定性和 有限性 四條性質(zhì)。17、大整數(shù)乘積算法是用 分治法 來設(shè)計(jì)的。18、以廣度優(yōu)先或以最小耗費(fèi)方式搜索問題解的算法稱為 分支限界法 。19、 貪心選擇性質(zhì) 是貪心算法可行的第一個(gè)基本要素,也是貪心算法與動(dòng)態(tài)規(guī)劃算法的主要區(qū)別。20.快速排序算法是基于 分治策略 的一種排序算法。21.動(dòng)態(tài)規(guī)劃算法的兩個(gè)基本要素是. 最優(yōu)子結(jié)構(gòu) 性質(zhì)和 重疊子問題 性質(zhì) 。 22.回溯法是一種既帶有 系統(tǒng)性 又帶有 跳躍性 的搜索算法。 23.分支限界法主要有 隊(duì)列式(FIFO) 分支限界法和 優(yōu)先隊(duì)列式 分支限界法。24.分支限界法是一種既帶有

19、 系統(tǒng)性 又帶有 跳躍性 的搜索算法。25.回溯法搜索解空間樹時(shí),常用的兩種剪枝函數(shù)為 約束函數(shù) 和 限界函數(shù) 。26.任何可用計(jì)算機(jī)求解的問題所需的時(shí)間都與其 規(guī)模 有關(guān)。27.快速排序算法的性能取決于 劃分的對稱性 。28.所謂貪心選擇性質(zhì)是指 所求問題的整體最優(yōu)解可以通過一系列局部最優(yōu)的選擇,即貪心選擇來達(dá)到 。29.所謂最優(yōu)子結(jié)構(gòu)性質(zhì)是指 問題的最優(yōu)解包含了其子問題的最優(yōu)解 。30.回溯法是指 具有限界函數(shù)的深度優(yōu)先生成法 。31.用回溯法解題的一個(gè)顯著特征是在搜索過程中動(dòng)態(tài)產(chǎn)生問題的解空間。在任何時(shí)刻,算法只保存從根結(jié)點(diǎn)到當(dāng)前擴(kuò)展結(jié)點(diǎn)的路徑。如果解空間樹中從根結(jié)點(diǎn)到葉結(jié)點(diǎn)的最長路徑的

20、長度為h(n),則回溯法所需的計(jì)算空間通常為 O(h(n) )。32.回溯法的算法框架按照問題的解空間一般分為 子集樹 算法框架與 排列樹 算法框架。33.用回溯法解0/1背包問題時(shí),該問題的解空間結(jié)構(gòu)為 子集樹 結(jié)構(gòu)。34.用回溯法解批處理作業(yè)調(diào)度問題時(shí),該問題的解空間結(jié)構(gòu)為 排列樹 結(jié)構(gòu)。35.旅行售貨員問題的解空間樹是 排列樹 。三、算法填空1.背包問題的貪心算法void Knapsack(int n,float M,float v,float w,float x)/重量為w1.n,價(jià)值為v1.n的 n個(gè)物品,裝入容量為M的背包/用貪心算法求最優(yōu)解向量x1.nint i; Sort(n,

21、v,w); 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ī)劃算法int MaxSum(int n, int a) int sum=0, b=0; /sum存儲當(dāng)前最大的bj, b存儲bj for (int j=1; j<=n; j+) if (b>0) b+= aj ; else b=ai; ; /一旦某個(gè)區(qū)段和為負(fù),則從下一個(gè)位置累和 if(b>sum) sum=b; re

22、turn sum; 3.貪心算法求活動(dòng)安排問題template<class Type>void GreedySelector(int n, Type s, Type f, bool A) A1=true; int j=1; for (int i=2;i<=n;i+) if (si>=fj) Ai=true; j=i; else Ai=false;4.快速排序template<class Type>void QuickSort (Type a, int p, int r) if (p<r) int q=Partition(a,p,r); QuickSor

23、t (a,p,q-1); /對左半段排序 QuickSort (a,q+1,r); /對右半段排序 5. 回溯法解迷宮問題 迷宮用二維數(shù)組存儲,用'H'表示墻,'O'表示通道int x1,y1,success=0; /出口點(diǎn)void MazePath(int x,int y)/遞歸求解:求迷宮maze從入口(x,y)到出口(x1,y1)的一條路徑 mazexy='*' /路徑置為* if (x=x1)&&(y=y1) success=1; /到出口則成功 else if (mazexy+1='O') MazePat

24、h(x,+y); /東鄰方格是通路,向東嘗試 if (!success)&&(mazex+1y='O') MazePath(+x,y); /不成功且南鄰方格是通路,向南嘗試 if (!success)&&(mazexy-1='O') MazePath(x,-y); /不成功且西鄰方格是通路,向西嘗試 if (!success)&&(mazex-1y='O') MazePath(-x,y); /不成功且北鄰方格是通路,向北嘗試 if (!success) mazexy='' /死胡同置

25、為四、算法設(shè)計(jì)題1. 給定已按升序排好序的n個(gè)元素a0:n-1,現(xiàn)要在這n個(gè)元素中找出一特定元素x,返回其在數(shù)組中的位置,如果未找到返回-1。寫出二分搜索的算法,并分析其時(shí)間復(fù)雜度。template<class Type> int BinarySearch(Type a, const Type& x, int n)/在a0:n中搜索x,找到x時(shí)返回其在數(shù)組中的位置,否則返回-1 Int left=0; int right=n-1; While (left<=right) int middle=(left+right)/2; if (x=amiddle) return

26、middle; if (x>amiddle) left=middle+1; else right=middle-1; Return -1; 時(shí)間復(fù)雜性為O(logn)2. 利用分治算法寫出合并排序的算法,并分析其時(shí)間復(fù)雜度 void MergeSort(Type a, int left, int right) if (left<right) /至少有2個(gè)元素 int i=(left+right)/2; /取中點(diǎn) mergeSort(a, left, i); mergeSort(a, i+1, right); merge(a, b, left, i, right); /合并到數(shù)組b

27、copy(a, b, left, right); /復(fù)制回?cái)?shù)組a 算法在最壞情況下的時(shí)間復(fù)雜度為O(nlogn)。3.N皇后回溯法bool Queen:Place(int k) /檢查xk位置是否合法 for (int j=1;j<k;j+) if (abs(k-j)=abs(xj-xk)|(xj=xk) return false; return true; void Queen:Backtrack(int t) if (t>n) sum+; else for (int i=1;i<=n;i+) xt=i; if ( 約束函數(shù) ) Backtrack(t+1); 4.最大團(tuán)問題void Clique:Backtrack(int i) / 計(jì)算最大團(tuán) if (i > n) / 到達(dá)葉結(jié)點(diǎn) for (int j = 1; j <= n; j+) bestxj = xj; bestn = cn; return; / 檢查頂點(diǎn) i 與當(dāng)前團(tuán)的連接 int OK = 1; for (int j = 1; j < i; j+) if (xj && aij = 0) / i與j不相連 OK = 0; break; if (OK ) / 進(jìn)入左子樹 xi = 1; cn+; Backtrack

溫馨提示

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

最新文檔

評論

0/150

提交評論