第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.