- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第3章 贪心算
第3章 贪心算法 贪心算法的直观含义 1. 例1.找硬币方法就是一种贪心算法. 2.顾名思义,贪心算法总是作出在当前看来是最好的选择。也就是说贪心算法不从整体最优上加以考虑,它所作出的选择只是在某种意义上的局部最优选择。 当然,我们希望贪心算法得到的最终结果也是整体最优的。虽然贪心算法不是对所有问题都能得到整体最优解,但对范围相当广的许多问题它都能产生最优解。如单源最短路径问题,最小生成树问题等。 而且,在一些情况下,即使贪心算法不能得到整体最优解,但其最终结果却是最优解的很好的近似解! 3.1一般方法 贪心方法适合的问题:它有n个输入,而它的解就由这n个输入满足某些事先给定的约束条件的某个子集组成,而把满足约束条件的子集称为该问题的可行解。显然,可行解一般来说是不唯一的。那些使目标函数取极值(极大或极小)的可行解,称为最优解。 贪心方法是求解这一类需求取最优解的问题的一种直接 有效的方法。贪心方法是一种分级处理方法,它首先根据题 意,选取一种量度标准。然后按这种量度标准对这n个输入 排序,并按序一次输入一个量。如果这个输入量的加入,不 满足约束条件,则不把此输入加到这部分解中。 贪心方法的抽象化控制 算法3.1 procedure GREEDY(A,n) //A(1:n)包含n个输入// solutions←φ //将解向量solution初始化为空/ for i←1 to n do x←SELECT(A) if FEASIBLE(solution,x) then solutions←UNION(solution,x) endif repeat return(solution) end GREEDY n个输入按某种量度标准排序 3.2 背包问题 问题:已知有n种物品和一个可容纳M重量的背包,每种物品i的重量为wi。假定将物品i的一部分xi放入背包就会得到pixi的效益,这里,0≤xi≤1,pi0。如果这些 物品重量的和大于M,要求所有选中要装入背包的物品总重 量不得超过M,而装入背包物品获得的总效益最大。即 例3.1 n=3,M=20,P=(25,24,15), W (18,15,10)。其中的四个可行解是: (x1,x2,x3) ∑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 在这四个可行解中,第④个解的效益值最大。这个解是背 包问题在这一情况下的最优解。 例,n=3,M=25,P=(25,24,15), W (18,15,10)。 X=(1) ∑p=25, CU=M-W(1)=7 不能放下任何物品,显然X=(1)不是最优解。 最优解是(2,3),利润为39。 贪心策略与最优量度表 目标函数作为量度标准 这是最容易想到的,即每装入一件物品就使背包获得最大可能的效益值增量。在这种量度标准下的贪心方法就是按效益值的非增次序将物品一件件放到背包中去。如果正在考虑中的物品放不进去,则可只取其一部分来装满背包。第②个解就是这种量度标准下的贪心方法所产生的解,显然它不是最优的。原因在于背包可用容量消耗过快。 容量作为量度 让背包容量尽可能慢地被消耗。这就要求按物品重量的非降次序来把 物品放人背包。例3.1的解③就是使用这种贪心策略得到的,它仍不是最 优解。其原因在于容量虽然慢慢地被消耗,但效益值没能迅速地增加。 利润/重量为量度 即每一次装入的物品应使它占用的每一单位容量获得当前最大的单 位效益。这就需使物品的装人次序按pi/wi比值的非增次序来考虑。解④ 就是使用这种贪心策略得到的,它是最优解。 算法3.2 背包问题的贪心算法 procedure KNAPSACK(P,W,M,X,n) //P(1:n)和W(1;n)分别含有按 P(i)/W(i)≥P(i+1)/W(i+1)排序的n件物品的效益值 和重量。M是背包的容量大小,而x(1:n)是解向量// real P(1:n),W(1:n),X(1:n),M,cu; integer i,n; X←0 //将解向量初始化为零// cu←M //cu是背包剩余容量// for i←1 to n do if W(i)cu then exit endif X(i) ←
文档评论(0)