- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法分析第五章课件
第五章贪心方法;5.1 一般方法
5.2 背包问题
5.3 带有限期的作业排序
5.4 最优归并模式
;5.1 一般方法;贪心方法是根据具体的问题, 选取一种量度标准,按此标准对n个输入进行排序, 然后按该顺序一次输入一个量. 如果这个输入量和当前的部分最优解加在一起不能产生一个可行解, 则不把此输入量加入到这个部分解中, 这种能够得到某种量度意义下的最优解的分级处理方法就是贪心方法。;贪心方法的抽象化控制;5.2 背包问题;背包问题实例;背包问题的量度标准选择;选重量为量度标准;将物品按pi/wi的非增次序排序:
(p2/w2 , p3/w3 , p1/w1 )=(24/15, 15/10, 25/18)
即每一次装入的物品使它占用的每一单位重量获得当前最大的单位效益
先装入物品2, 即x2=1, w2=15, p2x2 =24;
再装入物品3, 因约束条件为?wi xi ?M=20, 所以物品3只能装入重量为5的一部分, 即x3=5/10=1/2;
最后得到总效益值为?pixi =24+15?1/2=31.5;背包问题的贪心算法;最优解的证明;定理5.1证明;;5.3 带有限期的作业排序;5.3 带有限期的作业排序;5.3 带有限期的作业排序;有4个作业, n=4, 其效益为(p1,p2,p3,p4)=(100,10,15,20)
其截止期限为(d1,d2,d3,d4)=(2,1,2,1),求该问题的最优解;设计算法;定理5.2 对于作业排序问题算法5.3所描述的贪心方法总是得到一个最优解。
证明要点:设J 为贪心解, I为最优解
I 、J的关系?
J中的作业a,a?I,有pa?pb, 其中b?I且b?J.
重新构造I
I、J中相同的作业:在同一时段调度
I、J中不同的作业:在I中将与a同一时段调度的作业b用a代换,代换后为I’ = (I?{b}) ?{a}
如何确定可行解?
检查k!种可能作业排列;定理5.3: 设J是k个作业的集合, ? =i1,i2,…,ik是J中作业的一种排列, 它使得di1?di2?…?dik。J是一个可行解, 当且仅当J中的作业可以按照?的次序排列而又不超出任何一个期限的限定来处理。; 根据定理5.3, 带有限期的作业排序问题处理过程如下:
首先将作业按p1?p2 ? … ? pn排序, 将作业1存入解 数组J中, 然后处理作业2到作业n;
假设已处理了i?1个作业, 其中有k个作业已存入J(1),J(2)…J(k)中, 且D(J(1))?D(J(2)) ?…?D(J(k)),
现在处理作业i, 判断J?{i}是否可行, 就是看是否能找到一个适当的插入位置, 使作业i插入后有D(J(r))?r; 1?r?k+1. 过程如下:
将D(J(k)), D(J(k?1)),…依次与D(i)比较,若D(J(l))D(i)且D(J(l))?l, l?k,则作业J(l)可以向后延迟一个单位时间来处理,作业i可以在J(l)之前处理。
直到找到位置q, 有D(i)?D(J(q)), 或者D(J(q))=q. 后一种情形下作业i不能在J(q)之前处理,舍弃作业i;前一种情形下只要D(i)q,就可把作业i插入到q+1位置,形成可行解.;带有限期的作业排序的贪心算法;实例: n=5, (p1,p2,p3,p4,p5)=(10, 1,15,20, 5)
(d1,d2,d3,d4,d5)=( 1, 4, 3, 2, 4);D(0)=J(0)=0; k=1; J(1)=1;
for循环(i=2时)
r = k =1;
while (D(J(r)))≯D(i)andD(J(r))) ?r) 条件不满足,不执行循环
if ( D(J(r)))?D(i) and D(i)r ) then
{ for i=1 to r+1=2 by –1 do 不执行循环
J(2)=i=2 ; k=k+1=2;
} ;k=2;
for循环(i=3时)
r = k = 2;
while (D(J(r)))D(i) and D(J(r))) ? r) 执行两次循环后 r=0
if ( D(J(r)))?D(i) and D(i)r ) then
{ for i=2 to r+1=1 by –1 do 执行2次 J(3)=J(2); J(2)=J(1);
J(1)=i=3 ; k=k+1=3;
} ;对于JS有两个赖以测量其时间复杂度的参数:
作业数 n 和包含在解J中的作
文档评论(0)