[2018年最新整理]5-贪婪算法.pptVIP

  1. 1、本文档共40页,可阅读全部内容。
  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文档。上传文档
查看更多
[2018年最新整理]5-贪婪算法

贪婪算法 离开了数据结构的世界,现在进入算法设计方法的世界。 从本章开始,我们来研究一些算法设计方法。虽然设计一个好的求解算法更像是一门艺术,而不像是技术,但仍然存在一些行之有效的能够用于解决许多问题的算法设计方法,你可以使用这些方法来设计算法,并观察这些算法是如何工作的。一般情况下,为了获得较好的性能,必须对算法进行细致的调整。 1 最优化问题 最优化问题(optimization problem ) 每个最优化问题都包含一组限制条件(constraint )和一个优化函数(optimization function ),符合限制条件的问题求解方案称为可行解(feasible solution ),使优化函数取得最佳值的可行解称为最优解(optimal solution )。 1 最优化问题 例1[装载问题] 有一艘大船准备用来装载货物。所有待装货物都装在货箱中且所有货箱的大小都一样,但货箱的重量都各不相同。设第i 个货箱的重量为w i (1 ≤i ≤n ),而货船的最大载重量为c ,我们的目的是在货船上装入最多的货物。 最优化问题进行描述:设存在一组变量x i ,其可能取值为0 或1 。如x i 为0 ,则货箱i 将不被装上船;如x i 为1 ,则货箱i 将被装上船。我们的目的是找到一组x i ,使它满足限制条件x1w1+x2w2+…+xnwn≤c且xi?{0,1} 。相应的优化函数是x1+x2+…+xn 。 满足限制条件的每一组x i 都是一个可行解,能使x1+x2+…+xn取得最大值的方案是最优解。 1 最优化问题 例2 [最小代价通讯网络]城市及城市之间所有可能的通信连接可被视作一个无向图,图的每条边都被赋予一个权值,权值表示建成由这条边所表示的通信连接所要付出的代价。包含图中所有顶点(城市)的连通子图都是一个可行解。设所有的权值都非负,则所有可能的可行解都可表示成无向图的一组生成树,而最优解是其中具有最小代价的生成树。 在这个问题中,需要选择一个无向图中的边集合的子集,这个子集必须满足如下限制条件: 所有的边构成一个生成树。而优化函数是子集中所有边的权值之和。 2 算法思想 在贪婪算法(greedy method)中采用逐步构造最优解的方法。在每个阶段,都作出一个看上去最优的决策(在一定的标准下)。决策一旦作出,就不可再更改。作出贪婪决策的依据称为贪婪准则(greedy criterion)。 2 算法思想 例3 [找零钱] 一个小孩买了价值少于1美元的糖,并将1美元的钱交给售货员。售货员希望用数目最少的硬币找给小孩。 假设提供了数目不限的面值为2 5美分、1 0美分、5美分、及1美分的硬币。 售货员分步骤组成要找的零钱数,每次加入一个硬币。选择硬币时所采用的贪婪准则如下:每一次选择应使零钱数尽量增大。为保证解法的可行性(即:所给的零钱等于要找的零钱数),所选择的硬币不应使零钱总数超过最终所需的数目。 2 算法思想 为使找回的零钱的硬币数最小,不考虑找零钱的所有各种方案,而是从最大面值的币种开始,按递减的顺序考虑各币种,先尽量用大面值的币种,只当不足大面值币种的金额才会去考虑下一种较小面值的币种。这就是在采用贪婪法。 这种方法在这里之所以总是最优,是因为银行对其发行的硬币种类和硬币面值的巧妙安排。 如果只有面值分别为1,5和11单位的硬币,而希望找回总额为15单位的硬币,按贪婪算法,应找1个11单位面值的硬币和4个1单位面值的硬币,共找回5个硬币。但最优的解答应是3个5单位面值的硬币。 3 应用-- 货箱装船 货箱装船问题:设有编号为0…n-1的n种物品,重量分别为w0…wn-1,船载重为c,如何装载,使船可以装载更多的货箱。 算法:采用贪婪算法船可以分步装载,每步装一个货箱,且需要考虑装载哪一个货箱。根据这种思想可利用如下贪婪准则:从剩下的货箱中,选择重量最小的货箱。这种选择次序可以保证所选的货箱总重量最小,从而可以装载更多的货箱。根据这种贪婪策略,首先选择最轻的货箱,然后选次轻的货箱,如此下去直到所有货箱均装上船或船上不能再容纳其他任何一个货箱。 货箱装船 #include iostream.h void IndirectSort(int w[], int t[], int n) {// Cluge to test when weights already in order. for (int i=1; i = n; i++) t[i] = i; } templateclass T void ContainerLoading(int x[], T w[], T c, int n) {// Greedy algorit

文档评论(0)

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

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

1亿VIP精品文档

相关文档