- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章 贪心算法 学习要点 理解贪心算法的概念。 掌握贪心算法的基本要素 (1)最优子结构性质 (2)贪心选择性质 理解贪心算法与动态规划算法的差异 理解贪心算法的一般理论 通过应用范例学习贪心设计策略。 (1)活动安排问题; (2)最优装载问题; (3)哈夫曼编码; (4)单源最短路径; (5)最小生成树; (6)多机调度问题。 一个找硬币的例子 假设有四种硬币:二角五分、一角、五分和一分。现要找给顾客六角三分。 显然,会拿出2个二角五分、1个一角和3个一分的硬币交给顾客。 贪心方法思路:首先选出一个面值不超过六角三分的最大硬币,即二角五分,然后在剩余数中再选最大面值的硬币,依此类推,得到其解。 若硬币面值改为:一角一分、五分和一分,而要找给顾客一角五分钱。 用贪心算法将找给1个一角一分和4个一分的硬币。然而,3个五分硬币是最好的找法。 此时,贪心算法没有得到整体最优解。但通常可得到最优解的很好近似。 贪心算法总是作出在当前看来最好的选择。 贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。 希望贪心算法得到的最终结果也是整体最优的。 虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。 在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。 贪心算法的一般框架 GreedyAlgorithm (parameters) { 初始化; 重复执行以下的操作: 选择当前可以选择的最优解; 将所选择的当前解加入到问题的解中去; 直至满足问题求解的结束条件。 } 4.1 活动安排问题 活动安排问题: 在所给的活动集合中选出最大的相容活动子集合。 该问题要求高效地安排一系列争用某一公共资源的活动。 贪心算法使得尽可能多的活动能兼容地使用公共资源。 活动安排问题的描述 用数组A分别存放所有活动的起始时间、结束时间以及是否予以安排的标记。 某项活动结束时间愈早,安排其它活动的剩余区间愈大。 贪心策略为尽量选择结束时间早的活动来安排。 为此,将数组中的活动按结束时间的非减顺序排序,即f1≤f2≤…≤fn。 显然排序需要的时间为O(nlogn)。 templateclass Type void GreedySelector(int n, Type s[ ], Type f[ ], bool A[ ]) { A[1]=true; int j=1; for (int i=2;i=n;i++) { if (s[i]=f[j]) { A[i]=true; j=i; } else A[i]=false; } } 由于输入的活动以其完成时间的非减序排列,所以算法greedySelector每次总是选择具有最早完成时间的相容活动加入集合A中。 算法贪心选择的意义是使剩余的可安排时间段极大化,以便安排尽可能多的相容活动。 当输入的活动已按结束时间的非减序排列,算法只需O(n)的时间安排n个活动,使最多的活动能相容地使用公共资源。 如果所给出的活动未按非减序排列,可以用O(nlogn)的时间重排。 例:设待安排的11个活动的开始时间和结束时间按结束时间的非减序排列如下: 4.1 活动安排问题 算法greedySelector 的计算过程如左图所示。图中每行相应于算法的一次迭代。阴影长条表示的活动是已选入集合A的活动,而空白长条表示的活动是当前正在检查相容性的活动。 若被检查的活动i的开始时间si小于最近选择的活动j的结束时间fi,则不选择活动i,否则选择活动i加入集合A中。 贪心算法并不总能求得问题的整体最优解。但对于活动安排问题,greedySelector却总能求得的整体最优解,即它最终所确定的相容活动集合A的规模最大。这个结论可以用数学归纳法证明。 贪心算法也能获得最优解 设活动集合E={1, 2, …, n}已经按结束时间的非减顺序排列,活动1具有最早结束时间。 首先,必定有一个最优解包含活动1。 4.2 贪心算法的基本要素 考察用贪心算法求解的问题的一般特征 对于一个具体问题,怎么知道是否可用贪心算法解此问题,以及能否得到问题的最优解呢? 这个问题很难给予肯定的回答。 从许多用贪心算法求解的问题中看到,这类问题一般具有2个重要性质:贪心选择性质和最优子结构性质。 4.2.1、贪心选择性质 当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。 问题的最优子结构性质是该问题可用动态规划算法或贪心算法求解的关键特征。 共同点:贪心算法和动态规划算法都要求问题具有最优子结构性质。 具有最优子结构的问题应该选用贪心算法,还是动
您可能关注的文档
最近下载
- 2024广铁集团校招机考题库.pdf
- 职业选择与生涯发展(同名27124).doc VIP
- 新HSK考试5级试题样卷.pdf VIP
- 科学四年级上册教案.pdf VIP
- 2012年一级注册计量师法律法规强化题25.pdf VIP
- HSK标准教程5上 课件 L16.ppt VIP
- 部编一年级语文下册《5.动物儿歌》(完整版).ppt VIP
- 16 体重与节食PPT_HSK5标准教程上.pptx VIP
- 20G520-1~2(2020年合订本) 钢吊车梁(6m~9m).docx VIP
- Unit 6 There are four seasons in a year. Lesson 35 - 36(教学设计)-2024-2025学年人教精通版英语六年级上册.docx
原创力文档


文档评论(0)