- 1、本文档共46页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法设计与分析 授课教师:王秋芬 办公地点:7307 Email: w_qiufen@163.com 第二章 贪心法 目录 概述 会场安排问题 单源最短路径问题 哈夫曼编码 最小生成树 教学目标 理解贪心法的概念 掌握贪心法的基本思想和要素 理解贪心法的正确性证明方法 通过对实例的学习,掌握贪心法的设计策略及解题步骤 学习贪心法的实际意义和学术价值 贪心法可以算得上是最接近人们日常思维的一种解题策略 简单、直接和高效 对范围相当广泛的许多实际问题它通常都能产生整体最优解,在一些情况下,即使采用贪心法不能得到整体最优解,但其最终结果却是最优解的很好近似解。 基于此,它在对NP完全问题的求解中发挥着越来越重要的作用。另外,近年来贪心法在各级各类信息学竞赛、ACM程序设计竞赛中经常出现。 贪心法的基本思想 基本思想 从问题的某一个初始解出发,在每一个阶段都根据贪心策略来做出当前最优的决策,逐步逼近给定的目标,尽可能快地求得更好的解。当达到算法中的某一步不能再继续前进时,算法终止。 得出的结论 每个阶段面临选择时, 贪心法都做出对眼前来讲是最有利的选择 选择一旦做出不可更改,即不允许回溯 根据贪心策略来逐步构造问题的解 举例 找零钱问题 (10元、5元、1元、5角、2角、1角、 )找零57.8元 背包问题 n=3,C=20,(w1,w2,w3)=(18,15,10),(v1,v2,v3)=(25,24,15) 0-1背包问题 竞争资源安排问题 4个班级争用教室A,尽可能满足更多班级的需要。 1班:8:00-12:00 上课 2班:8:30-10:30 讲座 3班:11:00-11:30 开会 4班:10:40-11:20 活动 贪心法的基本要素 最优子结构性质 一个问题的最优解一定包含其子问题的最优解 采用反证法证明 贪心选择性质 所求问题的整体最优解可以通过一系列局部最优的选择获得,即通过一系列的逐步局部最优选择使得最终的选择方案是全局最优的 贪心法的解题步骤 分解:将原问题分解为若干个相互独立的阶段。 解决:对于每个阶段依据贪心策略进行贪心选择,求出局部的最优解。 合并:将各个阶段的解合并为原问题的一个可行解。影响时间复杂性的因素 会场安排问题 问题描述 设有n个会议的集合C={1,2,…,n},其中每个会议都要求使用同一个资源(如会议室),而在同一时间内只能有一个会议使用该资源。每个会议i都有要求使用该资源的起始时间bi和结束时间ei,且bi ei 。如果选择了会议i使用会议室,则它在半开区间[bi, ei)内占用该资源。如果[bi, ei)与[bj , ej)不相交,则称会议i与会议j是相容的。会场安排问题要求在所给的会议集合中选出最大的相容活动子集,也即尽可能地选择更多的会议来使用资源。 贪心策略 选择最早开始时间且不与已安排会议重叠的会议 选择使用时间最短且不与已安排会议重叠的会议 选择具有最早结束时间且不与已安排会议重叠的会议 算法设计 步骤1:初始化。开始时间存B;结束时间存E中且按照结束时间的非减序排序,B相应调整;集合A存储解,会议i如果在集合A中,当且仅当A[i]=true; 步骤2:根据贪心策略,首令A[1]=true; 步骤3:依次扫描每一个会议,如果会议i的开始时间不小于最后一个选入A中的会议的结束时间,则将会议i加入A中;否则,放弃,继续检查下一个会议与A中会议的相容性。 单源最短路径问题 问题描述 给定一个有向带权图 G=(V,E),其中每条边的权是一个非负实数。另外,给定V中的一个顶点,称为源点。现在要计算从源点到所有其它各个顶点的最短路径长度,这里的路径长度是指路径上经过的所有边上的权值之和。 Dijkstra算法思想 按各个顶点与源点之间路径长度的递增次序,生成源点到各个顶点的最短路径的方法,即先求出长度最短的一条路径,再参照它求出长度次短的一条路径,依此类推,直到从源点到其它各个顶点的最短路径全部求出为止。 算法设计 u:源点。集合S中的顶点到源点的最短路径的长度已经确定,集合V-S中所包含的顶点到源点的最短路径的长度待定。 特殊路径:从源点出发只经过S中的点到达V-S中的点的路径。 贪心策略:选择特殊路径长度最短的路径,将其相连的V-S中的顶点加入到集合S中。 求解步骤 步骤1:设计合适的数据结构。带权邻接矩阵C,即如果 u, x E,令C[u][x]=u, x 的权值,否则,C[u][x]=无穷;采用数组dist来记录从源点到其它顶点的最短路径长度;采用数组p来记录最短路径; 步骤2:初始化。令集合S={u},对于集合V-S中的所有顶点x,设置dist[x]=C[u][x];如果顶点i与源点相邻,设置p[i]=u,否则p[i]=-1; 步骤
文档评论(0)