ch5 贪心算法.pdf

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ch5 贪心算法

78 第五章 贪心算法 §1.贪心算法基本思想 找零钱 假如售货员需要找给小孩 67 美分的零钱。现在,售货员手中只有 25 美分、10 美分、5 美分和 1 美分的硬币。在小孩的催促下,售货员想尽快将 钱找给小孩。她的做法是:先找不大于67美分的最大硬币25美分硬币,再找不 大于 67-25=42 美分的最大硬币 25 美分硬币,再找不大于 42-25=17 美分的 最大硬币 10 美分硬币,再找不大于 17-10=7 美分的最大硬币 5 美分硬币,最 后售货员再找出两个1美分的硬币。至此,售货员共找给小孩6枚硬币。售货员 的原则是拿尽可能少的硬币个数找给小孩。 从另一个角度看,如果售货员将捡出的硬币逐一放在手中,最后一起交给 小孩,那么售货员想使自己手中的钱数增加的尽量快些,所以每一次都尽可能地 捡面额大的硬币。 装载问题 有一艘大船用来装载货物。假设有n个货箱,它们的体积相同, 重量分别是w w , w , L ,货船的最大载重量是c。目标是在船上装更多个数的货 1 2 n 箱该怎样装?当然,最简单的作法是“捡重量轻的箱子先往上装”,这是一种贪 心的想法。如果用x 1表示装第 个货箱,而x 0 表示不装第 个货箱,则上 i i i i 述问题是解优化问题: 求x x , , x , L ,使得 1 2 n n max ∑xi (5.1.1) i 1 n 满足条件 ∑w x ≤c, x 0,1 (5.1.2) i i i i 1 贪心算法,顾名思义,是在决策中总是作出在当前看来是最好的选择。例 如找零钱问题中,售货员每捡一个硬币都想着使自己手中的钱尽快达到需要找钱 的总数。在装载问题中,每装一个货箱都想着在不超重的前提下让船装更多的箱 子。但是贪心方法并未考虑整体最优解,它所作出的选择只是在某种意义上的局 部最优选择。当然,在采用贪心算法时未必不希望结果是整体最优的。事实上, 有相当一部分问题,采用贪心算法能够达到整体最优,如前面的找零钱问题以及 后面将要讲到的单点源最短路径问题、最小生成树问题、工件排序问题等。为了 更好理解贪心算法,我们将装载问题稍加推广,考虑可分割的背包问题。 背包问题 已知容量为 n M 的背包和 件物品。第 件物品的重量为w ,价值 i i 79 是p 。因而将物品 的一部分x 放进背包即获得p x 的

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档