5算法第五章贪心法讲义.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
5算法第五章贪心法讲义

* 确定作业集合J是否是可行解 检验J的所有可能的排列 б=i1,i2,…,ik是J中作业的一种排列; 完成作业ij的最早时间是j,1≤j≤k; 若排列中的每个作业的dij≥j,则б是一个允许的调度序列,J是一个可行解;否则,检验其他排列形式。 检验一种特殊的排列:按期限的非降次序。 * 一个例子 (p1,p2,p3,p4)=(100,10,15,20), (d1,d2,d3,d4)=(2,1,2,1) б : d2 ≤ d4 ≤ d1 ≤ d3 J={1, 4} 处理次序: 4, 1 , J是一个可行解 J={2, 3} 处理次序: 2, 3 , J是一个可行解 J={2, 4} 处理次序: 2, 4 , 但是作业4违反的它的期限, 所以J不是一个可行解 * 定理5.3 设J是k个作业的集合, б=i1,i2,…,ik是J中作业的一种排列, 它使得di1≤di2≤…≤dik。J是一个可行解, 当且仅当J中的作业可以按照б的次序而又不违反任何一个期限的情况来处理。 * 证明思想 如果J中的作业可以按照б的次序而又不违反任何一个期限,则J是一个可行解。 若J是可行解,则必存在б’=r1,r2,…,rk,使得drj≥j,1≤j≤k。 假设б’≠б,令a是使得ra≠ia的最小下标。 设rb=ia,显然ba。 在б’中交换ra与rb的位置,产生新的可行排列б”。 连续使用这种方法,就将б’转换成б且不违反任何一个期限。 б’ : ……ra.…...….. б : ……ia ……….. rb. б” : ……rb.…...….. б : ……ia ……….. ra. ra延后执行是否可行? drb=dia≤dra * 首先将作业按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}是否可行, 既是否能找到一个适当的位置r,使i排列在r+1位置,满足如下条件: D[i]r; D[J(r)]≤D[i]; D[J(l)]l, r+1≤l≤k; 若找到,则进行如下处理: 位置r+1…k共k–r个作业依次后移一个位置,即延迟一个单位时间再处理; 作业i插入到r+1位置,既在时间片r开始时处理。 根据定理5.3, 带有限期的作业排序问题可如下处理。 类似于直接插入法对期限值进行非降次序排列。 * J[0] J[1] J[2] J[3] J[4] J[5] 0 3 1 2 J[0] J[1] J[2] J[3] J[4] J[5] 0 1 0 1 2 3 4 5 p 20 15 10 5 1 d 0 2 3 1 4 4 2 实例: n=5, (p1,p2,p3,p4,p5)=(10, 1,15,20, 5) (d1,d2,d3,d4,d5)=( 1, 4, 3, 2, 4) J[0] J[1] J[2] J[3] J[4] J[5] 0 1 2 2 1 3 4 D[J(l)]l, r+1≤l≤k; D[J(r)]≤D[i]; D[i]r; * 算法5.4 带有限期的作业排序的贪心算法 从D(J[k])到 D(J[1])依次与D(i)比较来寻找插入位置r的过程 满足条件表示找到插入位置r 实现作业r+1到作业k依次往后移动一个位置 将作业i插入到r+1位置 procedure JS(D, J, n, k) integer D(0:n), J(0:n), i, k, n, r D(0)←J(0) ← 0; k ← 1; J(1) ← 1 for i ← 2 to n do r ← k while D(J(r))D(i) and D(J(r)) ≠r do r ← r – 1 repeat if D(J(r))≤D(i) and D(i)r then for l ← k to r+1 by –1 do J(l+1) ← J(l) repeat J(r+1) ← i ; k ← k+1; endif repeat end JS * 实例: n=5, (p1,p2,p3,p4,p5)=(10, 1,15,20, 5) (d1,d2,d3,d4,d5)=( 1, 4,

文档评论(0)

441113422 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档