第4章贪心算法 - 算法设计与分析.pdf

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

第4章 贪心算法 1 学习要点:  理解贪心算法的概念。  掌握贪心算法的基本要素  (1)最优子结构性质  (2 )贪心选择性质  理解贪心算法与动态规划算法的差异  理解贪心算法的一般理论  通过应用范例学习贪心设计策略。  (1)活动安排问题;  (2 )哈夫曼编码;  (3 )单源最短路径;  (4 )最小生成树;  (5 )多机调度问题。 2 顾名思义,贪心算法总是作出在当前看来最好 的选择。也就是说贪心算法并不从整体最优考虑, 它所作出的选择只是在某种意义上的局部最优选 择。当然,希望贪心算法得到的最终结果也是整 体最优的。虽然贪心算法不能对所有问题都得到 整体最优解,但对许多问题它能产生整体最优解。 如单源最短路经问题,最小生成树问题等。在一 些情况下,即使贪心算法不能得到整体最优解, 其最终结果却是最优解的很好近似。 3 例:用贪心法求解找零钱问题。 假设有面值为5元、2元、1元、5角、2角、1角的货 币,需要找给顾客4元6角现金,为使付出的货币的 数量最少,首先选出1张面值不超过4元6角的最大 面值的货币,即2元,再选出1张面值不超过2元6角 的最大面值的货币,即2元,再选出1张面值不超过 6角的最大面值的货币,即5角,再选出1张面值不 超过1角的最大面值的货币,即1角,总共付出4张 货币。 4 在找零钱问题每一步的贪心选择中,在不超 过应找零钱金额的条件下,只选择面值最大的货 币,而不去考虑在后面看来这种选择是否合理, 而且它还不会改变决定:一旦选出了一张货币, 就永远选定。找零钱问题的贪心选择策略是尽可 能使付出的货币最快地满足支付要求,其目的是 使付出的货币张数最慢地增加,这正体现了贪心 法的设计思想。 5 贪心法的求解过程 用贪心法求解问题应该考虑如下几个方面: (1)候选集合C :为了构造问题的解决方案,有一 个候选集合C作为问题的可能解,即问题的最终解 均取自于候选集合C 。例如,在找零钱问题中,各 种面值的货币构成候选集合。 (2 )解集合S :随着贪心选择的进行,解集合S不 断扩展,直到构成一个满足问题的完整解。例如, 在找零钱问题中,已付出的货币构成解集合。 6 (3 )可行解函数solution :检查解集合S是否构成 问题的一个可行解。例如,在找零钱问题中,可行 解函数是已付出的货币金额恰好等于应找零钱。 (4 )选择函数select :即贪心策略,这是贪心法 的关键,它指出哪个候选对象最有希望构成问题的 解,选择函数通常和目标函数有关。例如,在找零 钱问题中,贪心策略就是在候选集合中选择面值最 大的货币。 (5 )约束函数constraint :检查解集合中加入一个 候选对象是否满足约束条件。例如,在找零钱问题 中,约束函数是每一步选择的货币和已付出的货币 相加不超过应找零钱。 7 贪心算法的一般框架 Greedy(C) //C是问题的输入集合即候选集合 { S={ }; //初始解集合为空集 while (not solution(S)) /

文档评论(0)

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

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

1亿VIP精品文档

相关文档