第4章 贪心算法_第1页
第4章 贪心算法_第2页
第4章 贪心算法_第3页
第4章 贪心算法_第4页
第4章 贪心算法_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章贪心算法找钱问题:假设有四种硬币,它们的面值分别是二角五分、一角、五分和一分,现在找给某顾客四角七分钱,该如何找零使得所找钱的硬币数最少?

从最大面值的币种开始,按递减的顺序考虑各币种,先尽量用大面值的币种,当不足大面值币种的金额时才去考虑下一种较小面值的币种。这就是在使用贪婪法:作出在当前看来是最好的选择,即贪心算法并不从整体最优上考虑,而只考虑当前(局部)最优。贪心算法顾名思义,贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。当然,希望贪心算法得到的最终结果也是整体最优的。虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。图的最小生成树:Prim算法

从图的一个指定的顶点出发,用V表示树顶点集,初始只有那个指定的顶点;E表示最终最小生成树中有的边的集合,初始是空集。从V中的顶点出发,找到从这个顶点出发的权值最小的边,如果这条边不构成回边,那么选入最小生成树,并将这条边加到E集合中,边的另一端结点加入到V集合中。这样一直循环到V中的顶点为图的所有顶点为止,最小生成树就存在E集合里面了。Kruskal算法

从边的角度出发,每一次将图中的权值最小的边取出来,在不是回边,也就是说不构成环的情况下,将边加入最小生成树中,重复这个过程,直到所有的图中所有的点都加入到最小生成树中结束。单起点最短路径问题:Dijkstra算法:的输入就是一个连通图,再加上一个顶点s。输出对于图中所有顶点来说从起始顶点s到它们的最短路径长度和路径上的倒数第二个顶点。和最大在N行M列的正整数矩阵中,要求从每行中选出1个数,使得选出的总共N个数的和最大。

分析分析:要使总和最大,则每个数要尽可能大,自然应该选每行中最大的那个数。因此,我们设计出如下算法:

读入N,M,矩阵数据;

Total:=0;ForI:=1toNdobegin {对N行进行选择}

选择第I行最大的数,记为K;

Total:=Total+K;

End;输出最大总和Total;小结从上例中我们可以看出,和递推法相仿,贪心法也是从问题的某一个初始解出发,向给定的目标递推。但不同的是,推进的每一步不是依据某一固定的递推式,而是做一个局部的最优选择,即贪心选择(在例中,这种贪心选择表现为选择一行中的最大整数),这样,不断的将问题归纳为若干相似的子问题,最终产生出一个全局最优解。特别注意的是是,局部贪心的选择是否可以得出全局最优是能否采用贪心法的关键所在。对于能否使用贪心策略,应从理论上予以证明。下面我们看看另一个问题。

部分背包问题

给定一个最大载重量为M的卡车和N种食品,有食盐,白糖,大米等。已知第i种食品的最多拥有Wi公斤,其商品价值为Vi元/公斤,编程确定一个装货方案,使得装入卡车中的所有物品总价值最大。

分析分析:因为每一个物品都可以分割成单位块,单位块的利益越大显然总收益越大,所以它局部最优满足全局最优,可以用贪心法解答,方法如下:先将单位块收益按从大到小进行排列,然后用循环从单位块收益最大的取起,直到不能取为止便得到了最优解。

因此我们非常容易设计出如下算法:问题初始化; {读入数据}

按Vi从大到小将商品排序;

I:=1;repeatifM=0thenBreak; {如果卡车满载则跳出循环}M:=M-Wi;ifM>=0then将第I种商品全部装入卡车

else

将(M+Wi)重量的物品I装入卡车;I:=I+1; {选择下一种商品}until(M<=0)OR(I>=N)

在解决上述问题的过程中,首先根据题设条件,找到了贪心选择标准(Vi),并依据这个标准直接逐步去求最优解小结利用贪心策略解题,需要解决两个问题:首先,确定问题是否能用贪心策略求解;一般来说,适用于贪心策略求解的问题具有以下特点:①

可通过局部的贪心选择来达到问题的全局最优解。运用贪心策略解题,一般来说需要一步步的进行多次的贪心选择。在经过一次贪心选择之后,原问题将变成一个相似的,但规模更小的问题,而后的每一步都是当前看似最佳的选择,且每一个选择都仅做一次。小结②原问题的最优解包含子问题的最优解,即问题具有最优子结构的性质。在背包问题中,第一次选择单位质量最大的货物,它是第一个子问题的最优解,第二次选择剩下的货物中单位重量价值最大的货物,同样是第二个子问题的最优解,依次类推。其次,如何选择一个贪心标准?正确的贪心标准可以得到问题的最优解,在确定采用贪心策略解决问题时,不能随意的判断贪心标准是否正确,尤其不要被表面上看似正确的贪心标准所迷惑。在得出贪心标准之后应给予严格的数学证明。

0-1背包问题

给定一个最大载重量为M的卡车和N种动物。已知第i种动物的重量为Wi,其最大价值为Vi,设定M,Wi,Vi均为整数,编程确定一个装货方案,使得装入卡车中的所有动物总价值最大。

分析对于N种动物,要么被装,要么不装,也就是说在满足卡车载重的条件下,如何选择动物,使得动物价值最大的问题。即确定一组X1,X2,…,Xn,Xi∈{0,1}f(x)=max(∑Xi*Vi)其中,∑(Xi*Wi)≦W从直观上来看,我们可以按照上例一样选择那些价值大,而重量轻的动物。也就是可以按价值质量比(Vi/Wi)的大小来进行选择。可以看出,每做一次选择,都是从剩下的动物中选择那些Vi/Wi最大的,这种局部最优的选择是否能满足全局最优呢?我们来看看一个简单的例子:设N=3,卡车最大载重量是100,三种动物A、B、C的重量分别是40,50,70,其对应的总价值分别是80、100、150。1)情况A:按照上述思路,三种动物的Vi/Wi分别为2,2,2.14。显然,我们首先选择动物C,得到价值150,然后任意选择A或B,由于卡车最大载重为100,因此卡车不能装载其他动物。2)情况B:不按上述约束条件,直接选择A和B。可以得到价值80+100=180,卡车装载的重量为40+50=90。没有超过卡车的实际载重,因此也是一种可行解,显然,这种解比上一种解要优化。问题出现在什么地方呢?我们看看图图23卡车装载货物情况分析从图23中明显可以看出,情况A,卡车的空载率比情况B高。也就是说,上面的分析,只考虑了货物的价值质量比,而没有考虑到卡车的运营效率,因此,局部的最优化,不能导致全局的最优化。因此,贪心不能简单进行,而需要全面的考虑,最后得到证明。地图着色

要求相邻的区域用不同的颜色,颜色尽量少地图着色(2)要求给出最少的着色分组的地图。着色最优解问题。穷举法或回溯法来解决地图着色问题。对于小型地图可以使用对于大型地图,由于时间的指数上升,不可接受往往通过一些逼近方法来求近似最优解地图着色:贪心法用一种颜色给尽可能多的顶点着色选择某未着色的顶点并用该新颜色上色扫描未着色的其他各顶点,考察它们是否有边与该颜色着色的顶点相连,若没有边相连就用该颜色上色。换一种颜色重复前一步骤直到所有顶点全部着色为止贪心法近似解按1、2、3、4、5顺序着色最优解排队打水问题

有N个人排队到R个水龙头去打水,他们装满水桶的时间为T1,T2,…,Tn为整数且各不相等,应如何安排他们的打水顺序才能使他们花费的时间最少?

分析

由于排队时,越靠前面的计算的次数越多,显然越小的排在越前面得出的结果越小(可以用数学方法简单证明,这里就不再赘述),所以这道题可以用贪心法解答,基本步骤:(1)

将输入的时间按从小到大排序;(2)

将排序后的时间按顺序依次放入每个水龙头的队列中;(3)

统计,输出答案。哈夫曼编码书上例题贪心算法的优势贪心算法所作的选择可以依赖于以往所作过的选择,但决不依赖于将来的选择,也不依赖于子问题的解,因此贪心算法与其它算法相比具有一定的速度优势。如果一个问题可以同时用几种方法解决,贪心算法应该是最好的选择之一。

贪心算法存在问题

1.不能保证求得的最后解是最佳的;

2.不能用来求最大或最小解问题;

3.只能求满足某些约束条件的可行解的范围。

区别1动态规划法先求子问题的解,然后通过求解子问题构造原问题的解;而贪心算法是直接地解原问题。区别2动态规划法通过对若干局部最优解的比较,去掉了次优解,从而产生了更高一层次的局部最优解。相当于对较低层次的局部最优解进行贪心的选择而得到高一级的局部最优解,因而最终产生一个最高层次的局部最优解。而贪心法每阶段只作一个挑选,各阶段的解一经选出就固定不变了,后阶段的局部最优是基于前阶段的挑选,所以往往只能求出次优解

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论