【算法设计与分析zxd】第7章 贪心法

贪心算法的设计技术

• 每一步的判断都是一个当前最优的抉择,这个抉择计算设计的好坏,决定了算法的成败。
• 多步判断过程,最终的判断序列对应于问题的最优解
• 适用于 能够 部最优达到全局最优的优化问题 【比如 求最短哈密顿回路的问题,就不是】

• 需要对具体的贪心算法的正确性进行必要的证明

用贪心法 求问题的解

【例7-1】

学生有n项活动申请使用某一个会议室,每项活动都有一个开始时间和一个结束时间。任何两个活动都不能同时使用这个会议室。问如何安排这些活动,使得被安排活动的数量达到最多?
问题分析
设活动编号的集合为A={1,2,…,n},第i项活动的起始时间为si,
结束时间为e i 。满足s i ≥e j 或s j ≥e i,i≠j,称为活动相容
A的两两相容的最大活动子集S
 方法1:按活动开始时间优先【更早的开始活动,也许能安排更多的活动】,例
A={1,2,3},s 1 =0, e 1 =17, s 2 =3,e 2 =5,s 3 =8,e 3 =15
 方法2:按占用时间由短到长来选择,也许可能安排更多的活动,
例A={1,2,3},s 1 =0, e 1 =8, s 2 =7,e 2 =10,s 3 =9,s e =15
 方法3:按结束时间从小到大选择,也许可以安排更多的活动。
命题:
活动是按结束时间从小到大进行排序的,即有
e 1 ≤e 2 ≤e 3 …≤e n ,贪心算法选择到第k步,有k项活动被选择,
生成一个选择序列i 1 ,i 2 , …,i k (按策略必有i 1 =1),
那么,最优解S必然包含i 1 ,i 2 , …,i k
【全局最优包含局部最优】
证明:设A中的活动都是按照结束的时间递增的顺序排列的,
S是A的最优解且S={i 1 ,i 2 , …,i m }。
(1) 当k=1时,需证明活动1被包含在最优解S中,即i 1 =1。
假设 i 1 ≠1,那么用活动1去替换i 1 ,得到S’,有S’=(S-{i 1 } ) ∪{1},
因为活动1结束时间比i 1活动结束得更早,因此,其和i 2 , …,i m活动均相容,又由于S与S’数量相同,
所以,S’也是A的最优解。 命题成立。
(2)假设对于任意整数k,命题正确。
若前k步顺序选择的活动 为i 1 ,i 2 , …,i k ,那么存在一个最优解S={i 1 ,i 2 , …,i k }∪B。
如果令S’是S中剩下的与{i 1 ,i 2 , …,ik}相容的活动,S’\subsetS  

 那么B是S’的一个最优解。若不然,假如S’有解B’,B’>B,那么用B’替换B以后得到解{i1 ,i2 , …,ik}∪B’,将比S的活动更多,这与S是最优解矛题得证。

对比(1)的证明,算法第一步选择结时间最早的活动总是导致一个最优解,故对子
问题S’存在一个最优解B*={ i k+1 , …}。由于B*与B都是S’的最优解,因而B*=B。于是
S’={ i 1 ,i 2 , …,i k }∪B*={ i 1 ,i 2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值