收藏 分享(赏)

算法设计与分析_王红梅_第7章 贪心法.ppt

上传人:dzzj200808 文档编号:3357621 上传时间:2018-10-18 格式:PPT 页数:49 大小:280KB
下载 相关 举报
算法设计与分析_王红梅_第7章 贪心法.ppt_第1页
第1页 / 共49页
算法设计与分析_王红梅_第7章 贪心法.ppt_第2页
第2页 / 共49页
算法设计与分析_王红梅_第7章 贪心法.ppt_第3页
第3页 / 共49页
算法设计与分析_王红梅_第7章 贪心法.ppt_第4页
第4页 / 共49页
算法设计与分析_王红梅_第7章 贪心法.ppt_第5页
第5页 / 共49页
点击查看更多>>
资源描述

1、第7章 贪心法,7.1 概 述,7.2 图问题中的贪心法,7.3 组合问题中的贪心法,7.4 实验项目哈夫曼编码,7.1 概 述,7.1.1 贪心法的设计思想,7.1.2 贪心法的求解过程,贪心法在解决问题的策略上目光短浅,只根据当前已有的信息就做出选择,而且一旦做出了选择,不管将来有什么结果,这个选择都不会改变。换言之,贪心法并不是从整体最优考虑,它所做出的选择只是在某种意义上的局部最优。这种局部最优选择并不总能获得整体最优解(Optimal Solution),但通常能获得近似最优解(Near-Optimal Solution)。,7.1.1 贪心法的设计思想,例:用贪心法求解付款问题。

2、假设有面值为5元、2元、1元、5角、2角、1角的货币,需要找给顾客4元6角现金,为使付出的货币的数量最少,首先选出1张面值不超过4元6角的最大面值的货币,即2元,再选出1张面值不超过2元6角的最大面值的货币,即2元,再选出1张面值不超过6角的最大面值的货币,即5角,再选出1张面值不超过1角的最大面值的货币,即1角,总共付出4张货币。,在付款问题每一步的贪心选择中,在不超过应付款金额的条件下,只选择面值最大的货币,而不去考虑在后面看来这种选择是否合理,而且它还不会改变决定:一旦选出了一张货币,就永远选定。付款问题的贪心选择策略是尽可能使付出的货币最快地满足支付要求,其目的是使付出的货币张数最慢地

3、增加,这正体现了贪心法的设计思想。,贪心法求解的问题的特征: (1)最优子结构性质当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质,也称此问题满足最优性原理。 (2)贪心选择性质所谓贪心选择性质是指问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来得到。,动态规划法通常以自底向上的方式求解各个子问题,而贪心法则通常以自顶向下的方式做出一系列的贪心选择。,7.1.2 贪心法的求解过程,用贪心法求解问题应该考虑如下几个方面: (1)候选集合C:为了构造问题的解决方案,有一个候选集合C作为问题的可能解,即问题的最终解均取自于候选集合C。例如,在付款问题中,各种面值的货币构

4、成候选集合。 (2)解集合S:随着贪心选择的进行,解集合S不断扩展,直到构成一个满足问题的完整解。例如,在付款问题中,已付出的货币构成解集合。,(3)解决函数solution:检查解集合S是否构成问题的完整解。例如,在付款问题中,解决函数是已付出的货币金额恰好等于应付款。 (4)选择函数select:即贪心策略,这是贪心法的关键,它指出哪个候选对象最有希望构成问题的解,选择函数通常和目标函数有关。例如,在付款问题中,贪心策略就是在候选集合中选择面值最大的货币。(5)可行函数feasible:检查解集合中加入一个候选对象是否可行,即解集合扩展后是否满足约束条件。例如,在付款问题中,可行函数是每一

5、步选择的货币和已付出的货币相加不超过应付款。,贪心法的一般过程Greedy(C) /C是问题的输入集合即候选集合 S= ; /初始解集合为空集while (not solution(S) /集合S没有构成问题的一个解x=select(C); /在候选集合C中做贪心选择if feasible(S, x) /判断集合S中加入x后的解是否可行S=S+x;C=C-x;return S; ,7.2 图问题中的贪心法,7.2.1 TSP问题,7.2.2 图着色问题,7.2.3 最小生成树问题,7.2.1 TSP问题,求解TSP问题至少有两种贪心策略是合理的: (1)最近邻点策略:从任意城市出发,每次在没有

6、到过的城市中选择最近的一个,直到经过了所有的城市,最后回到出发城市。,设图G有n个顶点,边上的代价存储在二维数组wnn中,集合V存储图的顶点,集合P存储经过的边,最近邻点策略求解TSP问题的算法如下:,算法7.1的时间性能为O(n2),因为共进行n-1次贪心选择,每一次选择都需要查找满足贪心条件的最短边。用最近邻点贪心策略求解TSP问题所得的结果不一定是最优解,图7.1(a)中从城市1出发的最优解是125431,总代价只有13。当图中顶点个数较多并且各边的代价值分布比较均匀时,最近邻点策略可以给出较好的近似解,不过,这个近似解以何种程度近似于最优解,却难以保证。例如,在图7.1中,如果增大边(

7、2, 1)的代价,则总代价只好随之增加,没有选择的余地。,(2)最短链接策略:每次在整个图的范围内选择最短边加入到解集合中,但是,要保证加入解集合中的边最终形成一个哈密顿回路。因此,当从剩余边集E中选择一条边(u, v)加入解集合S中,应满足以下条件: 边(u, v)是边集E中代价最小的边; 边(u, v)加入解集合S后,S中不产生回路; 边(u, v) 加入解集合S后,S中不产生分枝;,设图G有n个顶点,边上的代价存储在二维数组wnn中,集合E是候选集合即存储所有未选取的边,集合P存储经过的边,最短链接策略求解TSP问题的算法如下:,在算法7.2中,如果操作“在E中选取最短边(u, v)”用

8、顺序查找,则算法7.2的时间性能是O(n2),如果采用堆排序的方法将集合E中的边建立堆,则选取最短边的操作可以是O(log2n),对于两个顶点是否连通以及是否会产生分枝,可以用并查集的操作将其时间性能提高到O(n),此时算法7.2的时间性能为O(nlog2n)。,7.2.2 图着色问题,给定无向连通图G=(V, E),求图G的最小色数k,使得用k种颜色对G中的顶点着色,可使任意两个相邻顶点着色不同。,例如,图7.3(a)所示的图可以只用两种颜色着色,将顶点1、3和4着成一种颜色,将顶点2和顶点5着成另外一种颜色。为简单起见,下面假定k个颜色的集合为颜色1, 颜色2, , 颜色k。,贪心策略:选

9、择一种颜色,以任意顶点作为开始顶点,依次考察图中的未被着色的每个顶点,如果一个顶点可以用颜色1着色,换言之,该顶点的邻接点都还未被着色,则用颜色1为该顶点着色,当没有顶点能以这种颜色着色时,选择颜色2和一个未被着色的顶点作为开始顶点,用第二种颜色为尽可能多的顶点着色,如果还有未着色的顶点,则选取颜色3并为尽可能多的顶点着色,依此类推。,设数组colorn表示顶点的着色情况,贪心法求解图着色问题的算法如下:,考虑一个具有2n个顶点的无向图,顶点的编号从1到2n,当i是奇数时,顶点i与除了顶点i+1之外的其他所有编号为偶数的顶点邻接,当i是偶数时,顶点i与除了顶点i-1之外的其他所有编号为奇数的顶

10、点邻接,这样的图称为双向图(Bipartite)。,7.2.3 最小生成树问题,设G=(V,E)是一个无向连通网,生成树上各边的权值之和称为该生成树的代价,在G的所有生成树中,代价最小的生成树称为最小生成树(Minimal Spanning Trees)。,最小生成树问题至少有两种合理的贪心策略: (1)最近顶点策略:任选一个顶点,并以此建立起生成树,每一步的贪心选择是简单地把不在生成树中的最近顶点添加到生成树中。Prim算法就应用了这个贪心策略,它使生成树以一种自然的方式生长,即从任意顶点开始,每一步为这棵树添加一个分枝,直到生成树中包含全部顶点。,设图G中顶点的编号为0n-1,Prim算法

11、如下:,设连通网中有n个顶点,则第一个进行初始化的循环语句需要执行n-1次,第二个循环共执行n-1次,内嵌两个循环,其一是在长度为n的数组中求最小值,需要执行n-1次,其二是调整辅助数组,需要执行n-1次,所以,Prim算法的时间复杂度为O(n2)。,(2)最短边策略:设G=(V,E)是一个无向连通网,令T=(U,TE)是G的最小生成树。最短边策略从TE=开始,每一次贪心选择都是在边集E中选取最短边(u, v),如果边(u, v)加入集合TE中不产生回路,则将边(u, v)加入边集TE中,并将它在集合E中删去。Kruskal算法就应用了这个贪心策略,它使生成树以一种随意的方式生长,先让森林中的

12、树木随意生长,每生长一次就将两棵树合并,到最后合并成一棵树。,Kruskal算法为了提高每次贪心选择时查找最短边的效率,可以先将图G中的边按代价从小到大排序,则这个操作的时间复杂度为O(elog2e),其中e为无向连通网中边的个数。对于两个顶点是否属于同一个连通分量,可以用并查集的操作将其时间性能提高到O(n),所以,Kruskal算法的时间性能是O(elog2e)。,7.3 组合问题中的贪心法,7.3.1 背包问题,7.3.2 活动安排问题,7.3.3 多机调度问题,7.3.1 背包问题,给定n种物品和一个容量为C的背包,物品i的重量是wi,其价值为vi,背包问题是如何选择装入背包的物品,使

13、得装入背包中物品的总价值最大?,于是,背包问题归结为寻找一个满足约束条件式7.1,并使目标函数式7.2达到最大的解向量X=(x1, x2, , xn)。,设xi表示物品i装入背包的情况,根据问题的要求,有如下约束条件和目标函数:,(式7.1),(式7.2),至少有三种看似合理的贪心策略: (1)选择价值最大的物品,因为这可以尽可能快地增加背包的总价值。但是,虽然每一步选择获得了背包价值的极大增长,但背包容量却可能消耗得太快,使得装入背包的物品个数减少,从而不能保证目标函数达到最大。(2)选择重量最轻的物品,因为这可以装入尽可能多的物品,从而增加背包的总价值。但是,虽然每一步选择使背包的容量消耗

14、得慢了,但背包的价值却没能保证迅速增长,从而不能保证目标函数达到最大。(3)选择单位重量价值最大的物品,在背包价值增长和背包容量消耗两者之间寻找平衡。,应用第三种贪心策略,每次从物品集合中选择单位重量价值最大的物品,如果其重量小于背包容量,就可以把它装入,并将背包容量减去该物品的重量,然后我们就面临了一个最优子问题它同样是背包问题,只不过背包容量减少了,物品集合减少了。因此背包问题具有最优子结构性质。,120 50 背包 180 190 200(a) 三个物品及背包 (b) 贪心策略1 (c) 贪心策略2 (d) 贪心策略3,例如,有3个物品,其重量分别是20, 30, 10,价值分别为60,

15、 120, 50,背包的容量为50,应用三种贪心策略装入背包的物品和获得的价值如图所示。,设背包容量为C,共有n个物品,物品重量存放在数组wn中,价值存放在数组vn中,问题的解存放在数组xn中。,算法7.6的时间主要消耗在将各种物品依其单位重量的价值从大到小排序。因此,其时间复杂性为O(nlog2n)。,7.3.2 活动安排问题,设有n个活动的集合E=1, 2, , n,其中每个活动都要求使用同一资源(如演讲会场),而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si fi 。如果选择了活动i,则它在半开时间区间si, fi)内占用

16、资源。若区间si, fi)与区间sj, fj)不相交,则称活动i与活动j是相容的。也就是说,当sifj或sjfi时,活动i与活动j相容。活动安排问题要求在所给的活动集合中选出最大的相容活动子集。,由于活动占用资源的时间没有限制,因此,后一种贪心选择更为合理。为了在每一次贪心选择时快速查找具有最早结束时间的相容活动,先把n个活动按结束时间非减序排列。这样,贪心选择时取当前活动集合中结束时间最早的活动就归结为取当前活动集合中排在最前面的活动。,贪心法求解活动安排问题的关键是如何选择贪心策略,使得按照一定的顺序选择相容活动,并能安排尽量多的活动。至少有两种看似合理的贪心策略:(1)最早开始时间:这样

17、可以增大资源的利用率。(2)最早结束时间:这样可以使下一个活动尽早开始。,例如,设有11个活动等待安排,这些活动按结束时间的非减序排列如下:,设有n个活动等待安排,这些活动的开始时间和结束时间分别存放在数组sn和fn中,集合B存放问题的解,即选定的活动集合,算法如下:,算法7.7的时间主要消耗在将各个活动按结束时间从小到大排序。因此,算法的时间复杂性为O(nlog2n)。,7.3.3 多机调度问题,设有n个独立的作业1, 2, , n,由m台相同的机器M1, M2, , Mm进行加工处理,作业i所需的处理时间为ti(1in),每个作业均可在任何一台机器上加工处理,但不可间断、拆分。多机调度问题

18、要求给出一种作业调度方案,使所给的n个作业在尽可能短的时间内由m台机器加工处理完成。,贪心法求解多机调度问题的贪心策略是最长处理时间作业优先,即把处理时间最长的作业分配给最先空闲的机器,这样可以保证处理时间长的作业优先处理,从而在整体上获得尽可能短的处理时间。按照最长处理时间作业优先的贪心策略,当mn时,只要将机器i的0, ti)时间区间分配给作业i即可;当mn时,首先将n个作业依其所需的处理时间从大到小排序,然后依此顺序将作业分配给空闲的处理机。,例:设7个独立作业1, 2, 3, 4, 5, 6, 7由3台机器M1, M2, M3加工处理,各作业所需的处理时间分别为2, 14, 4, 16

19、, 6, 5, 3。贪心法产生的作业调度如下:,在算法7.9中,操作“数组dm中最小值对应的下标”如果采用蛮力法查找,则算法的时间性能为:通常情况下mn,则算法7.9的时间复杂性为O(nm)。,7.4 实验项目哈夫曼编码,1. 实验题目设需要编码的字符集为d1, d2, , dn,它们出现的频率为w1, w2, , wn,应用哈夫曼树构造最短的不等长编码方案。,2. 实验目的(1)了解前缀编码的概念,理解数据压缩的基本方法;(2)掌握最优子结构性质的证明方法;(3)掌握贪心法的设计思想并能熟练运用。,3. 实验要求 (1)证明哈夫曼树满足最优子结构性质; (2)设计贪心算法求解哈夫曼编码方案; (3)设计测试数据,写出程序文档。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报