ImageVerifierCode 换一换
格式:PPTX , 页数:59 ,大小:380.07KB ,
资源ID:2843614      下载积分:6 金币
验证码下载
登录下载
邮箱/手机:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/2843614.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
声明  |  会员权益     获赠5币     写作写作

1、填表:    下载求助     索取发票    退款申请
2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精****】。
6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
7、本文档遇到问题,请及时私信或留言给本站上传会员【精****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

注意事项

本文(计算机算法设计和分析第版王晓东编著电子教案省公共课一等奖全国赛课获奖课件.pptx)为本站上传会员【精****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

计算机算法设计和分析第版王晓东编著电子教案省公共课一等奖全国赛课获奖课件.pptx

1、第4章 贪心算法1第1页学习关键点学习关键点了解贪心算法概念。掌握贪心算法基本要素(1)最优子结构性质(2)贪心选择性质了解贪心算法与动态规划算法差异了解贪心算法普通理论经过应用范例学习贪心设计策略。(1)活动安排问题;(2)最优装载问题;(3)哈夫曼编码;(4)单源最短路径;(5)最小生成树;(6)多机调度问题。2第2页 顾名思义,贪心算法总是作出在当前看来最好选择。也就是说贪心算法并不从整体最优考虑,它所作出选择只是在某种意义上局部最优局部最优选择。当然,希望贪心算法得到最终止果也是整体最优。即使贪心算法不能对全部问题都得到整体最优解,但对许多问题它能产生整体最优解。如单源最短路经问题,最

2、小生成树问题等。在一些情况下,即使贪心算法不能得到整体最优解,其最终止果却是最优解很好近似。3第3页4.1 活动安排问题 活动安排问题就是要在所给活动集合中选出最大相容活动子集合,是能够用贪心算法有效求解很好例子。该问题要求高效地安排一系列争用某一公共资源活动。贪心算法提供了一个简单、漂亮方法使得尽可能多活动能兼容地使用公共资源。4第4页4.1 活动安排问题 设有n个活动集合E=1,2,n,其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源起始时间si和一个结束时间fi,且si fi。假如选择了活动i,则它在半开时间区间si

3、,fi)内占用资源。若区间si,fi)与区间sj,fj)不相交,则称活动i与活动j是相容。也就是说,当sifj或sjfi时,活动i与活动j相容。5第5页4.1 活动安排问题ntemplatenvoid GreedySelector(int n,Type s,Type f,bool A)nn A1=true;n int j=1;n for(int i=2;i=fj)Ai=true;j=i;n else Ai=false;n n下面给出解活动安排问题贪心算法GreedySelectorGreedySelector:各活动起始时间和结束各活动起始时间和结束时间存放于数组时间存放于数组s s和和f f

4、中中且按结束时间非减序排且按结束时间非减序排列列 6第6页4.1 活动安排问题 因为输入活动以其完成时间非减序非减序排列,所以算法greedySelectorgreedySelector每次总是选择含有最早完成含有最早完成时间时间相容活动加入集合A中。直观上,按这种方法选择相容活动为未安排活动留下尽可能多时间。也就是说,该算法贪心选择意义是使剩下可安排使剩下可安排时间段极大化时间段极大化,方便安排尽可能多相容活动。算法greedySelectorgreedySelector效率极高。当输入活动已按结束时间非减序排列,算法只需O(n)O(n)时间安排n个活动,使最多活动能相容地使用公共资源。假如

5、所给出活动未按非减序排列,能够用O(nlogn)O(nlogn)时间重排。7第7页4.1 活动安排问题 例:例:设待安排11个活动开始时间和结束时间按结束时间非减序排列以下:i1234567891011Si130535688212fi45678910 11 12 13 148第8页4.1 活动安排问题 算法算法greedySelector greedySelector 计算过程计算过程如左图所表示。图中每行对应于算法一次迭代。阴影长条表示活动是已选入集合A活动,而空白长条表示活动是当前正在检验相容性活动。9第9页4.1 活动安排问题 若被检验活动i开始时间Si小于最近选择活动j结束时间fi,则

6、不选择活动i,不然选择活动i加入集合A中。贪心算法并不总能求得问题整体最优解整体最优解。但对于活动安排问题,贪心算法greedySelector却总能求得整体最优解,即它最终所确定相容活动集合A规模最大。这个结论能够用数学归纳法证实。10第10页4.2 贪心算法基本要素 本节着重讨论能够用贪心算法求解问题普通特征。对于一个详细问题,怎么知道是否可用贪心算法解此问题,以及能否得到问题最优解呢?这个问题极难给予必定回答。不过,从许多能够用贪心算法求解问题中看到这类问题普通含有2个主要性质:贪心选择性质贪心选择性质和最优子最优子结构性质结构性质。11第11页4.2 贪心算法基本要素1 1、贪心选择性

7、质、贪心选择性质 所谓贪心选择性质贪心选择性质是指所求问题整体最优解整体最优解能够经过一系列局部最优局部最优选择,即贪心选择来到达。这是贪心算法可行第一个基本要素,也是贪心算法与动态规划算法主要区分。动态规划算法通常以自底向上自底向上方式解各子问题,而贪心算法则通常以自顶向下自顶向下方式进行,以迭代方式作出相继贪心选择,每作一次贪心选择就将所求问题简化为规模更小子问题。对于一个详细问题,要确定它是否含有贪心选择性质,必须证实每一步所作贪心选择最终造成问题整体最优解。12第12页4.2 贪心算法基本要素 当一个问题最优解包含其子问题最优解时,称此问题含有最优子结构性质最优子结构性质。问题最优子结

8、构性质是该问题可用动态规划算法或贪心算法求解关键特征。2 2、最优子结构性质、最优子结构性质13第13页4.2 贪心算法基本要素 贪心算法和动态规划算法都要求问题含有最优子结构性质,这是2类算法一个共同点。不过,对于含有最优子结构最优子结构问题应该选取贪心算法还是动态规划算法求解?是否能用动态规划算法求解问题也能用贪心算法求解?下面研究2个经典组合优化问题组合优化问题,并以此说明贪心算法与动态规划算法主要差异。3、贪心算法与动态规划算法差异14第14页4.2 贪心算法基本要素n0-10-1背包问题:背包问题:给定n种物品和一个背包。物品i重量是Wi,其价值为Vi,背包容量为C。应怎样选择装入背

9、包物品,使得装入背包中物品总价值最大?在选择装入背包物品时,对每种物品在选择装入背包物品时,对每种物品i i只有只有2 2种选择,即装种选择,即装入背包或不装入背包。不能将物品入背包或不装入背包。不能将物品i i装入背包屡次,也不能只装装入背包屡次,也不能只装入部分物品入部分物品i i。15第15页4.2 贪心算法基本要素n背包问题:背包问题:与0-1背包问题类似,所不一样是在选择物品i装入背包时,能够选择物品能够选择物品i i一部分一部分,而不一定要全部装入背包,1in。这2类问题都含有最优子结构最优子结构性质,极为相同,但背包问题能够用贪心算法求解,而0-1背包问题却不能用贪心算法求解。1

10、6第16页4.2 贪心算法基本要素 首先计算每种物品单位重量价值Vi/Wi,然后,依贪心选择策略,将尽可能多单位重量价值最高单位重量价值最高物品装入背包。若将这种物品全部装入背包后,背包内物品总重量未超出C,则选择单位重量价值次高物品并尽可能多地装入背包。依此策略一直地进行下去,直到背包装满为止。详细算法可描述以下页:用贪心算法解背包问题基本步骤:17第17页4.2 贪心算法基本要素nvoid Knapsack(int n,float M,float v,float w,float x)nn Sort(n,v,w);n int i;n for(i=1;i=n;i+)xi=0;n float c

11、=M;n for(i=1;ic)break;n xi=1;n c-=wi;n n if(i=n)xi=c/wi;n 算法算法knapsackknapsack主主要计算时间在于将各要计算时间在于将各种物品依其单位重量种物品依其单位重量价值从大到小排序。价值从大到小排序。所以,算法计算时间所以,算法计算时间上界为上界为O O(nlognnlogn)。)。为了证实算法正确性,为了证实算法正确性,还必须证实背包问题还必须证实背包问题含有贪心选择性质含有贪心选择性质。18第18页4.2 贪心算法基本要素 对于0-10-1背包问题背包问题,贪心选择之所以不能得到最优解是因为在这种情况下,它无法确保最终能将

12、背包装满,部分闲置背包空间使每千克背包空间价值降低了。实际上,在考虑0-1背包问题时,应比较选择该物品和不选择该物品所造成最终方案,然后再作出最好选择。由此就导出许多相互重合子问题。这正是该问题可用动态规划算法动态规划算法求解另一主要特征。实际上也是如此,动态规划算法确实能够有效地解0-1背包问题。19第19页4.3 最优装载 有一批集装箱要装上一艘载重量为c轮船。其中集装箱i重量为Wi。最优装载问题要求确定在装载体积不受限制情况下,将尽可能多集装箱装上轮船。1 1、算法描述、算法描述最优装载问题可用贪心算法求解。采取重量最轻者先装贪心选择策略,可产生最优装载问题最优解。详细算法描述以下页。2

13、0第20页4.3 最优装载ntemplatenvoid Loading(int x,Type w,Type c,int n)nn int*t=new int n+1;n Sort(w,t,n);n for(int i=1;i=n;i+)xi=0;n for(int i=1;i=n&wti=c;i+)xti=1;c-=wti;n21第21页4.3 最优装载2 2、贪心选择性质、贪心选择性质 能够证实最优装载问题含有贪心选择性质。3 3、最优子结构性质、最优子结构性质最优装载问题含有最优子结构性质。由最优装载问题贪心选择性质和最优子结构性质,轻易证实算法loadingloading正确性。算法lo

14、adingloading主要计算量在于将集装箱依其重量从小到大排序,故算法所需计算时间为 O(nlogn)O(nlogn)。22第22页4.4 哈夫曼编码哈夫曼编码哈夫曼编码是广泛地用于数据文件压缩十分有效编码方法。其压缩率通常在20%90%之间。哈夫曼编码算法用字符在文件中出现频率表来建立一个用0,1串表示各字符最优表示方式。给出现频率高字符较短编码,出现频率较低字符以较长编码,能够大大缩短总码长。1、前缀码对每一个字符要求一个0,1串作为其代码,并要求任一字符代码都不是其它字符代码前缀。这种编码称为前缀码前缀码。23第23页4.4 哈夫曼编码 编码前缀性质能够使译码方法非常简单。表示最优前

15、缀码最优前缀码二叉树总是一棵完全二叉树完全二叉树,即树中任一结点都有2个儿子结点。平均码长平均码长定义为:使平均码长到达最小前缀码编码方案称为给定编码字符集C最优前缀码最优前缀码。24第24页4.4 哈夫曼编码2 2、结构哈夫曼编码、结构哈夫曼编码哈夫曼提出结构最优前缀码贪心算法,由此产生编码方案称为哈夫曼编码哈夫曼编码。哈夫曼算法以自底向上方式结构表示最优前缀码二叉树T。算法以|C|个叶结点开始,执行|C|1次“合并”运算后产生最终所要求树T。25第25页4.4 哈夫曼编码 在书上给出算法huffmanTree中,编码字符集中每一字符c频率是f(c)。以以f f为键值优先队列为键值优先队列Q

16、 Q用在贪心选贪心选择择时有效地确定算法当前要合并2棵含有最小频率树。一旦2棵含有最小频率树合并后,产生一棵新树,其频率为合并2棵树频率之和,并将新树插入优先队列Q。经过n1次合并后,优先队列中只剩下一棵树,即所要求树T。算法huffmanTree用最小堆实现优先队列Q。初始化优先队列需要O(n)计算时间,因为最小堆removeMin和put运算均需O(logn)时间,n1次合并总共需要O(nlogn)计算时间。所以,关于n个字符哈夫曼算法计计算时间算时间为O(nlogn)。26第26页4.4 哈夫曼编码3 3、哈夫曼算法正确性、哈夫曼算法正确性要证实哈夫曼算法正确性,只要证实最优前缀码问题含

17、有贪心选择性质贪心选择性质和最优子结构性质最优子结构性质。(1)贪心选择性质(2)最优子结构性质27第27页4.5 单源最短路径给定带权有向图G=(V,E),其中每条边权是非负实数。另外,还给定V中一个顶点,称为源源。现在要计算从源到全部其它各顶点最短路长度最短路长度。这里路长度是指路上各边权之和。这个问题通常称为单源最短路径单源最短路径问题问题。1、算法基本思想Dijkstra算法是解单源最短路径问题贪心算法。28第28页4.5 单源最短路径其基本思想基本思想是,设置顶点集合S并不停地作贪心选贪心选择择来扩充这个集合。一个顶点属于集合S当且仅当从源到该顶点最短路径长度已知。初始时,S中仅含有

18、源。设u是G某一个顶点,把从源到u且中间只经过S中顶点路称为从源到u特殊路径,并用数组dist统计当前每个顶点所对应最短特殊路径长度。Dijkstra算法每次从V-S中取出含有最短特殊路长度顶点u,将u添加到S中,同时对数组dist作必要修改。一旦S包含了全部V中顶点,dist就统计了从源到全部其它顶点之间最短路径长度。29第29页4.5 单源最短路径比如比如,对右图中有向图,应用Dijkstra算法计算从源顶点1到其它顶点间最短路径过程列在下页表中。30第30页4.5 单源最短路径迭代迭代S Su udist2dist2 dist3dist3 dist4dist4 dist5dist5 初始

19、初始1-10maxint301001 11,221060301002 21,2,44105030903 31,2,4,33105030604 41,2,4,3,5510503060Dijkstra算法迭代过程:31第31页4.5 单源最短路径2、算法正确性和计算复杂性(1)贪心选择性质(2)最优子结构性质(3)计算复杂性对于含有n个顶点和e条边带权有向图,假如用带权邻接矩阵表示这个图,那么Dijkstra算法主循环体需要 时间。这个循环需要执行n-1次,所以完成循环需要 时间。算法其余部分所需要时间不超出 。32第32页4.6 最小生成树 设G=(V,E)是无向连通带权图,即一个网络网络。E中

20、每条边(v,w)权为cvw。假如G子图G是一棵包含G全部顶点树,则称G为G生成树。生成树上各边权总和称为该生成树花费花费。在G全部生成树中,花费最小生成树称为G最小生成树最小生成树。网络最小生成树在实际中有广泛应用。比如比如,在设计通信网络时,用图顶点表示城市,用边(v,w)权cvw表示建立城市v和城市w之间通信线路所需费用,则最小生成树就给出了建立通信网络最经济方案。33第33页4.6 最小生成树1、最小生成树性质用贪心算法设计策略能够设计出结构最小生成树有效算法。本节介绍结构最小生成树PrimPrim算法算法和KruskalKruskal算法算法都能够看作是应用贪心算法设计策略例子。尽管这

21、2个算法做贪心选择方式不一样,它们都利用了下面最小生成树性质最小生成树性质:设G=(V,E)是连通带权图,U是V真子集。假如(u,v)E,且uU,vV-U,且在全部这么边中,(u,v)权cuv最小,那么一定存在G一棵最小生成树,它以(u,v)为其中一条边。这个性质有时也称为MSTMST性性质质。34第34页4.6 最小生成树2 2、PrimPrim算法算法 设G=(V,E)是连通带权图,V=1,2,n。结构G最小生成树Prim算法基本思想基本思想是:首先置S=1,然后,只要S是V真子集,就作以下贪心选择贪心选择:选取满足条件iS,jV-S,且cij最小边,将顶点j添加到S中。这个过程一直进行到

22、S=V时为止。在这个过程中选取到全部边恰好组成G一棵最小生最小生成树成树。35第35页4.6 最小生成树利用最小生成树性质和数学归纳法轻易证实,上述算法中边集合边集合T T一直包一直包含含G G某棵最小生成树中边某棵最小生成树中边。所以,在算法结束时,T中全部边组成G一棵最小生成树。比如比如,对于右图中带权图,按PrimPrim算法算法选取边过程以下页图所表示。36第36页4.6 最小生成树37第37页4.6 最小生成树在上述Prim算法中,还应该考虑怎样有效地找出怎样有效地找出满足条件满足条件i i S,jS,j V-SV-S,且权,且权cijcij最小边最小边(i,j)(i,j)。实现这个

23、目标较简单方法是设置2个数组closest和lowcost。在Prim算法执行过程中,先找出V-S中使lowcost值最小顶点j,然后依据数组closest选取边(j,closestj),最终将j添加到S中,并对closest和lowcost作必要修改。用这个方法实现Prim算法所需计算时间计算时间为 38第38页4.6 最小生成树3 3、KruskalKruskal算法算法Kruskal算法结构G最小生成树基本思想基本思想是,首先将Gn个顶点看成n个孤立连通分支。将全部边按权从小到大排序。然后从第一条边开始,依边权递增次序查看每一条边,并按下述方法连接2个不一样连通分支:当查看到第k条边(v

24、,w)时,假如端点v和w分别是当前2个不一样连通分支T1和T2中顶点时,就用边(v,w)将T1和T2连接成一个连通分支,然后继续查看第k+1条边;假如端点v和w在当前同一个连通分支中,就直接再查看第k+1条边。这个过程一直进行到只剩下一个连通分支时为止。39第39页4.6 最小生成树比如,比如,对前面连通带权图,按Kruskal算法次序得到最小生成树上边以下列图所表示。40第40页4.6 最小生成树关于集合一些基本运算集合一些基本运算可用于实现Kruskal算法。按权递增次序查看等价于对优先队列优先队列执行removeMinremoveMin运算。能够用堆堆实现这个优先队列。对一个由连通分支组

25、成集合不停进行修改,需要用到抽象数据类型并查集并查集UnionFindUnionFind所支持基本运算。当图边数为e时,Kruskal算法所需计算时间计算时间是 。当 时,Kruskal算法比Prim算法差,但当 时,Kruskal算法却比Prim算法好得多。41第41页4.7 多机调度问题多机调度问题多机调度问题要求给出一个作业调度方案,使所给n个作业在尽可能短时间内由m台机器加工处理完成。这个问题是NPNP完全问题完全问题,到当前为止还没有有效解法。对于这一类问题,用贪心选择策略贪心选择策略有时能够设计出很好近似算法。约定,每个作业均可在任何一台机器上加工处理,但未约定,每个作业均可在任何

26、一台机器上加工处理,但未完工前不允许中止处理。作业不能拆分成更小子作业。完工前不允许中止处理。作业不能拆分成更小子作业。42第42页4.7 多机调度问题采取最优点理时间作业优先最优点理时间作业优先贪心选择策略能够设计出解多机调度问题很好近似算法。按此策略,当 时,只要将机器i0,ti时间区间分配给作业i即可,算法只需要O(1)时间。当 时,首先将n个作业依其所需处理时间从大到小排序。然后依此次序将作业分配给空闲处理机。算法所需计算时间为O(nlogn)。43第43页4.7 多机调度问题比如,比如,设7个独立作业1,2,3,4,5,6,7由3台机器M1,M2和M3加工处理。各作业所需处理时间分别

27、为2,14,4,16,6,5,3。按算法greedygreedy产生作业调度以下列图所表示,所需加工时间为17。44第44页4.8 贪心算法理论基础借助于拟阵拟阵工具,可建立关于贪心算法较普通理论。这个理论对确定何时使用贪心算法确定何时使用贪心算法能够得到问题整体最优解十分有用。1 1、拟阵、拟阵拟阵M定义为满足下面3个条件有序对(S,I):(1)S是非空有限集。(2)I是S一类含有遗传性质独立子集族,即若BI,则B是S独立子集,且B任意子集也都是S独立子集。空集必为I组员。(3)I满足交换性质,即若AI,BI且|A|0,则称拟阵M为带权拟阵带权拟阵。依此权函数,S任一子集A权定义为 。2 2

28、、关于带权拟阵贪心算法、关于带权拟阵贪心算法许多能够用贪心算法求解问题能够表示为求带权拟阵最大权独立子集问题最大权独立子集问题。47第47页4.8 贪心算法理论基础给定带权拟阵M=(S,I),确定S独立子集AI使得W(A)到达最大。这种使W(A)最大独立子集A称为拟阵M最优子集最优子集。因为S中任一元素x权W(x)是正,所以,最最优子集也一定是极大独立子集优子集也一定是极大独立子集。比如,比如,在最小生成树问题能够表示为确定带权拟阵 最优子集问题。求带权拟阵最优子集A算法可用于解最小生成树问题。下面给出求带权拟阵最优子集带权拟阵最优子集贪心算法。该算法以含有正权函数W带权拟阵M=(S,I)作为

29、输入,经计算后输出M最优子集A。48第48页4.8 贪心算法理论基础nSet greedygreedy(M,W)nA=;n 将S中元素依权值W(大者优先)组成优先队列;n while(S!=)n S.removeMax(x);n if(AxI)A=Ax;n n return An49第49页4.8 贪心算法理论基础算法greedygreedy计算时间复杂性为 。引理引理4.24.2(拟阵贪心选择性质拟阵贪心选择性质)设M=(S,I)是含有权函数W带权拟阵,且S中元素依权值从大到小排列。又设x S是S中第一个使得x是独立子集元素,则存在S最优子集A使得x A。算法greedygreedy在以贪心

30、选择结构最优子集A时,首次选入集合A中元素x是单元素独立集中含有最大权元素。此时可能已经舍弃了S中部分元素。能够证实这些被舍弃元素不可能用于结构最优子集。50第50页4.8 贪心算法理论基础引理引理4.34.3:设M=(S,I)是拟阵。若S中元素x不是空集可扩展元素,则x也不可能是S中任一独立子集A可扩展元素。引理引理4.4(4.4(拟阵最优子结构性质拟阵最优子结构性质)设x是求带权拟阵M(S,I)最优子集贪心算法greedygreedy所选择S中第一个元素。那么,原问题可简化为求带权拟阵M=(S,I)最优子集最优子集问题,其中:S=y|y S且x,y II=B|B S-x且Bx IM权函数是

31、M权函数在S上限制(称M为M关于元素x收缩收缩)。51第51页4.8 贪心算法理论基础定理定理4.5(4.5(带权拟阵贪心算法正确性带权拟阵贪心算法正确性)设M(S,I)是含有权函数W带权拟阵,算法greedy返回M最优子集。3 3、任务时间表问题、任务时间表问题给定一个单位时间任务单位时间任务有限集S。关于S一个时时间表间表用于描述S中单位时间任务执行次序。时间表中第1个任务从时间0开始执行直至时间1结束,第2个任务从时间1开始执行至时间2结束,第n个任务从时间n-1开始执行直至时间n结束。52第52页4.8 贪心算法理论基础含有截止时间截止时间和误时处罚误时处罚单位时间任务时间表问题可描述

32、以下。(1)n个单位时间任务集合S=1,2,n;(2)任务i截止时间 ,1in,1 n,即要求任务i在时间 之前结束;(3)任务i误时处罚 ,1in,即任务i未在时间 之前结束将招致 处罚;若按时完成则无处罚。任务时间表问题任务时间表问题要求确定S一个时间表(最优时间表)使得总误时处罚到达最小。53第53页4.8 贪心算法理论基础这个问题看上去很复杂,然而借助于拟阵拟阵,能够用带权拟阵贪心算法带权拟阵贪心算法有效求解。对于一个给定S时间表,在截止时间之前完成任务称为及时任务及时任务,在截止时间之后完成任务称为误时任误时任务务。S任一时间表能够调整成及时优先形式及时优先形式,即其中全部及时任务先

33、于误时任务,而不影响原时间表中各任务及时或误时性质。类似地,还可将S任一时间表调整成为规范形式规范形式,其中及时任务先于误时任务,且及时任务依其截止时间非减序排列。54第54页4.8 贪心算法理论基础首先可将时间表调整为及时优先形式,然后再深入调整及时任务次序。任务时间表问题等价于等价于确定最优时间表中及时任及时任务子集务子集A A问题。一旦确定了及时任务子集A,将A中各任务依其截止时间非减序列出,然后再以任意次序列出误时任务,即S-A中各任务,由此产生S一个规范最优时间表。对时间t=1,2,n,设设 (A)是任务子集A中全部截止时间是t或更早任务数。考查任务子集A独立性。55第55页4.8

34、贪心算法理论基础引理引理4.64.6:对于S任一任务子集A,下面各命题是等价。(1)任务子集A是独立子集。(2)对于t=1,2,n,(A)t。(3)若A中任务依其截止时间非减序排列,则A中全部任务都是及时。任务时间表问题任务时间表问题要求使总误时处罚到达最小,这等价于使任务时间表中及时任务处罚值之和到达最大。下面定理定理表明可用带权拟阵贪心算法解任务时间表问题。56第56页4.8 贪心算法理论基础定理定理4.74.7:设S是带有截止时间单位时间任务集,I是S全部独立任务子集组成集合。则有序对(S,I)是拟阵。由定理定理4.54.5可知,用带权拟阵贪心算法能够求得最大权(处罚)独立任务子集A,以A作为最优时间表中及时任务子集,轻易结构最优时间表。任务时间表问题贪心算法计算时间复杂性计算时间复杂性是 。其中f(n)是用于检测任务子集A独立性所需时间。用引理4.6中性质(2)轻易设计一个 时间算法来检测任务子集独立性。所以,整个算法计算时计算时间间为 。详细算法greedyJobgreedyJob可描述如P130。57第57页4.8 贪心算法理论基础用抽象数据类型并查集UnionFindUnionFind可对上述算法作深入改进。假如不计预处理时间,改进后算法fasterJobfasterJob所需计算时间计算时间为 。58第58页59第59页

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服