1、關於算法的說法中正確的有(C)。
Ⅰ.求解某一類問題的算法是唯一的(如:冒泡排序可以用:窮舉法、遞歸)
Ⅱ.算法必須在有限步操作之后停止
Ⅲ.算法的每一步操作必須是明確的,不能有歧義或含義模糊
Ⅳ.算法執行后一定產生確定的結果
A.1個 B.2個 C.3個 D.4個
算法設計的目標:
(1)正確性:正確地執行預先規定的功能和性能要求。
(2)可使用性(用戶友好性):可以很方便地使用。
(3)可讀性:易於理解。
(4)健壯性:提供異常處理,能夠對不合理的數據進行檢查。
(5)高效率與低存儲:執行時間短的算法效率高,所需的最大存儲容量低的算法好。
算法的重要特性:
(1)有限性:執行有限步之后結束。
(2)確定性:每一條指令無二義性。
(3)可行性:每一條運算都能精確地執行。
(4)輸入性:一個算法有零個或多個輸入。
(5)輸出性:一個算法有一個或多個輸出。
2、T(n)表示當輸入規模為n時的算法效率,以下算法效率最優的是(C)。
A.T(n)= T(n-1)+1,T(1)=1 B.T(n)= 2n2
C.T(n)= T(n/2)+1,T(1)=1 D.T(n)=3nlog2n
3、以下關於漸近記號的性質是正確的是(A)
A.f(n)=O(g(n)),g(n)=O(h(n))⇒f(n)=O(h(n)) (傳遞性)
B.f(n)=O(g(n)),g(n)=O(h(n))⇒h(n)=O(f(n)) (不滿足傳遞性)
C.O(f(n))+O(g(n))=O(min(f(n),g(n))) (max)
D.f(n)=O(g(n))⇔g(n)=O(f(n)) (上限不滿足反身性)
4.Hanoi塔問題如下圖所示,現要求將塔座A上的所有圓盤移到塔座B上,並仍按同樣順序疊置,移動圓盤時遵守Hanoi塔問題的移動規則,由此設計出解Hanoi塔問題的遞歸算法正確的是(B)
漢諾塔:https://www.cnblogs.com/zhai1997/p/11773077.html
A、
void Hanoi(int n, int A,int C,int B){
if(n>0) {Hanoi (n-1,A,C,B); Move(n,a,b); Hanoi(n-1,C,B,A); } }
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 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) }
5.分治法的設計思想是將一個難以直接解決的大問題分割成規模較小的子問題,分別解決子問題,最后將子問題的解組合起來形成原問題的解。這要求原問題和子問題(C)。
A.問題規模相同,問題性質相同
B.問題規模相同,問題性質不同
C.問題規模不同,問題性質相同
D.問題規模不同,問題性質不同
分治法是采用遞歸的思想,將大問題轉化為小問題,然后由小問題(子問題之間相互獨立且與原問題的形式相同)構造出大問題的解。
分治法的特性:
(1)問題的規模縮小到一定程度可以很容易的解決;
(2)可以分解為若干個規模較小的相同問題;
(3)子問題的解可以合並為該問題的解;
(4)該問題分解出的各個子問題是相互獨立的,即子問題之間不包含公共的子問題
6、在尋找n個元素中第k小元素問題中,如快速排序算法思想,運用分治算法對n個元素進行划分,如何選擇划分基准?下面(D)答案解釋最合理。
A.隨機選擇一個元素作為划分基准
B.取子序列的第一個元素作為划分基准
C.用中位數的中位數方法尋找划分基准
D.以上皆可行,但不同方法,算法復雜度上界可能不同
取第一個元素的話時間復雜度為(Onlog2n),P81。
7、二分搜索算法是利用( A )實現的算法。
A、分治策略 B、動態規划法 C、貪心法 D、回溯法
二分搜索(二分查找):搜索過程從數組的中間元素開始,如果中間元素正好是要查找的元素,則搜索過程結束;如果某一特定元素大於或者小於中間元素,則在數組大於或小於中間元素的那一半中查找,而且跟開始一樣從中間元素開始比較。如果在某一步驟數組為空,則代表找不到。但是前提是搜索的數組是有序的。
8、Strassen矩陣乘法是利用( A )實現的算法。
A、分治策略 B、動態規划法 C、貪心法 D、回溯法
9、使用分治法求解不需要滿足的條件是( A )。
A、子問題必須是一樣的 B、子問題不能夠重復
C、子問題的解可以合並 D、原問題和子問題使用相同的方法解
規模改變,問題性質不變
10、實現合並排序利用的算法是( A )
A、分治策略 B、動態規划法 C、貪心法 D、回溯法
先分解:將序列分解為length長度的若干子問題
求解子問題:將相鄰的兩個子問題合並為一個有序的子序列
合並:合並不需要執行任何操作
11、實現大整數的乘法是利用的算法( C )
A、貪心法 B、動態規划法 C、分治策略 D、回溯法
12.(C)是貪心算法的基本要素。
A.重疊子問題 B.構造最優解
C.貪心選擇性質 D.定義最優解
貪心算法基本要素:
(1)貪心選擇性質:每一步所做的貪心選擇最終導致問題的整體最優解。
(2)最優子結構性質:一個問題的最優解包含其子問題的最優解。
13.采用貪心算法的最優裝載問題的主要計算量在於將集裝箱依其重量從小到大排序,故算法的時間復雜度為(D)。
A.O(n) B.O(log2n) C.O(n3) D.O(nlog2n)
有一批集裝箱要裝上一艘載重量為C的輪船,其中集裝箱i的重量為Wi。要求在裝載體積不受限制的情況下,將盡可能多的集裝箱裝上輪船。
14.一棵哈夫曼樹共有215個結點,對其進行哈夫曼編碼,共能得到(B )個不同的碼字。
A.107 B.108 C.214 D.215
哈夫曼樹中只有度為零和度為二的節點,沒有度為一的結點,且n0=n2+1(非空二叉樹的性質),n=n0+n2
只有葉子結點能夠產生碼字,也就是計算度為零的結點。
15、哈弗曼編碼的貪心算法所需的計算時間為(B)。
A、O(n2n) B、O(nlog2n) C、O(2n) D、O(n)
Onlog2n
16、背包問題的貪心算法所需的計算時間為(B)
A、O(n2n) B、O(nlog2n) C、O(2n) D、O(n)
問題描述:與0 / 1背包問題不同的是,完全背包問題可以裝入一部分物品進入背包,也就是說背包一定可以裝滿。
方案:將物品以單位價值從大到小排序,除最后一個物品只取一部分之外,其他物品要么全拿,要么不拿
時間復雜度:快速排序(Onlog2n)
while循環(n)
所以時間復雜度為(Onlog2n)
17、以下不屬於貪心算法的是( D)
A.Prim算法 B.Kruskal算法 C.Dijkstra算法 D.深度優先遍歷
(1)Prim算法 :按照頂點規定
Kruskal算法:按照邊規定
Dijkstra算法:單源最短路徑
深度優先遍歷:回溯,走不通的時候回溯
18、下面問題( B )不能使用貪心法解決。
A、單源最短路徑問題 B、N皇后問題
C、最小生成樹問題 D、背包問題
N皇后為遞歸。
19、關於0/1背包問題,以下描述正確的是(D)。
A.可以使用貪心算法找到最優解
B.能找到多項式時間的有效算法
C.使用教材介紹的動態規划方法可求解任意0-1背包問題
D.對於同一背包與相同的物品,背包問題取得的總價值一定大於等於做0/1背包問題
A:窮舉法(結合求解冪集的方法)
C:動態規划可以求解完全背包問題: 每種物品可以挑選任意多件。
D:背包問題中背包一定能夠裝滿,但是0/1背包不能(https://www.cnblogs.com/zhai1997/p/12121834.html)。
20.一個問題可用動態規划算法或貪心算法求解的關鍵特征是問題的( C)。
A.貪心選擇性質 B.重疊子問題 C.最優子結構性質 D.定義最優解
最優子結構性質:一個問題的最優解包含其子問題的最優解。
21.能采用貪心算法求最優解的問題,一般具有的重要性質為:( A )
A、最優子結構性質與貪心選擇性質 B、重疊子問題性質與貪心選擇性質
C、最優子結構性質與重疊子問題性質 D、預排序與遞歸調用
貪心算法基本要素:
(1)貪心選擇性質:每一步所做的貪心選擇最終導致問題的整體最優解。
(2)最優子結構性質:一個問題的最優解包含其子問題的最優解。
22. ( D )是貪心算法與動態規划算法的共同點。
A.重疊子問題 B、構造最優解 C、貪心選擇性質 D、最優子結構性質
最優子結構性質:一個問題的最優解包含其子問題的最優解。
23.下列算法中不能解決0/1背包問題的是(A)
A、貪心法B、動態規划C、回溯法D、分支限界法
(1)貪心算法在某些情況下會出錯。
(2)0-1背包問題可以用動態規划、回溯法和分支限界法這三種任意一種算法策略來求解。
24.下列算法中通常以自底向上的方式求解最優解的是( B )。
A.分去限界法 B、動態規划法 C、貪心法 D、回溯法
25.貪心算法與動態規划算法的主要區別是( B )。
A、最優子結構 B、貪心選擇性質 C、構造最優解 D、定義最優解
貪心算法基本要素:
(1)貪心選擇性質:每一步所做的貪心選擇最終導致問題的整體最優解。
(2)最優子結構性質:一個問題的最優解包含其子問題的最優解。
而動態規划也具有最優子結構性質。
26.動態規划算法的基本要素為( C )
A、最優子結構性質與貪心選擇性質 B、重疊子問題性質與貪心選擇性質
C、最優子結構性質與重疊子問題性質 D、預排序與遞歸調用
(1)子問題重疊性(要與分治法區別,分治的子問題是相互獨立的)
(2)最優子結構性質
27.關於回溯法以下敘述中不正確的是(C)。
A.回溯法有“通用解題法”之稱,它可以系統地搜索一個問題的所有解或任意解
B.回溯法是一種既帶系統性又帶有跳躍性的搜索算法
C.回溯算法需要借助隊列這種結構來保存從根結點到當前擴展結點的路徑
D.回溯算法在生成解空間的任一結點時,先判斷該結點是否可能包含問題的解,如果肯定不包含,則跳過對該結點為根的子樹的搜索,逐層向祖先結點回溯
C:借助於樹結構
28、下列算法中通常以深度優先方式系統搜索問題解的是( D )。
A、備忘錄法 B、動態規划法 C、貪心法 D、回溯法
回溯法:深度優先
分支限界法:廣度優先
29.下面哪種函數是回溯法中為避免無效搜索采取的策略( B )
A、遞歸函數 B、剪枝函數 C、隨機數函數 D、搜索函數
避免無效搜索的方法:
(1)約束函數:減去不滿足約束的子樹
(2)限界函數:剪去得不到解或最優解的子樹
30、0-1背包問題的回溯算法所需的計算時間為( C )
A、O(n2) B、O(nlogn) C、O(2n) D、O(n)
31.以深度優先方式系統搜索問題解的算法稱為 ( D ) 。
A、分支界限算法 B、概率算法 C、貪心算法 D、回溯算法
回溯法:深度優先
分支限界法:廣度優先
32.回溯法在問題的解空間樹中,按( D )策略,從根結點出發搜索解空間樹。
A、廣度優先 B、活結點優先 C、擴展結點優先 D、深度優先
回溯法:深度優先
分支限界法:廣度優先
33.分支限界法在問題的解空間樹中,按( A )策略,從根結點出發搜索解空間樹。
A.廣度優先 B. 活結點優先 C.擴展結點優先 D. 深度優先
回溯法:深度優先
分支限界法:廣度優先
34.采用廣度優先策略搜索的算法是( A )。
A、分支界限法 B、動態規划法 C、貪心法 D、回溯法
回溯法:深度優先
分支限界法:廣度優先
35.常見的兩種分枝限界法為(D )。
A.廣度優先分枝限界法與深度優先分枝限界法
B.隊列式(FIFO)分枝限界法與堆棧式分枝限界法
C.排列樹法與子集樹法
D.隊列式(FIFO)分枝限界法與優先隊列式分枝限界法
P185
36.最大效益優先是( A )的一搜索方式。
A、分支界限法 B、動態規划法 C、貪心法 D、回溯法
37.下面不是分支界限法搜索方式的是( D )。
A、廣度優先 B、最小耗費優先 C、最大效益優先 D、深度優先
回溯法:深度優先
分支限界法:廣度優先
38.分支限界法解0/1背包問題時,優先級隊列的組織形式是( B )。
A、小根堆 B、大根堆 C、棧 D、循環鏈表
最大優先隊列:大根堆
最小優先隊列:小根堆
隊列式分支限界法:隊列
39、優先隊列式分支限界法選取擴展結點的原則是( C )。
A、先進先出 B、后進先出 C、結點的優先級 D、隨機
選取優先級最高的結點作為當前的擴展結點。