- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法设计与分析-13贪心算法
算法设计与分析 第十三章 贪心算法 贪心算法概念 活动选择问题(过程及分析) 贪心算法正确性证明 贪心算法的基本内容 贪心算法的理论基础 任务调度问题(过程及分析) 程序演示及说明 贪心算法的理论基础 1、矩阵胚 矩阵胚是贪心算法的理论基础,对绝大多数的问题,只要它具备了”矩阵胚”的结构,便可以用贪心算法求解.矩阵胚理论是一种能够确定贪心算法何时能够产生最优解的理论. 矩阵胚定义为满足以下3个条件的一个有序对M=(S,I);(1)S是一个有穷非空集合;(2)I是S的具有某种遗传性质的独立子集的全集;一个集合是具有遗传性质的独立集合是指:若一个集合具有某种性质,则其任意子集也具有该性质;(3)I满足交换性质,即若A∈I,B ∈I且|A||B|,则存在某一元素x ∈B-A,使得A∪{x} ∈I; 贪心算法的理论基础 定理1:如果G是一个无向图, SG定义为一个无向图的边集,IG定义为图中不含回路的边的集合的全体,即若A ∈IG,A中的边构成一个森林,则MG=(SG,IG)是个矩阵胚. 证明:(1) SG是一个有穷的集合; (2) IG是遗传的,因为森林的一个子集还是森林; (3)由定理5.2知:具有K条边的森林包含|V|-K 棵树,现假设A和B是G的森林,且|B||A|, 即A和B都由一组无回路的边构成,B中包含比A更多的边,则森林A包含|V|-A棵树,森林B则包含|V|-B棵树,因为森林B中包含的树比A中的少,故森林B中必包含某棵树其节点属于森林A的两棵不同的树.又因为树是连通的,它必包含边(u,v),使得节点u和v在森林A的两棵不同树中.正因为边(u,v)连接了森林A中两棵不同树的节点,故将边(u,v)加到森林A中后不会产生回路.所以MG满足交换性质.从而证明了MG是一个矩阵胚. 贪心算法的理论基础 给定一个矩阵胚M=(S,I),对I中的一个独立子集A ,若S中存在元素x不属于A,使得A∪{x} ∈I,则称x为A的一个可扩展元素; 当S中的一个独立子集A没有可扩展元素时,称A为一个极大独立子集; 极大独立子集性质:矩阵胚M中所有的极大独立子集具有相同大小; 贪心算法的理论基础 2、加权矩阵胚的贪心算法 如果对S中的每一个元素x (x∈S)赋予一个正的权植W(x) ,则矩阵胚M=(S,I)为加权矩阵胚. 适宜于用贪心算法来获得最优解的许多问题都可以归结为在加权矩阵胚中找一个具有最大权值的独立子集的问题,即给定一个加权矩阵胚M=(S,I),若能找出一个独立且具有最大权值的子集A,且A不被比它更大的独立子集所包含,那么A为最优子集,也是一个最大的独立子集. 贪心算法的理论基础 2、加权矩阵胚的贪心算法 算法如下:初始化A为空集;将S中的元素依权值从大到小排序;依序取出S中的所有元素x; 如果A∪{x}∈I,则将x并入A中,否则放弃x; 贪心算法的理论基础 定理2:(矩阵胚贪心选择性质的证明)设加权矩阵胚M=(S,I),S按权值大于排序,设x 为S的第一个使{x}是独立子集的元素,证明:存在S的一个最优子集A,使得x∈A;证明:在选择x前被舍弃的元素,容易证明,它们不可能是S中任一独立子集的可扩展元素,可以永远舍弃;若最优子集B不包含x,则可设A={x},利用交换性质,将B中的元素换入A中,直至|A|=|B|,这时A和B只相差一个元素,设B中未被换入A的元素为y,则W(A)=W(B)-W(y)+W(x),又W(x)≥W(y),则A亦为最优子集,得证。 贪心算法的理论基础 定理3:(矩阵胚最优子结构性质的证明) 从M=(S,I)中选出x后,原问题简化为M’=(S’,I’),S’由所有x的可扩展元素组成;I’是可以以x为可扩展元素的全部独立子集;设A是M的最优子集,则A’=A-{x}是M’的一个独立子集,由W(A) = W(A’)+W(x)可知,M的包含x的最优子集包含M’的一个最优子集; 综上所述,可推知对加权矩阵胚用贪心算法可以求得其最优子集; 一个任务调度问题 在单个处理器上对若干个单位时间任务进行最优调度,其中每个任务都有一个截止期限和超时的罚款,这是个矩阵胚问题。它看似复杂,但是用贪心算法解决的话则非常简单。其中单位时间任务是个作业,它恰需要一个单位的运行时间。 给定一个单位时间任务的集合S,对S的一个调度即S的一个排列,它规定了各任务执行的顺序。该调度中的第一个任务开始于时间0,结束于时间1;第二个任务开始于时间1,结束于时间2,等等。 单处理器上具有期限和罚款的单位时间任务调度问题的输入如下: 包含个n单位时间任务的集合S={1,2,….n}。 n个
文档评论(0)