- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第05章.贪心算法37168
《算法设计与分析》第05章 贪心算法 基本思想 通过作出在当前看来最优的选择(贪心选择),将原问题规模缩小,如此反复,直至得到最终解。 贪心算法并非对所有问题都能得到整体最优解。 活动安排问题 设有n个活动E={e1, e2, …, en},其中每个活动都需要使用某一资源,而在同一时间内该资源只能由一个活动使用,每个活动都有开始时间si和结束时间fi(sifi),若ei和ej满足si≥fj或sj≥fi,则称这两个活动相容,要求找出最多相容活动集合A。 活动安排问题 贪心解法: 将所有活动按结束时间排序,得到活动集合E={e1,e2…en}; 先将e1选入结果集合A中,即A={e1}; 依次扫描每一个活动ei: 如果ei的开始时间晚于最后一个选入A的活动ej的结束时间,则将ei选入A中,否则放弃ei; 活动安排问题 解法证明: 若E={e1,e2…en}是按结束时间排序的活动集合,则e1具有最早的结束时间,设存在一个最优安排A不包含e1,并以ei开始,则易见:A-{ei}∪{e1}也是最优的活动安排;依此类推。 贪心算法的基本要素 1、贪心选择性质 所求问题的整体最优解可由一系列局部最优选择得到; 动态规划是由子问题的解得到当前问题的解;贪心算法则是由当前问题的局部最优解导出子问题; 确定一个问题是否具有贪心选择性质,需要证明问题的一个整体最优解是从贪心选择开始的; 2、最优子结构性质 通过局部最优选择,原问题将被化简为类似的子问题;亦即是说,整体最优解中包含了子问题的最优解; 背包问题 有一容量为W的背包,和单价分别为vi的物品块(均为单位体积)各ni块,i=1…n;问每种物品应各选择多少块装入背包中,使得背包中的总价值最大? 0-1背包问题 有一容量为W的背包,和一批体积分别为wi,价值为vi的物品, i=1…n;问将哪些物品装入背包,使得背包中的总价值最大? 0-1背包问题不满足最优子结构性质,不能用贪心法来求解,而应用分治法求解。分治规则为:S(w1..n, v1..n, W) = max{ S(w1..n-1, v1..n-1, W-wn)+vn, S(w1..n-1, v1..n-1, W)} 哈夫曼算法的证明 贪心选择性质的证明 若叶结点x,y是被选中合并的结点,即x,y具有最小权值,则 1. x、y是结果树上深度最大的两个结点,且互为兄弟; 2. 必存在最优二叉树以x,y为深度最大的两个结点,且互为兄弟(编码最长,且只有最后一位编码不同); 证明:显然,总可通过交换x,y到最深的一对兄弟结点,得到满足条件的最优二叉树; 哈夫曼算法的证明 最优子结构性质的证明 若叶结点x,y分别具有最小权值,而且是互为兄弟结点的最深的叶子结点,证明:取x,y的父结点代替x,y结点,取x,y的权值和作为其父结点的权值,得到的仍是一棵最优二叉树;证明:设原二叉树的权值为W = W’+x*d+y*d,d为x,y的深度,则用x,y的父结点取代x,y后的二叉树的权值为W’+(x+y)*(d-1),易见,若存在一个更优的二叉树,将x,y再替换回来也应是一棵更优的二叉树; 贪心算法的理论基础 1、拟阵 拟阵定义为满足以下条件的有序对(S,I);S是一个非空有限集合;I是S的具有某种遗传性质的独立子集的全集;一个集合是具有遗传性质的独立集合是指,若一个集合具有某种性质,则其任意子集也具有该性质;I满足交换性质,即若A∈I,B ∈I且|A||B|,则存在某一元素x ∈B-A,使得A∪{x} ∈I; 贪心算法的理论基础 1、拟阵 例如:S定义为一个无向图的边集,I定义为图中不含回路的边的集合的全体;即若A ∈I,则A中的边构成一个森林; 给定一个拟阵M=(S,I),对I中的一个独立子集A ,若S中存在元素x不属于A,使得A∪{x} ∈I,则称x为A的一个可扩展元素; 当S中的一个独立子集A没有可扩展元素时,称A为一个极大独立子集; 极大独立子集性质:拟阵M中所有的极大独立子集具有相同大小; 贪心算法的理论基础 2、带权拟阵的贪心算法 对拟阵M=(S,I)的S指定一个权函数W,使对x∈S,有W(x)0,称M为带权拟阵,S的子集A的权定义为A中全部元素的权值和; 问题:求解最大权独立子集,即确定A∈I,且W(A)达到最大;A称为M的一个最优子集;最优子集也是极大独立子集; 贪心算法的理论基础 2、带权拟阵的贪心算法 算法如下:初始化A为空集;将S中的元素依权值从大到小排序;依序取出S中的所有元素x: 如果A∪{x}∈I,则将x并入A中,否则放弃x; 算法时间复杂性:O( nlogn + nf(n) ),其中f(n)为判定A∪{x}是否属于I所需的时间; 贪心算法的理论基础 3、带权拟阵的贪心算法的证明
文档评论(0)