第六章贪心法.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《第六章贪心法.ppt》由会员分享,可在线阅读,更多相关《第六章贪心法.ppt(47页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第六章第六章 贪心法贪心法贪心法的学习提纲n一般方法一般方法n适合求解的问题适合求解的问题 n基本思想基本思想(求解问题的过程求解问题的过程)n算法控制流程算法控制流程n算法的正确性证明算法的正确性证明n应用举例应用举例n背包问题背包问题n带时限的作业排序问题带时限的作业排序问题 贪心算法的直观含义贪心算法的直观含义 例例1.1.如:找硬币如:找硬币0.150.15元,要求硬币数最少。找硬币方法就是一种元,要求硬币数最少。找硬币方法就是一种贪心算法贪心算法.(1 1)面值;)面值;5 5分、分、2 2分、分、1 1分:分:(2 2)面值:)面值:1111分、分、5 5分、分、1 1分:分:从此
2、例可以看出:从此例可以看出:1 1,贪心法,贪心法未必未必总能求得问题的最优解;总能求得问题的最优解;2 2,贪心算法总是作出在当前看来是最好的选择,贪心算法总是作出在当前看来是最好的选择.也就是说贪心算法不从也就是说贪心算法不从整体最优上加以考虑整体最优上加以考虑,它所作出的选择只是在某种意义上的局部最优选择。它所作出的选择只是在某种意义上的局部最优选择。虽然贪心算法不是对所有问题都能得到整体最优解虽然贪心算法不是对所有问题都能得到整体最优解,但对范围相当广但对范围相当广的许多问题它都能产生最优解。如单源最短路径问题,最小生成树问题等。的许多问题它都能产生最优解。如单源最短路径问题,最小生成
3、树问题等。而且而且,在一些情况下,即使贪心算法不能得到整体最优解,但其最终在一些情况下,即使贪心算法不能得到整体最优解,但其最终结果却是最优解的很好的近似解!结果却是最优解的很好的近似解!3个个5分分 (最优)1个个11分分4个个1分分 (次优)6.1 6.1 一般方法一般方法l贪心方法适合的问题是贪心方法适合的问题是最优化问题最优化问题。最优化问题:最优化问题:有有n n个输入,而它的解就由这个输入,而它的解就由这n n个输入的满足某些事个输入的满足某些事先给定的约束条件的某个子集组成,而把满足约束条件的子集称为该问先给定的约束条件的某个子集组成,而把满足约束条件的子集称为该问题的可行解。显
4、然,可行解一般来说是不唯一的,为了衡量可行解的好题的可行解。显然,可行解一般来说是不唯一的,为了衡量可行解的好坏,问题还给出某个值函数,称为目标函数,使目标函数取极值坏,问题还给出某个值函数,称为目标函数,使目标函数取极值(极大极大或极小或极小)的可行解,称为最优解。的可行解,称为最优解。目标函数:目标函数:约束条件(函数):约束条件(函数):其中:其中:可行解:可行解:如找硬币问题可描述如下:如找硬币问题可描述如下:最优化问题的解可表示成最优化问题的解可表示成一个一个n n元组元组X=(x1,x2xn),),其中每个分量取自某个值集其中每个分量取自某个值集S,所有允许的所有允许的n-元组组成
5、一个元组组成一个侯选解集。侯选解集。6.1 6.1 一般方法一般方法l贪心方法适合的问题是贪心方法适合的问题是最优化问题最优化问题。最优化问题:最优化问题:有有n n个输入,而它的解就由这个输入,而它的解就由这n n个输入的满足某些事先个输入的满足某些事先给定的约束条件的某个子集组成,而把满足约束条件的子集称为该问题给定的约束条件的某个子集组成,而把满足约束条件的子集称为该问题的可行解。显然,可行解一般来说是不唯一的,为了衡量可行解的好坏,的可行解。显然,可行解一般来说是不唯一的,为了衡量可行解的好坏,问题还给出某个值函数,称为目标函数,使目标函数取极值问题还给出某个值函数,称为目标函数,使目
6、标函数取极值(极大或极极大或极小小)的可行解,称为最优解。的可行解,称为最优解。最优化问题的解是一个最优化问题的解是一个n n元组元组l贪心法是通过贪心法是通过分步决策分步决策的方法来解决问题的。贪心法在求解问题的每一的方法来解决问题的。贪心法在求解问题的每一步上作出某种决策,产生步上作出某种决策,产生n-n-元组的一个分量,贪心法要求根据题意,选元组的一个分量,贪心法要求根据题意,选定一种最优量度标准,作为选择当前分量的依据,这种在贪心法每一步定一种最优量度标准,作为选择当前分量的依据,这种在贪心法每一步上用做决策依据的选择准则被称为最优量度标准(贪心准则,也称贪心上用做决策依据的选择准则被
7、称为最优量度标准(贪心准则,也称贪心选择性质)。选择性质)。6.1 6.1 一般方法一般方法l贪心法的基本思想贪心法的基本思想:是依据题意选取一种量度标准,然后按照这种量度标准对这是依据题意选取一种量度标准,然后按照这种量度标准对这n n个输个输入进行排序,并按序一次输入一个量,作为入进行排序,并按序一次输入一个量,作为n-n-元组的一个分量,如果这元组的一个分量,如果这个输入量的加入不满足约束条件个输入量的加入不满足约束条件,则不把此输入加入到部分解向量中则不把此输入加入到部分解向量中.l贪心法求解问题的过程贪心法求解问题的过程:l选取最优量度标准选取最优量度标准l依最优量度标准对依最优量度
8、标准对n n个输入排序个输入排序l初始状态下初始状态下,解向量解向量solution=solution=中中;l按序一次取一个输入量,作为按序一次取一个输入量,作为n-n-元组的一个分量,若加入该分量满足元组的一个分量,若加入该分量满足给定的约束条件,则加入,否则,不加入,继续检测下一个分量给定的约束条件,则加入,否则,不加入,继续检测下一个分量.贪心方法的抽象化控制贪心方法的抽象化控制算法算法6.1 贪心法的控制流程SolutionType Greedy(SType a,int n)SolutionType solutions=/将解向量将解向量solutionsolution初始化为空初始
9、化为空 for(int i=0;i0.0.如果这些物品重量的和大于如果这些物品重量的和大于M,M,要求所有选中要装入背包的物品总重量不得超过要求所有选中要装入背包的物品总重量不得超过M,M,而装入背而装入背包物品获得的总效益最大包物品获得的总效益最大.即即 0 xil,pi0,wi0,0in-1 满足约束条件的任一集合满足约束条件的任一集合(x0,xn-1)是一个是一个可行解可行解(即能装即能装下下),使,使目标函数取最大值目标函数取最大值的可行解是的可行解是最优解最优解。n背包问题描述:背包问题描述:约束条件:约束条件:例例6.1 n3,M=20,P(25,24,15),W=(18,15,1
10、0)假设物品可分,故有可行解无数个,其中的四个可行解是:假设物品可分,故有可行解无数个,其中的四个可行解是:(x0,x1,x2)wixi pixi (1/2,1/3,1/4)16.5 24.25 (1,2/15,0)20 28.2 (0,2/3,1)20 31 (0,1,1/2)20 31.5 在这四个可行解中,第在这四个可行解中,第个解的效益值最大。但这个解是否是背包问个解的效益值最大。但这个解是否是背包问题的最优解,尚无法确定,但有一点是可以肯定的,即对于一般背包问题的最优解,尚无法确定,但有一点是可以肯定的,即对于一般背包问题,其最优解显然必须装满背包。题,其最优解显然必须装满背包。6.
11、3 6.3 背包问题背包问题n贪心法求解背包问题贪心法求解背包问题q选择量度标准选择量度标准q计算在此量度标准下的计算在此量度标准下的”最优解最优解”n(1)选选目标函数目标函数作为量度标准作为量度标准,即即”效益效益”优先优先,使每装入使每装入一件物品就使背包获得最大可能的效益值增量一件物品就使背包获得最大可能的效益值增量.按物品收益从大到小排序按物品收益从大到小排序0,1,2 解为解为:(x0,x1,x2)=(1,2/15,0)收益收益:25+24*2/15=28.2 6.3 6.3 背包问题背包问题非最优解非最优解原因原因原因原因:只考虑当前收益最大只考虑当前收益最大只考虑当前收益最大只
12、考虑当前收益最大,而背包可用容量消耗过快而背包可用容量消耗过快而背包可用容量消耗过快而背包可用容量消耗过快.M=20,P(25,24,15)W=(18,15,10)n贪心法求解背包问题贪心法求解背包问题q选择量度标准选择量度标准q计算在此量度标准下的计算在此量度标准下的”最优解最优解”n(2)选选重量重量作为量度作为量度,使背包容量尽可能慢地被消耗使背包容量尽可能慢地被消耗.6.3 6.3 背包问题背包问题按物品重量从小到大排序按物品重量从小到大排序:2,1,0;解为解为:(x0,x1,x2)=(0,2/3,1)收益收益:15+24*2/3=31 非最优解非最优解原因原因原因原因:虽然容量消耗
13、慢,但效益没有很快的增加虽然容量消耗慢,但效益没有很快的增加虽然容量消耗慢,但效益没有很快的增加虽然容量消耗慢,但效益没有很快的增加.M=20,P(25,24,15)W=(18,15,10)n贪心法求解背包问题贪心法求解背包问题q选择量度标准选择量度标准q计算在此量度标准下的计算在此量度标准下的”最优解最优解”n(3)选选利润利润/重量重量为量度为量度 使每一次装入的物品应使它占用的每使每一次装入的物品应使它占用的每一单位容量获得当前最大的单位效益。一单位容量获得当前最大的单位效益。6.3 6.3 背包问题背包问题M=20,P(25,24,15)W=(18,15,10)按物品的按物品的pi/w
14、i重量从大到小排序重量从大到小排序:1,2,0;解为解为:(x0,x1,x2)=(0,1,1/2)收益收益:24+15/2=31.5 可见,可以可见,可以可见,可以可见,可以pi/wi 作为背包问题的最优量度标准作为背包问题的最优量度标准作为背包问题的最优量度标准作为背包问题的最优量度标准.最优解最优解算法算法6.2以以pi/wi为最优量度标准的背包问题的贪心算法为最优量度标准的背包问题的贪心算法 void GreedyKnapsack(float*p,float*w,float M,int n,float*x)/前置条件:前置条件:wi已按已按pi/wi的非增次序排列的非增次序排列 floa
15、t u=M;/u为背包剩余载重量,初始时为为背包剩余载重量,初始时为m for(int i=0;in;i+)xi=0;/对解向量对解向量x初始化初始化 for(i=0;iu)break;xi=1.0;u=u wi;if(ipixi。不失一般性,可以假定不失一般性,可以假定wiyi=M。(2 2)设)设k是使得是使得ykxk的最小下标。可以推得的最小下标。可以推得ykxk。这可从三种可能发这可从三种可能发生的情况,即生的情况,即kj分别得证明:分别得证明:若若kj,(1,1,1,.,1,xj,0,0)K j因为因为 ykxk,从而,从而ykxk,显然有,显然有wiyiM,从而,从而ykj,(1,
16、1,1,.,1,xj,0,0)j K反证法:所以,必有ykxk,有,有wiyiM,是不可能的。,是不可能的。(3)(3)把把yk增加到增加到xk,那末必须从那末必须从(yk+1,yn-1)中减去同样多的量,使中减去同样多的量,使得所用的总容量仍是得所用的总容量仍是M。这导致一个新的解这导致一个新的解Z=(z0,zn-1),其中,其中,zi=xi,0ik,并且并且 因此,对于因此,对于Z有有变换 Z不比不比Y差差,重复上面的讨论重复上面的讨论,把把Y Y转换成转换成X,从而证明了从而证明了X也是最优解也是最优解.证毕证毕。对于对于0/1背包问题,使用贪心法,并不一定能求得最优解,背包问题,使用贪
17、心法,并不一定能求得最优解,因此,贪心法不能用来求解因此,贪心法不能用来求解0/1背包问题背包问题例例,n3,M=25,P(32,24,15),W(16,15,10).P/W=(2,1.6,1.5)X=(0)p=32,CU=M-W(0)=9 不能放下任何物品,显然不能放下任何物品,显然X=(0)X=(0)不是最优解。不是最优解。最优解是最优解是(1,2)(1,2),利润为,利润为3939。6.3 6.3 背包问题背包问题6.3 6.3 带有限期的作业排序带有限期的作业排序 在一单机无其他资源约束的处理系统中,运行在一单机无其他资源约束的处理系统中,运行n个作业,个作业,假设每个作业运行假设每个
18、作业运行1个单位时间,且每个作业个单位时间,且每个作业i都都有一个截止有一个截止期限期限di0(它是整数它是整数),若作业,若作业i能能在它的期限截止前被完成,在它的期限截止前被完成,则可获得则可获得pi0的效益。要求找到作业的子集的效益。要求找到作业的子集X及及X的一个排列的一个排列,使得按,使得按调度作业运行,调度作业运行,X中的作业都能如期完成,且获中的作业都能如期完成,且获收益最大。收益最大。可行解:可行解:子集子集X中的作业都能如期完成,则中的作业都能如期完成,则X为可行解。为可行解。可行解的收益:可行解的收益:可行解可行解X中所有中所有作业的收益之和,即作业的收益之和,即 。最优解
19、:最优解:具有最大收益的可行解就是最优解。具有最大收益的可行解就是最优解。6.3.1 问题描述问题描述 例6.2n=4,(p0,p1,p2,p3)(100,10,15,20)、(d0,d1,d2,d3)=(2,1,2,1)可行解和它们的效益值如下:可行解和它们的效益值如下:可行解可行解 处理顺序处理顺序 效益值效益值 (0)1 100 (1)1 10 (2)1 15(3)1 20(0,1)1,0 110(0,2)0,2或或2,0 115(0,3)3,0 120(1,2)1,2 25解解是最优的是最优的,所允许的处理次序是所允许的处理次序是:先处理作业先处理作业3,3,再处理作业再处理作业0.0
20、.306.3 6.3 带有限期的作业排序带有限期的作业排序6.3.2 贪心法求解贪心法求解 (1),把把目标函数目标函数 作为量度作为量度.使用这一量度使用这一量度,下一个要计入的作业将是使得在满足所产生的下一个要计入的作业将是使得在满足所产生的X是一个可行解的限制条件下让是一个可行解的限制条件下让 得到最大增加的作业得到最大增加的作业.(2),按按pi 的非增次序来考虑这些作业的非增次序来考虑这些作业;如例如例6.26.2,按,按pi 的非增次序对作业进行排序的非增次序对作业进行排序(0 0,3 3,2 2,1 1)开始时开始时:X,X0,p0=100 作业0有最大效益 X0,3 p0+p3
21、=120 作业3有第二大效益 作业2,1都被舍弃6.3 6.3 带有限期的作业排序带有限期的作业排序算法算法6.3 6.3 带时限作业排序算法带时限作业排序算法void GreedyJob(int*d,int*X,n)/作业按p0p1pn-1的次序输入,它们的期限值d(i)1,0in-1,n1。X是在它们的截止期限前完成的作业的集合/X0 for(int i=1;in;i+)if(Xi的所有作业都能在它们的截止期限前完成的所有作业都能在它们的截止期限前完成)X=X i6.3 6.3 带有限期的作业排序带有限期的作业排序思考思考:1 1,该算法能否得到最优解?,该算法能否得到最优解?2 2,如何
22、变为有效的算法?,如何变为有效的算法?6.3.2 贪心法求解贪心法求解 定理定理6.2 6.2 算法算法6.36.3所描述的贪心方法对于作业排序问题总是所描述的贪心方法对于作业排序问题总是得到一个最优解。得到一个最优解。证明证明:设设X=(x0,x1,xk)是某个带时限作业排序问题实例的贪心法求是某个带时限作业排序问题实例的贪心法求得的解,若得的解,若X不是最优解,假设另有不是最优解,假设另有Y=(y0,y1,yr)是最优解是最优解.(1)假设假设XY,必有必有 且且 若若 ,则,则Y不是可行解;否则,不是可行解;否则,Y是可行解,那么贪心算法是可行解,那么贪心算法会将属于会将属于Y但不属于但
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第六 贪心
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内