- 1、本文档共57页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法分析与设计4-贪心法
贪心算法的基本思想 当一个问题具有最优子结构性质时,可用动态规划方法求解,但有时会有更简单有效的方法。 例如 贪心算法的基本思想 贪心算法的基本思想 经常性做法 贪心算法的基本思想 顾名思义,贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。 贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。 在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。 贪心算法的基本思想 贪心算法中,较大子问题的解恰好包含了较小子问题的解作为子集,这与动态规划算法设计中的优化原则本质上是一致的。 动态规划算法在某一步决定优化函数的最大或最小值时,需要考虑到它的所有子问题的优化函数值,然后从中选出最优的结果;贪心算法的每步判断时,不考虑子问题的计算结果,而是根据当时情况采取“只顾眼前”的贪心策略决定取舍。 贪心算法的设计要素 可以用贪心算法求解的问题一般具有2个重要的性质: 最优子结构性质。 贪心选择性质 贪心算法的设计要素 最优子结构性质 当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。问题的最优子结构性质是该问题可用动态规划算法或贪心算法求解的关键特征。 贪心算法的设计要素 贪心选择性质 贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法与动态规划算法的主要区别。 动态规划算法通常以自底向上的方式求解各子问题,而贪心算法则通常以自顶向下的方式进行,以迭代的方式作出相继的贪心选择,每作一次贪心选择就将所求问题简化为规模更小的子问题。 对于一个具体问题,要确定它是否具有贪心选择性质,必须证明每一步所作的贪心选择最终导致问题的整体最优解。 贪心法的正确性问题 针对具体问题不同,贪心策略的选择可能有多种,如何选择合适的贪心策略并证明该策略的正确性是贪心算法设计中的一个关键问题。 一般可以通过对算法步数的归纳或通过对问题规模的归纳来证明贪心法的正确性。 应用实例 活动安排问题 应用实例 活动安排问题—直觉贪心策略 应用实例 活动安排问题—直觉贪心策略分析 应用实例 活动安排问题—贪心策略正确性证明 应用实例 活动安排问题—贪心策略正确性证明 应用实例 活动安排问题—算法设计与分析 应用实例 活动安排问题—实例计算过程 应用实例 活动安排问题—实例计算过程 应用实例 0-1背包问题与背包问题 应用实例 0-1背包问题与背包问题 应用实例 背包问题的贪心算法 应用实例 背包问题的贪心算法 应用实例 最优装载问题—问题描述 应用实例 最优装载问题—贪心策略 应用实例 最优装载问题—贪心策略正确性证明 应用实例 最优前缀码问题 编码问题 定长编码 变长编码 应用实例 最优前缀码问题—实例分析 应用实例 最优前缀码问题 应用实例 最优前缀码问题—Huffman编码 应用实例 最优前缀码问题—Huffman算法 应用实例 最优前缀码问题—Huffman算法的正确性 贪心选择性质 最优子结构性质 应用实例 最小生成树问题 应用实例 最小生成树问题 应用实例 最小生成树问题—Prim算法 应用实例 最小生成树问题—Prim算法 应用实例 最小生成树问题—Prim算法 应用实例 最小生成树问题—Kruskal算法 应用实例 最小生成树问题—Kruskal算法 应用实例 最小生成树问题—Kruskal算法 应用实例 最小生成树问题—Kruskal算法 应用实例 单源最短路径问题 应用实例 单源最短路径问题—Dijkstra算法 应用实例 单源最短路径问题—Dijkstra算法 应用实例 单源最短路径问题—Dijkstra算法 应用实例 单源最短路径问题—Dijkstra算法 应用实例 单源最短路径问题—Dijkstra算法的正确性 贪心选择性质 最优子结构性质 应用实例 多机调度问题 应用实例 多机调度问题—贪心策略 应用实例 多机调度问题—实例 贪心算法得不到最优情况的处理 硬币找零问题 贪心算法得不到最优情况的处理 硬币找零问题—贪心策略 贪心算法得不到最优情况的处理 硬币找零问题—贪心策略 贪心算法得不到最优情况的处理 硬币找零问题—贪心策略 贪心算法的理论基础 Summary Discuss 设G =(V,E)是无向连通带权图,即一个网络。E中每条边(u,v)的权为w[u][v]。如果G的子图G’是一棵包含G的所有顶点的树,则称G’为G的生成树。生成树上各边权的总和称为该生成树的耗费。在G的所有生成树中,耗费最小的生成树称为G的最小生成树。 网络的最小生成树在实际中有广泛应用。 例如,在设计通信网络时,用图的顶点表示城市,用边(u,v)的权w[u][v]表示建立城市u和城
文档评论(0)