计算机算法基础(第5章).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)
《计算机算法基础(第5章).ppt》由会员分享,可在线阅读,更多相关《计算机算法基础(第5章).ppt(94页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第 5 章 贪心方法1/21/20231贪心算法(又称贪婪算法)贪心算法(又称贪婪算法)n是指在问题求解时,总是做出在当前看来是最是指在问题求解时,总是做出在当前看来是最好的选择。也就是说,不是整体最优上,仅是好的选择。也就是说,不是整体最优上,仅是在某种意义上的在某种意义上的局部最优解局部最优解n贪心算法不是对所有问题都能得到整体最优解,贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题能产生整体但对范围相当广泛的许多问题能产生整体最优最优解解或者是整体最优解的或者是整体最优解的近似解近似解1/21/202325.1 5.1 一般方法一般方法1.1.问题的一般特征问题的一般
2、特征 问题有问题有n n个输入,问题的解是由这个输入,问题的解是由这n n个输入的某个个输入的某个子集子集组成,这个组成,这个子集必须满足某些事先给定的条件。子集必须满足某些事先给定的条件。n 约束条件约束条件:子集必须满足的条件;:子集必须满足的条件;n 可行解可行解:满足约束条件的子集;可行解可能不唯一;:满足约束条件的子集;可行解可能不唯一;n 目标函数目标函数:用来衡量可行解优劣的标准,一般以函数的形式给出;:用来衡量可行解优劣的标准,一般以函数的形式给出;n 最优解最优解:能够使目标函数取极值(极大或极小)的可行解。:能够使目标函数取极值(极大或极小)的可行解。分类分类:根据描述问题
3、约束条件和目标函数的:根据描述问题约束条件和目标函数的数学模型数学模型的特性和问题的特性和问题的的求解方法求解方法的不同,可分为:线性规划、整数规划、非线性规划、动态的不同,可分为:线性规划、整数规划、非线性规划、动态规划等。规划等。最优化问题求解最优化问题求解 贪心方法贪心方法:一种改进的:一种改进的分级分级的处理方法,可对满足上述特征的某些的处理方法,可对满足上述特征的某些问题方便地求解。问题方便地求解。1/21/20233例例 找零钱找零钱 一个人用100元买了价值3元的可乐(找钱97元)。售货员希望用数目最少的硬币找给他。假设提供数目不限的面值为50元、10元、5元及1元的钱币。售货员
4、分步骤组成要找的零钱数 选择硬币时所采用的贪心算法如下:每一次选择应使零钱数尽量增大。为确保解法的可行性(即:所给的零钱等于要找的零钱数),所选择的硬币不应使零钱总数超过最终所需的数目1/21/20234 假设需要找给小孩97分,首先入选的是1张50元的纸币,第2入选的不能是50元,否则将不可行(零钱总数超过97),应选择4张10元的,然后是1张5元,最后加入2个1元的硬币 贪心算法,在找零钱时,应使找出的纸币数目最少(至少是接近最少的数目)1/21/202352.2.贪心方法的一般策略贪心方法的一般策略 问题的一般特征:问题的解是由问题的一般特征:问题的解是由n n个输入的、满足某些事先给定
5、的条个输入的、满足某些事先给定的条件的子集组成。件的子集组成。1 1)一般方法)一般方法 根据题意,选取一种根据题意,选取一种度量标准度量标准。然后按照这种度量标准对。然后按照这种度量标准对n n个输入个输入排排序序,并按序一次输入一个量。,并按序一次输入一个量。如果这个输入和当前已构成在这种量度意义下的如果这个输入和当前已构成在这种量度意义下的部分最优解部分最优解加在一起加在一起不能产生一个可行解,则不把此输入加到这部分解中。否则,将当前输入合不能产生一个可行解,则不把此输入加到这部分解中。否则,将当前输入合并到部分解中从而得到包含当前输入的并到部分解中从而得到包含当前输入的新的部分解新的部
6、分解。2 2)贪心方法)贪心方法 这种能够得到某种量度意义下的最优解的这种能够得到某种量度意义下的最优解的分级处理分级处理方法称为方法称为贪心方法贪心方法注:注:贪心解贪心解 最优解最优解 直接将目标函数作为直接将目标函数作为量度标准量度标准也不一定能够得到问题的最优解也不一定能够得到问题的最优解 3 3)使用贪心策略求解的关键)使用贪心策略求解的关键 选取能够得到问题最优解的量度标准。选取能够得到问题最优解的量度标准。1/21/202363.3.贪心方法的抽象化控制描述贪心方法的抽象化控制描述 procedure GREEDY(A,n)/A(1:n)包含包含n个输入个输入/solution
7、/将解向量将解向量solution初始化初始化为为空空/for i1 to n do xSELECT(A)/按照度量按照度量标标准,从准,从A中中选择选择一个一个输输入,其入,其值赋值赋予予x 并将之从并将之从A中中删删除除/if FEASIBLE(solution,x)then /判定判定x是否可以包含在解向量中,是否可以包含在解向量中,即是否能共同构成可行解即是否能共同构成可行解/solutionUNION(solution,x)/将将x和当前的解向量合并成新的解和当前的解向量合并成新的解 向量,并修改目向量,并修改目标标函数函数/endif repeat return(solution)
8、end GREEDY 1/21/202375.2 5.2 背包问题背包问题1.问题的描述问题的描述 已知已知n种物品具有重量种物品具有重量(w1,w2,wn)和效益值和效益值(p1,p2,pn),及一及一个可容纳个可容纳M重量的背包;设当物品重量的背包;设当物品i全部或一部分全部或一部分xi放入背包将得到放入背包将得到pi xi的的效益,这里,效益,这里,0 xi 1,p 1,pi 0 0。问题问题:采用怎样的装包方法才能使装入背包的物品的:采用怎样的装包方法才能使装入背包的物品的总效益最大总效益最大?分析分析:装入背包的总重量装入背包的总重量不能超过不能超过M M 如果所有物品的如果所有物品
9、的总重量总重量不超过不超过M M,即即 M M,则把则把所有所有的物的物品都装入背包中将获得最大可能的效益值品都装入背包中将获得最大可能的效益值 如果物品的总重量如果物品的总重量超过超过M M,则将有物品不能(全部)装则将有物品不能(全部)装 入背包中。由于入背包中。由于0 xi1xi1,所以可以把物品的一部分装入背包,所以最终所以可以把物品的一部分装入背包,所以最终背包中可刚好装入重量为背包中可刚好装入重量为M M的若干物品(整个或一部分)的若干物品(整个或一部分)目标目标:使装入背包的物品的:使装入背包的物品的总效益总效益达到达到最大最大1/21/20238问题的形式描述问题的形式描述 目
10、标函数目标函数:约束条件约束条件:可可 行行 解解:满足上述约束条件的:满足上述约束条件的任一集合任一集合(x1,x2,xn)都是问题都是问题 的一个可行解的一个可行解可行解可能为多个。可行解可能为多个。(x1,x2,xn)称为问题的一个称为问题的一个解向量解向量 最最 优优 解解:能够使目标函数取:能够使目标函数取最大值最大值的可行解是问题的的可行解是问题的 最优解最优解最优解也可能为多个。最优解也可能为多个。1/21/20239例例5.1 5.1 背包问题的实例背包问题的实例 设,设,n=3,M=20,(p1,p2,p3)=(25,24,15),(w1,w2,w3)=(18,15,10)。
11、可能的可行解如下:可能的可行解如下:(x1,x2,x3)(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.5n (1/2,1/3,6/10)20 29.5n (1/2,2/3,1/10)20 301/21/2023102.2.贪心策略求解贪心策略求解 度量标准度量标准的选择:三种不同的选择的选择:三种不同的选择1)以)以目标函数目标函数作为度量标准作为度量标准 即,每装入一件物品,就使背包背包获得即,每装入一件物品,就使背包背包获得最大最大可能的效益增量。可能的效益增量。该
12、度量标准下的该度量标准下的 处理规则:处理规则:按效益值的非增次序将物品一件件地放入到背包;按效益值的非增次序将物品一件件地放入到背包;如果正在考虑的物品放不进去,则只取其一部分装满背包:如果如果正在考虑的物品放不进去,则只取其一部分装满背包:如果该物品的一部分不满足获得最大效益增量的度量标准,则在该物品的一部分不满足获得最大效益增量的度量标准,则在剩下剩下的物品的物品种选择可以获得最大效益增量的其它物品,将它或其一部分装入背包。种选择可以获得最大效益增量的其它物品,将它或其一部分装入背包。如:若如:若M=2M=2,背包外还剩两件物品背包外还剩两件物品i,ji,j,且有且有(pi 4,wi4)
13、和和(pj 3,wj2),则下一步应选择则下一步应选择j而非而非i放入背包:放入背包:pi/2=2 pj 31/21/202311实例分析(例实例分析(例5.1)(p1,p2,p3)=(25,24,15),(w1,w2,w3)=(18,15,10)p1p2 p3 首先将首先将物品物品1 1放入背包,此时放入背包,此时x11,背包获得背包获得p125的效益增量,同时背包容的效益增量,同时背包容量减少量减少w118个单位,剩余空间个单位,剩余空间M=2M=2。其次考虑其次考虑物品物品2 2和和3 3。就。就M=2M=2而言有,只能选择物品而言有,只能选择物品2 2或或3 3的的一部分一部分装入背包
14、。装入背包。物品物品2 2:若若 x22/15,则则 p2 x216/53.1 物品物品3 3:若若 x32/10,则则 p3 x33 为使背包的效益有最大的增量,应选择为使背包的效益有最大的增量,应选择物品物品2的的2/15装包,即装包,即 x22/15 最后,背包装满,最后,背包装满,M=0M=0,故故物品物品3 3将不能装入背包,将不能装入背包,x30 。背包最终可以获得背包最终可以获得效益值效益值 x1 p1 x2 p2x3 p3 28.2 (次优解次优解,非问题的最优解非问题的最优解)1/21/2023122 2)以)以容量容量作为度量标准作为度量标准 以以目标函数目标函数作为度量标
15、准所存在的问题:尽管背包的效作为度量标准所存在的问题:尽管背包的效益值每次得到了最大的增加,但背包容量也过快地被消耗掉益值每次得到了最大的增加,但背包容量也过快地被消耗掉了,从而不能装入了,从而不能装入“更多更多”的物品。的物品。改进:让背包改进:让背包容量容量尽可能慢地消耗,从而可以尽量装入尽可能慢地消耗,从而可以尽量装入“更多更多”的物品。的物品。即,新的标准是:以即,新的标准是:以容量容量作为度量标准作为度量标准 该度量标准下的处理规则:该度量标准下的处理规则:按物品按物品重量的非降次序重量的非降次序将物品装入到背包;将物品装入到背包;如果正在考虑的物品放不进去,则只取其一部分装如果正在
16、考虑的物品放不进去,则只取其一部分装满背包;满背包;1/21/202313实例分析(例实例分析(例5.1)(p1,p2,p3)=(25,24,15),(w1,w2,w3)=(18,15,10)w3w2 w1 首先将首先将物品物品3放入背包,此时放入背包,此时x31,背包容量减少背包容量减少w310个单位,还剩个单位,还剩余空间余空间M=10。同时,同时,背包获得背包获得p315的效益增量的效益增量。其次考虑其次考虑物品物品1和和2。就。就M=10而言有,也只能选择物品而言有,也只能选择物品1或或2的的一部分一部分装装入背包。入背包。为使背包的按照为使背包的按照“统一统一”的规则,下一步将放入的
17、规则,下一步将放入物品物品2的的10/15装包,即装包,即 x210/152/3 最后,背包装满最后,背包装满M=0,故故物品物品1将不能装入背包,将不能装入背包,x10。背包最终可以获得背包最终可以获得效益值效益值 x1 p1 x2 p2x3 p3 31 (次优解次优解,非问题的最优解非问题的最优解)存在的问题:效益值没有得到存在的问题:效益值没有得到“最大最大”的增加的增加1/21/2023143)最优最优的度量标准的度量标准 影响背包效益值得因素:影响背包效益值得因素:n 背包的背包的容量容量Mn 放入背包中的物品的重量及其可能带来的效益值放入背包中的物品的重量及其可能带来的效益值可能的
18、策略可能的策略是:在背包效益值的增长速率和背包容量消耗速是:在背包效益值的增长速率和背包容量消耗速率之间取得率之间取得平衡平衡,即每次装入的物品应使它所占用的每一,即每次装入的物品应使它所占用的每一单单位容量位容量能获得当前最大的单位效益。能获得当前最大的单位效益。在这种策略下的在这种策略下的量度量度是:已装入的物品的累计效益值与所用是:已装入的物品的累计效益值与所用容量之比。容量之比。新的新的量度标准量度标准是:每次装入要使累计效益值与所用容量的比是:每次装入要使累计效益值与所用容量的比值有最多的增加(首次装入)和最小的减小(其后的装入)。值有最多的增加(首次装入)和最小的减小(其后的装入)
19、。按照物品的单位效益值:按照物品的单位效益值:pi/wi 比值(密度)的非增次序考虑。比值(密度)的非增次序考虑。1/21/202315实例分析(例实例分析(例5.1)5.1)(p1,p2,p3)=(25,24,15),(w1,w2,w3)=(18,15,10)p1/w1p3/w3 p2/w2 首先将首先将物品物品2 2放入背包,此时放入背包,此时x21,背包容量减少背包容量减少w215个单个单位,还剩余空间位,还剩余空间M=5M=5。同时,同时,背包获得背包获得p224的效益增量的效益增量。其次考虑其次考虑物品物品1 1和和3 3。此时,应选择物品。此时,应选择物品3,3,且就且就M=5M=
20、5而言有,也而言有,也只能放入物品只能放入物品3 3的的一部分一部分到背包中到背包中 。即即 x35/101/2 最后,背包装满最后,背包装满M=0M=0,故故物品物品1 1将不能装入背包,将不能装入背包,x10 。背包最终可以获得背包最终可以获得效益值效益值 x1 p1 x2 p2x3 p3 31.5 (最优解最优解)1/21/2023163.3.背包问题的贪心求解算法背包问题的贪心求解算法算法算法5.2 背包问题的贪心算法背包问题的贪心算法 procedure GREEDYKNAPSACK(P,W,M,X,n)/p(1:n)和和w(1:n)分别含有按分别含有按P(i)/W(i)P(i1)/
21、W(i1)排序的排序的n 件物品的效益值和重量。件物品的效益值和重量。M是背包的容量大小,而是背包的容量大小,而x(1:n)是解是解 向量向量/real P(1:n),W(1:n),X(1:n),M,cu;integer I,n X0/将解向量初始化为空将解向量初始化为空/cuM/cu是背包的剩余容量是背包的剩余容量/for i1 to n do if W(i)cu then exit endif X(i)1 cu cu-W(i)repeat if in then X(i)cu/W(i)endif end GREEDY-KNAPSACK1/21/2023174.4.最优解的证明最优解的证明 即
22、证明:由第三种策略所得到的贪心解是问题的即证明:由第三种策略所得到的贪心解是问题的最优解最优解。最优解最优解的含义:在满足约束条件的情况下,可使目标函数取极的含义:在满足约束条件的情况下,可使目标函数取极(大或小)值的可行解。贪心解是可行解,故只需证明:贪心解可使(大或小)值的可行解。贪心解是可行解,故只需证明:贪心解可使目标函数取得极值。目标函数取得极值。证明的证明的基本思想基本思想:将此贪心解与(假设中的)任一最优解:将此贪心解与(假设中的)任一最优解相比较相比较。如果这两个解相同,则显然贪心解就是最优解。否则,如果这两个解相同,则显然贪心解就是最优解。否则,这两个解不同,就去找开始这两个
23、解不同,就去找开始不同不同的第一个分量位置的第一个分量位置i,然后设法然后设法用贪心解的这个用贪心解的这个xi去去替换替换最优解的那个最优解的那个xi,并证明最优解在分量代换并证明最优解在分量代换前后总的效益值没有任何变化。前后总的效益值没有任何变化。可反复进行代换,直到新产生的最优解与贪心解完全一样。这一可反复进行代换,直到新产生的最优解与贪心解完全一样。这一代换过程中,最优解的代换过程中,最优解的效益值没有任何损失效益值没有任何损失,从而证明贪心解的效益,从而证明贪心解的效益值与代换前后最优解的效益值相同。即,贪心解如同最优解一样可取值与代换前后最优解的效益值相同。即,贪心解如同最优解一样
24、可取得目标函数的最大得目标函数的最大/最小值。最小值。从而得证:该从而得证:该贪心解贪心解也即问题的也即问题的最优解最优解。1/21/202318 定理定理5.1 如果如果p1/w1 p2/w2 pn/wn,则算法则算法GREEDY-KNAPSACK对于给定的背包问题实例生成一个最优解。对于给定的背包问题实例生成一个最优解。证明证明:设设X=(x1,x2,xn)是是GRDDDY-KNAPSACK所生成的所生成的贪心贪心解解 如果所有的如果所有的xi都等于都等于1,则显然则显然X就是问题的就是问题的最优解最优解。否则,。否则,设设j是使是使xi1的最小下标。由算法可知,的最小下标。由算法可知,l
25、 xi=1 1ij,l 0 xj 1l xi=0 jin 若若X不是问题的最优解,则必定存在一个可行解不是问题的最优解,则必定存在一个可行解 Y=(y1,y2,yn),使得:使得:且应有:且应有:1/21/202319 设设k是使得是使得yk xk的最小下标,则有的最小下标,则有yk xk:a)若若k0,当且仅当作业当且仅当作业i在其截至期限以前被在其截至期限以前被完成时,则获得完成时,则获得pi0的效益。的效益。问题问题:求这:求这n个作业的一个子集个作业的一个子集J,其中的所有作业都可在其截至期限其中的所有作业都可在其截至期限内完成。内完成。J是问题的一个可行解。是问题的一个可行解。可行解
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 算法 基础
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内