算法分析與設計習題集整理_第1頁
算法分析與設計習題集整理_第2頁
算法分析與設計習題集整理_第3頁
算法分析與設計習題集整理_第4頁
算法分析與設計習題集整理_第5頁
已閱讀5頁,還剩25頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、精選文檔算法分析與設計習題集整理第一章算法引論一、填空題:1、算法運行所需要的計算機資源的量,稱為算法復雜性,主要包括時間復雜度和空間復雜度。2、多項式的上界為O(nm)。3、算法的基本特征:輸入、輸出、確定性、有限性 、可行性 。4、如何從兩個方面評價一個算法的優劣:時間復雜度、空間復雜度。5、計算下面算法的時間復雜度記為: O(n3) 。for(i=1;i=n;i+)for(j=1;j=n;j+) cij=0; for(k=1;k=n;k+) cij= cij+aik*bkj; 6、描述算法常用的方法:自然語言、偽代碼、程序設計語言、流程圖、盒圖、PAD圖。7、算法設計的基本要求:正確性

2、和 可讀性。8、計算下面算法的時間復雜度記為: O(n2) 。 for(i1;in; i+) y=y+1; for(j0;j =2n;j+ ) x; 9、計算機求解問題的步驟:問題分析、數學模型建立、算法設計與選擇、算法表示、算法分析、算法實現、程序調試、結果整理文檔編制。10、算法是指解決問題的 方法或過程 。11、算法由操作、控制結構、數據結構三要素組成。二、簡答題:1、按照時間復雜度從低到高排列:O( 4n2)、O( logn)、O( 3n)、O( 20n)、O( 2)、O( n2/3), O( n!)應該排在哪一位?答:O( 2),O( logn),O( n2/3),O( 20n),O

3、( 4n2),O( 3n),O( n!)2、什么是算法?算法的特征有哪些?答:1)算法:指在解決問題時,按照某種機械步驟一定可以得到問題結果的處理過程。通俗講,算法:就是解決問題的方法或過程。2)特征:1)算法有零個或多個輸入;)算法有一個或多個輸出; 3)確定性 ; )有窮性3、給出算法的定義?何謂算法的復雜性?計算下例在最壞情況下的時間復雜性?for(j=1;j=n;j+) (1)for(i=1;i=n;i+) (2) cij=0; (3) for(k=1;k=n;k+) (4) cij= cij+aik*bkj; (5)答:1)定義:指在解決問題時,按照某種機械步驟一定可以得到問題結果的

4、處理過程。 2)算法的復雜性:指的是算法在運行過程中所需要的資源(時間、空間)多少。 所需資源越多,表明算法的復雜性越高 3)該算法的主要元操作是語句5,其執行次數是n3次。故該算法的時間復雜度記為O(n3). 4、算法A和算法B解同一問題,設算法A的時間復雜性滿足遞歸方程,算法B的時間復雜性滿足遞歸方程,若要使得算法A時間復雜性的階高于算法B時間復雜性的階,a的最大整數值可取多少?答:分別記算法A和算法B的時間復雜性為和,解相應的遞歸方程得: 依題意,要求最大的整數a使得。顯然,當a4時, a2寫出其相應的遞歸算法?Int F(int n) if(n=1) return 1; else if

5、(n=2) return 2; else return F(n-1)+ F(n-2);2、設a,b,c是3個塔座。開始時,在塔座a上有一疊共n個圓盤,這些圓盤自下而上,由大到小地疊在一起。各圓盤從小到大編號為1,2,n,現要求將塔座a上的這一疊圓盤移到塔座b上,并仍按同樣順序疊置。在移動圓盤時應遵守以下移動規則:規則1:每次只能移動1個圓盤;規則2:任何時刻都不允許將較大的圓盤壓在較小的圓盤之上;規則3:在滿足移動規則1和2的前提下,可將圓盤移至a,b,c中任一塔座上。寫出該問題的解題步驟? 并寫出其相應的遞歸算法? 解:第一步:將n1個盤子看成一個整體,從A移到C; 第二步:將第n個盤子移到

6、B; 第三步:將n1個盤子看成一個整體,從C移到B;寫出其相應的遞歸算法:void hanoi(int n, int a, int b, int c) if (n 0) hanoi(n-1, a, c, b); move(a,b); hanoi(n-1, c, b, a); 第二章 分治算法(2)分治算法一、填空題:1、在快速排序、插入排序和合并排序算法中, 插入排序 算法不是分治算法。2、合并排序算法使用的是 分治 算法設計的思想。3、二分搜索算法是利用 分治 算法思想設計的。二、簡答題:1、適合用分治算法求解的問題具有的基本特征?答:1)該問題的規模縮小到一定的程度就可以容易解決;2)該問

7、題可以分解為若干個規模較小的相同問題,即該問題具有最優子結構性質; 3)該問題所分解出的各個子問題是相互獨立的,即子問題之間不包含公共的子問題。 4)利用該問題分解出子問題解可以合并為該問題解;2、分治算法基本思想,解題步驟? 三、算法設計題:1、改寫二分查找算法:設a1n是一個已經排好序的數組,改寫二分查找算法,使得當搜索元素x不在數組中時,返回小于x的最大元素位置i,和大于x的最小元素位置j;當搜索元素x在數組中時,i和j相同,均為x在數組中的位置。并分析其時間復雜度? 解:int binsearch( int an, int x ,) /x待查數據int mid, i , j; low=

8、1; int high=n;while(lowx) high=mid-1; /繼續在左邊查找else / (amid=2)個元素的集合中尋找極大元和極小元。用分治法(二分法)可以用較少比較次數地解決上述問題:1)將數據等分為兩組(兩組數據可能差1),目的是分別選取其中的最大(小)值。2)遞歸分解直到每組元素的個數2,可簡單地找到最大(小)值.3)回溯時將分解的兩組解大者取大,小者取小,合并為當前問題的解。 、 第三章動態規劃算法一、填空題:1、動態規劃算法中存儲子問題的解是為了 避免重復求解子問題 。2、( 最優子結構 )是問題能用動態規劃算法求解的前提。3、矩陣連乘問題的算法可由(動態規劃

9、)算法設計實現。二、判斷題:1、動態規劃算法基本要素的是最優子結構。 ( )2、最優子結構性質是指原問題的最優解包含其子問題的最優解。 ( )3、動態規劃算法求解問題時,分解出來的子問題相互獨立。 ( X)三、簡答題:1、動態規劃算法解題步驟?答:找出最優解的性質,并刻劃其結構特征;(即原問題的最優解,包含了子問題的最優解)遞歸地定義最優值;(即子問題具有重疊性,由子問題定義原問題)以自底向上的方式計算出最優值;根據計算最優值時得到的信息,構造最優解;2、動態規劃算法基本思想?答:動態規劃算法與分治法類似,其基本思想也是將待求解問題分解成若干個子問題;但是經分解得到的子問題往往不是互相獨立的。

10、不同子問題的數目常常只有多項式量級。在用分治法求解時,有些子問題被重復計算了許多次;如果能夠保存已解決的子問題的答案,而在需要時再找出已求得的答案,就可以避免大量重復計算,從而得到多項式時間算法。3、動態規劃與分治算法異同點?4、動態規劃算法的基本要素? 四、算法設計與計算題:1、和的最長公共子序列為。問:若用記錄序列和公共子序列長度。求:用動態規劃法求解時,計算最優值的遞歸公式? 設計計算最優值的算法?以及構造最優解的算法?2、長江游艇俱樂部在長江上設置了n個游艇出租站1,2n.游客可在這些游艇出租站租用游艇,并在下游的任何一個游艇出租站歸還游艇。游艇出租站i到游艇出租站j之間的租金為r(i

11、,j),其中1=ij=n;求:用動態規劃法求解時,計算最優值(最少租金)的遞歸公式?設計計算最優值(最少租金)的算法?并分析其時間復雜度?解:計算最優值算法public static void matrixChain(int p, int m, int s) int n=p.length-1; for (int i = 1; i = n; i+) mii = 0; /1個站 for (int r = 2; r = n; r+) for (int i = 1; i = n - r+1; i+) int j=i+r-1; m i j = mii + mi+1 j; s i j = i; /斷點位置

12、在i處 for (int k = i+1; k j; k+) int t = m i k + mk+1 j; if (t mij) m i j = t; s i j = k; 構造最優解算法public void traceback( int s,int I,int j)if(i=j) return;traceback( s, i, s i j );traceback( s, s i j+1, j );System.out.println(“A”+ i +“,”+ s i j + “A”+ s i j+1 +“,”+ j ) /(m i, s i j ) (m s i j+1, j )時間復雜

13、度:O(n3)第 4 章 貪心算法一、填空題:1、某單位給每個職工發工資(精確到元)。為了保證不要臨時兌換零錢, 且取款的張數最少,統計所需各種幣值(100,50,20,10,5,2,1元共七種)的張數。貪心算法如下:void greedy_zhaoling ( float GZ, int B , int S ) /GZ應發工資 for( j=1, j=7;j+) /貪心選擇,依次給最大幣種 A= GZ/B j ; /A表示對應j幣種張數 S j= S j +A ; /S j存放對應j幣種總張數 GZ= GZ-A*B j ; for(i=1;i=7;i+) print( B i , “-”,

14、S i ); /輸出幣種和對應張數 2、貪心算法的兩個基本要素是(貪心選擇性 )和( 最優子結構 )。 3、給定n種物品和一個背包。物品i的重量是Wi,其價值為Vi,背包的容量為M,應如何選擇裝入背包的物品,使得裝入背包中物品的總價值最大。貪心算法如下:float greedy_knapsack ( float M, float w , float p , float x ) / x 背包問題最優解, w 物品重量, P 物品價值 int n=w.length;float pp=0;float mmM; /pp計算當前總價值,mm背包剩余載重for( int i=1;i=n; i+ ) flo

15、at ww i= p i / w i ; /計算物品單位價值ww x i=0; /初始化Mergesort ( w , n ); /按單位價值將物品排序, 便于貪心選擇for( int i=1; i=n; i+ ) /貪心選擇,總是選擇價值最大放入背包 if ( w i=mm ) /當前物品小于背包剩余載重 x i=1; mm= mm - w i ; pp= pp + p i ; else x i=mm/w i; pp= pp + x i*p i ; break; /i部分放入背包return pp;二、判斷題:1、滿足貪心選擇性質必滿足最優子結構性質。 ( X )三、簡答題: 1、貪心算法的

16、基本思想?2、貪心算法的基本要素?3、貪心算法與動態規劃算法的異同?四、算法設計題:1、假設有7個物品,它們的重量和價值如下表所示。若這些物品均可以被分割,且背包容量M150,如果使用貪心方法求解此背包問題(背包不超載的前提下,裝載的物品價值達到最大)。物品ABCDEFG重量35306050401025價值10403050354030利用貪心算法求解該問題時,為了進行貪心選擇,首先應該做什么? 然后進行貪心裝載,給出一種正確的物品裝載順序?并給出其最優裝載方案? 利用貪心思想設計該普通背包問題的貪心算法?分析其時間復雜度?解: 1)依據不同的標準對這些物品進行排序,標準有重量、價值、單位價值;

17、 2)重量從小到大:FGBAEDC ,得到的貪心解為:FGBAE 全部放入,D放入20% ,得到價值為165; 價值從大到小 :DFBEGCA ,得到的貪心解為:DFBE 全部放入,G放入80% ,得到價值為189; 單位價值從大到小 :FBGDECA ,得到的貪心解為:FBGD 全部放入,E放入87.5% ,得到價值為190.625; 3)顯然使用單位價值得出最佳轉載方案。 、2、設有n個活動集合,其中每個活動都要求使用同一資源,如足球場,而在同一時間只能有一個活動使用該資源。每個活動i都有一個要求使用該資源起始時間si和結束時間fi,且si n ) / 搜索到葉子節點 sum+; /著色方

18、案數加1 for (int i=1; i=n; i+) system.out.print( x i ); /輸出解,頂點i著顏色x i else / 搜索到中間節點 for(int i=1; i=m; i+) x t=i; /頂點t著顏色i=1m if( ok( t ) ) backtrack(t+1); boolean ok( int k) /當前著色頂點與以前相鄰頂點是否同色 for(int j=1; j=n; j+) if( a k j&( x j=x k ) ) /數組a是圖的鄰接矩陣 /當前頂點k到j有邊:a k j,且色同:x j=x k return false; else re

19、turn true;算法分析(m種顏色,n個節點) 計算限界函數,一重for循環時間復雜度:O(n); 在最壞的情況下每一個內節點都需要判斷約束,內節點個數:1+m+m2+ m3+mn-1=(mn-1)/(m-1)個;故圖的m著色問題的回溯算法,時間復雜度為:O(n*mn)。第六章 分支限界算法一、填空題1、按照活結點表的組織方式的不同,分支限界法包括 隊列式分支限界算法 和 優先隊列式分支限界算法 兩種形式。2、回溯法與分支限界法搜索方式不同,回溯法按 深度優先 搜索解空間,分支限界法按 廣度優先或最小耗費優先 搜索解空間。3、隊列分支限界算法中,通常用隊列 實現,體現先進先出原則 的原則。

20、4、優先隊列式分支限界算法,通常采用堆實現。6、回溯法與分支限界算法求解問題時,需要構造對該問題的解空間結構,其解空間結構通常有3種形式,分別是 子集樹 、排列樹、 滿m叉樹 。二、判斷題1、分支限界法類似于回溯法,也是一種在問題的解空間樹T上搜索問題解的算法,兩者的搜索方式是相同的。(X)三、簡答題1、簡述分支限界法的基本思想與解題步驟?2、分支限界算法與回溯算法異同點?四、算法設計題1、01背包問題:假設有3個物品,它們的重量和價值如下表所示。若這些物品均不可以被分割,且背包容量M10,問應該如何裝入使背包中物品的總價值最大?物品ABC重量655價值422530用分支限界算法求解該01背包

21、問題: 構造求解該問題的解空間樹? 給出隊列式分支限界算法的求解過程?如設計該01背包問題的分支限界算法?并分析其時間復雜度?(隊列式分支限界,帶上界函數)、多段圖最短路徑問題求:構造求解該問題的解空間樹? 給出隊列式分支限界算法的求解過程?設計該問題的分支限界算法?并分析其時間復雜度?(隊列式分支限界,帶上界函數)解:2)求解過程:)算法描述: 法:隊列式分支限界法double shortest( int i) while (true) /隊列不空, 搜索問題的解空間 for ( int j=1; j=n;j+)/兒子結點入隊 if (a i j Float.MAX_VALUE) / 頂點i

22、到頂點j可達 dist j= dist i +a i j; / dist i記錄源到頂點的距離 p j=enode.i; / p j記錄頂點j的前驅 enQueue(v j, j); / 結點j加入隊列 ew = (Integer) queue.remove().intValue();/ 取隊首下一擴展結點 if (ew = -1) / 同一層尾部標記ew = -1:同一層結點處理結束 if (queue.isEmpty() return dist i;/判斷隊列是否為空 else queue.put(new Integer(-1); / 同層結點尾部標志 ew = (Integer) que

23、ue.remove().intValue(); / 取下一擴展結點 i+; / 進入下一層 時間復雜度:第七章 概率算法1、什么叫概率算法?答:概率算法允許算法在執行的過程中隨機選擇下一個計算步驟。2、概率算法有一個基本特征?答:基本特征是對所求解問題的同一實例用同一概率算法求解兩次可能得到完全不同的效果。3、概率算法可以分為哪4類?答:1)數值概率算法 2)蒙特卡羅算法 3)拉斯維加斯算法 4)舍伍德算法4、在概率算法中使用的隨機數都是一定程度上隨機的,即偽隨機數;一般隨機數通過線性同余法方法產生。第八章 NP完全性理論1、什么是易解問題?什么是難解問題?難解問題分為哪兩類?答:1)易解問題

24、:人們將存在多項式時間 算法的問題稱為易解問題;2)難解問題:將需要在指數時間內解決的問題稱為難解問題;3)難解問題有兩類: 1)不可判定問題 2)非決定的難處理問題 。2、什么是不可判定問題?什么是非決定的難處理問題?答:1)不可判定問題 :該類問題是不能解問題,它們太難了,以至于根本就不存在能求解它們的任何算法。2)非決定的難處理問題: 這類問題是可判定的(即可解的)。 但是,這類問題即使使用非決定的計算機,也不能在多項式時間內求解它們。3、什么是P類問題?什么是NP完全問題?答:1)P類問題:是一類能夠用確定性算法在多項式時間內求解的判斷問題。事實上,所有易解問題都屬于P類問題。2)NP

25、完全問題:對于某問題,很難找到其多項式時間的算法(或許根本不存在),但是如果給了該問題的一個答案,則可以在多項式時間內判定或驗證這個答案是否正確。 這種可以在多項式時間內驗證一個解是否正確的問題稱為NP問題。4、列出幾個典型的NP完全問題?答:(1)圖著色問題COLORING(2)路徑問題LONG-PATH (3)頂點覆蓋問題VERTEX-COVER(4)子集和問題SUBSET-SUM(5)哈密爾頓回路問題HAM-CYCLE(6)旅行商問題TSP(7)裝箱問題BIN-PACKING , 能否用k個箱子來裝n個物品;第九章近似算法1、 所有NP完全問題都還沒有多項式時間的算法,然而許多NP完全問

26、題都具有很重要的意義,對于這類問題通常可以采取以下幾種解題策略?答:)只對問題的特殊實例求解; )用動態規劃或分支限界法求解。 )啟發式方法求解 )只求近似解2、 利用近似算法求解NP完全問題時,近似算法應該滿足下面兩個基本的要求?答:1)算法的時間復雜性:要求算法能在n的多項式時間內完成。2)解的近似程度:算法的近似解應滿足一定的精度。通常,用來衡量精度的標準有近似比和相對誤差。1、二分搜索算法是利用( A )實現的算法。 A、分治策略 B、動態規劃法 C、貪心法 D、回溯法 2、下列不是動態規劃算法基本步驟的是( A )。 A、找出最優解的性質 B、構造最優解 C、算出最優解 D、定義最優

27、解 3、最大效益優先是( A )的一搜索方式。 A、分支界限法 B、動態規劃法 C、貪心法 D、回溯法 4、最長公共子序列算法利用的算法是( B )。 A、分支界限法 B、動態規劃法 C、貪心法 D、回溯法 5. 回溯法解TSP問題時的解空間樹是( A )。 A、子集樹 B、排列樹 C、深度優先生成樹 D、廣度優先生成樹 6下列算法中通常以自底向上的方式求解最優解的是( B )。 A、備忘錄法 B、動態規劃法 C、貪心法 D、回溯法 7、衡量一個算法好壞的標準是(C )。 A 運行速度快 B 占用空間少 C 時間復雜度低 D 代碼短 8、以下不可以使用分治法求解的是(D )。 A 棋盤覆蓋問題

28、 B 選擇問題 C 歸并排序 D 0/1背包問題 9. 實現循環賽日程表利用的算法是( A )。 A、分治策略 B、動態規劃法 C、貪心法 D、回溯法 10、實現最長公共子序列利用的算法是( B )。 A、分治策略 B、動態規劃法 C、貪心法 D、回溯法 11下面不是分支界限法搜索方式的是( D )。 A、廣度優先 B、最小耗費優先 C、最大效益優先 D、深度優先 12下列算法中通常以深度優先方式系統搜索問題解的是( D )。 A、備忘錄法 B、動態規劃法 C、貪心法 D、回溯法 13. 一個問題可用動態規劃算法或貪心算法求解的關鍵特征是問題的( B )。 A、重疊子問題 B、最優子結構性質

29、C、貪心選擇性質 D、定義最優解 14廣度優先是( A )的一搜索方式。 A、分支界限法 B、動態規劃法 C、貪心法 D、回溯法 15背包問題的貪心算法所需的計算時間為( B )。 A、O(n2) nB、O(nlogn) C、O(2) nD、O(n) 16實現最大子段和利用的算法是( B )。 A、分治策略 B、動態規劃法 C、貪心法 D、回溯法 17實現棋盤覆蓋算法利用的算法是( A )。 A、分治法 B、動態規劃法 C、貪心法 D、回溯法 18.下面是貪心算法的基本要素的是( C )。 A、重疊子問題 B、構造最優解 C、貪心選擇性質 D、定義最優解 19.回溯法的效率不依賴于下列哪些因素

30、( D ) A.滿足顯約束的值的個數 C. 計算限界函數的時間 B. 計算約束函數的時間 D. 確定解空間的時間 20.下面哪種函數是回溯法中為避免無效搜索采取的策略( B ) A遞歸函數 B.剪枝函數 C。隨機數函數 D.搜索函數 21、以深度優先方式系統搜索問題解的算法稱為 ( D ) 。 A、分支界限算法 B、概率算法 C、貪心算法 D、回溯算法 22、貪心算法與動態規劃算法的主要區別是( B )。 A、最優子結構 B、貪心選擇性質 C、構造最優解 D、定義最優解 23. 采用最大效益優先搜索方式的算法是( A )。 A、分支界限法 B、動態規劃法 C、貪心法 D、回溯法 24. ( D

31、 )是貪心算法與動態規劃算法的共同點。 A、重疊子問題 B、構造最優解 C、貪心選擇性質 D、最優子結構性質 25. 矩陣連乘問題的算法可由( B)設計實現。 A、分支界限算法 B、動態規劃算法 C、貪心算法 D、回溯算法 26. 0-1背包問題的回溯算法所需的計算時間為( A ) A、O(n2n) B、O(nlogn) C、O(2n) D、O(n) 27、背包問題的貪心算法所需的計算時間為( B ) A、O(n2) B、O(nlogn) C、O(2) D、O(n) 29、使用分治法求解不需要滿足的條件是(A )。 A 子問題必須是一樣的 B 子問題不能夠重復C 子問題的解可以合并 D 原問題

32、和子問題使用相同的方法解 30、下面問題(B )不能使用貪心法解決。 nnA 單源最短路徑問題 B N皇后問題 C 最小花費生成樹問題 D 背包問題 31、下列算法中不能解決0/1背包問題的是(A ) A 貪心法 B 動態規劃 C 回溯法 D 分支限界法 32、回溯法搜索狀態空間樹是按照(C )的順序。 A 中序遍歷 B 廣度優先遍歷 C 深度優先遍歷 D 層次優先遍歷 33、采用廣度優先策略搜索的算法是( A )。 A、分支界限法 B、動態規劃法 C、貪心法 D、回溯法 34實現合并排序利用的算法是( A )。 A、分治策略 B、動態規劃法 C、貪心法 D、回溯法 35下列是動態規劃算法基本要素的是( D )。 A、定義最優解 B、構造最優解 C、算出最優解 D、子問題重疊性質 36下列算法中通常以自底向下的方式求解最優解的是( B )。 A、分治法 B、動態規劃法 C、貪心法 D、回溯法 二、 填空題 1.算法的復雜性有 時間 復雜性和 空間 復雜性

溫馨提示

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

評論

0/150

提交評論