第4章 貪心算法 習題
【+】閱讀、掌握課本經典范例代碼的實現:(1)活動安排問題;(2)最優裝載問題;(3)哈夫曼編碼;(4)單源最短路徑;(5)最小生成樹;(6)多機調度問題。
【第1題】單項選擇題
(1)下面是貪心算法的基本要素的是( )。
A.重疊子問題 B.構造最優解 C.貪心選擇性質 D.定義最優解
(2)下面問題( )不能使用貪心法解決。
A.單源最短路徑問題 B. n皇后問題
C.最小花費生成樹問題 D.背包問題
(3)采用貪心算法的最優裝載問題的主要計算量在於將集裝箱依其重量從小到大排序,故算法的時間復雜度為( )。
A.O(n) B.O(n2) C.O(n3) D.O(nlog2n)
(4)關於0-1背包問題以下描述正確的是( )。
A.可以使用貪心算法找到最優解
B.能找到多項式時間的有效算法
C.使用教材介紹的動態規划方法可求解任意0-1背包問題
D.對於同一背包與相同的物品,做背包問題取得的總價值一定大於等於做0-1背包問題
(5)一棵哈夫曼樹共有215個結點,對其進行哈夫曼編碼,共能得到( )個不同的碼字。
A.107 B.108 C.214 D.215
【第2題】求解哈夫曼編碼中如何體現貪心思路?
【第3題】舉反例證明0-1背包問題若使用的算法是按照vi/wi的非遞減次序考慮選擇的物品,即只要正在被考慮的物品裝得進就裝入背包,則此方法不一定能得到最優解(此題說明0-1背包問題與背包問題的不同)。
*【第4題】給定數軸X上n個不同點的集合,{x1,x2,...,xn},其中,x1<x2<...<xn。現在用若干個長度為1的閉區間來覆蓋這些點。設計一個算法找到最少的閉區間個數和位置。證明算法的正確性並估計算法的時間復雜度。
【第5題】(編程)求解硬幣問題。有1分、2分、5分、10分、50分和100分的硬幣各若干枚,現在要用這些硬幣來支付W元,最少需要多少枚硬幣。
說明:用結構體數組A存放硬幣數據,A[i].v存放硬幣i的面額,A[i].c存放硬幣i的枚數。
*【第6題】(編程)求解正整數的最大乘積分解問題。將正整數n分解為若干個互不相同的自然數之和,使這些自然數的乘積最大。
【第7題】(編程)求解乘船問題。有n個人,第i個人
體重為wi(0≤i<n)。每艘船的最大載重量均為C,且最多只能乘兩個人。用最少的船裝載所有人。
【第8題】(編程)求解會議安排問題。有一組會議A和一組會議室B,A[i]表示第i個會議的參加人數,B[j]表示第j個會議室最多可以容納的人數。當且僅當A[i]≤B[j]時,第j個會議室可以用於舉辦第i個會議。給定數組A和數組B,試問最多可以同時舉辦多少個會議。例如,A[]={1,2,3},B[]={3,2,4},結果為3;若A[]={3,4,3,1},B[]={1,2,2,6},結果為2.