算法设计与分析第5章 贪心算法.pptVIP

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

第5章 贪心算法 5.1 算法概述 5.2 背包问题 5.3 带有期限的作业排序 5.4 最优归并模式 5.5 哈夫曼编码 5.6 最小生成树 5.7 单源点最短路径 5.1 算法概述 顾名思义,贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。当然,希望贪心算法得到的最终结果也是整体最优的。虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。如单源最短路经问题,最小生成树问题等。在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。 贪心算法采用时逐步构造最优解得方法 在每个阶段,都在一定的标准下作出一个看上去最优的决策。决策一旦作出, 就不可更改。作出这个局部最优决策所依照的标准称为贪心准则 贪心算法的特点: 1 在当前状态下一旦选定一个分量, 就不再重试其他的可行性; 2 它并不从整体最优上作出考虑, 它的选择只是在贪心准则下的局部最优选择 5.1.1 贪心选择性质 在求解一个问题的过程中,如果每一个阶段都是当前状态下的最优选择,即局部最优选择,并且最终能够求得问题的整体最优解 5.1.2 最优子结构性质 当一个问题的最优解包括了这个问题的子问题的最优解时,就说这个问题具有最优子问题 5.1.3 活动安排问题 设总共有n项活动(1,2,…, n), 并且所有的活动都需要使用同一个会场,而且任意两个活动不能同时使用这个会场。 设活动i占用会场的时间时[bi,ei), 其中biei(bi 是活动i开始的时间, ei是活动i结束的时间)。对两个不同的活动i 和j, 如果[bi,ei)与[bj,ej]这两个区间不相交, 就说活动i 与j是相容的 GreedySelecter(int n, Elemtype b [], Elemtype e[], boolx[]) x[1]?TRUE Int j?1 for i?2 to n do if b[i]=e[j] then { x[i] ?true j?i; } else { x[i]?false;} 14 例:设待安排的11个活动的开始时间和结束时间按结束时间的非减序排列如下: 算法greedySelector 的计算过程如左图所示。图中每行相应于算法的一次迭代。阴影长条表示的活动是已选入集合A的活动,而空白长条表示的活动是当前正在检查相容性的活动。 假设x是活动安排问题的一个最优解,并且选人x中的活动也是按照其结束的时间非减序排列的,设x中的第一个活动是i 当i=1时,x活动就是以贪心选择开始的最优解 如果i1,那么设一个新解x1=x-{i} ∪{1} X2=x1-{1} 假设此子问题中可以找到另一个解y1,它比x2包含更多的活动,那么将活动1加到y1后就得到整个问题的一个最优解,与假设x是一个最优解想矛盾。 5.2 背包问题 已知一个可容纳重量为C的背包以及n种物品,其中第i件物品的重量为wi,每件物品的效益是pi(pi0).假设将第i件物品的一部分yi(0=yi=1)放入背包, 则得到的效益是piyi 背包问题: 与0-1背包问题类似,所不同的是在选择物品i装入背包时,可以选择物品i的一部分,而不一定要全部装入背包,1≤i≤n。 Knapsack(ElemtypeW p[n], Elemtype w[n], float y[n], ElemtypeW C, int n) 1 for i?1 to n 2 do y[i]?0; 3 cu?C; 4 for i?1 to n 5 do { 6 if w[i]cu break; 7 then y[i]?1; 8 cu?cu-w[i]; 9 } 10 if i=n 11 then y[i]?cu/w[i] 设y[n]是Knapsack算法得出的向量解 1 如果任意的yi=1,那么这个解肯定是问题的最优解 2 否则,设j是yi1的最小下标。 可知1=ij 时, yi=1 ji=n时,yi=0; i=j时, 0=yi1 3 如果y[n]不是问题的最优解,则肯定存在一个可行解

您可能关注的文档

文档评论(0)

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

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

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档