


全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
算法分析与设计 3用贪心算法求解背包问题D软件101 薛思雨 511020825一、贪心算法介绍顾名思义,贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。当然,希望贪心算法得到的最终结果也是整体最优的。虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。如单源最短路经问题,最小生成树问题等。在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。贪心算法求解的问题一般具有两个重要性质:贪心选择性质和最优子结构性质。所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优解的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。问题的最优子结构性质是该问题可用动态规划算法或贪心算法求解的关键特征。二、贪心法的基本思路从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快的地求得更好的解。当达到某算法中的某一步不能再继续前进时,算法停止。该算法存在问题:1. 不能保证求得的最后解是最佳的;2. 不能用来求最大或最小解问题;3. 只能求满足某些约束条件的可行解的范围。三、关于贪心算法在背包问题中的应用的探讨问题描述:0-1背包问题:给定n种物品和一个背包。物品i的重量是Wi,其价值为Vi,背包的容量为C。应如何选择装入背包的物品,使得装入背包中物品的总价值最大? 在选择装入背包的物品时,对每种物品i只有2种选择,即装入背包(1)或不装入背包(0)。不能将物品i装入背包多次,也不能只装入部分的物品i。背包问题:与0-1背包问题类似,所不同的是在选择物品i装入背包时,可以选择物品i的一部分,而不一定要全部装入背包,1in。贪心算法解决背包问题有几种策略:(i) 一种贪婪准则为:从剩余的物品中,选出可以装入背包的价值最大的物品,利用这种规则,价值最大的物品首先被装入(假设有足够容量),然后是下一个价值最大的物品,如此继续下去。这种策略不能保证得到最优解。例如,考虑n=2, w=100,10,10, p =20,15,15, c = 105。当利用价值贪婪准则时,获得的解为x= 1 , 0 , 0 ,这种方案的总价值为2 0。而最优解为 0 , 1 , 1 ,其总价值为3 0。(ii) 另一种方案是重量贪婪准则是:从剩下的物品中选择可装入背包的重量最小的物品。虽然这种规则对于前面的例子能产生最优解,但在一般情况下则不一定能得到最优解。考虑n= 2 ,w=10,20, p=5,100, c= 2 5。当利用重量贪婪策略时,获得的解为x =1,0, 比最优解 0 , 1 要差。(iii) 还有一种贪婪准则,就是我们教材上提到的,认为,每一项计算yi=vi/si,即该项值和大小的比,再按比值的降序来排序,从第一项开始装背包,然后是第二项,依次类推,尽可能的多放,直到装满背包。有的参考资料也称为价值密度pi/wi贪婪算法。这种策略也不能保证得到最优解。利用此策略试解n= 3 ,w=20,15,15, p=40,25,25, c=30 时的最优解。虽然按pi /wi 非递(增)减的次序装入物品不能保证得到最优解,但它是一个直觉上近似的解。而且这是解决普通背包问题的最优解,因为在选择物品i装入背包时,可以选择物品i的一部分,而不一定要全部装入背包,1in。贪心算法解决背包问题的算法实现:#include iostream using namespace std; struct goodinfo float p; /物品效益 float w; /物品重量 float X; /物品该放的数量 int flag; /物品编号 ;/物品信息结构体 void Insertionsort(goodinfo goods,int n) int j,i; for(j=2;jgoodsi.p) goodsi+1=goodsi; i-; goodsi+1=goods0; /按物品效益,重量比值做升序排列 void bag(goodinfo goods,float M,int n) float cu; int i,j; for(i=1;i=n;i+) goodsi.X=0; cu=M; /背包剩余容量 for(i=1;icu)/当该物品重量大与剩余容量跳出 break; goodsi.X=1; cu=cu-goodsi.w;/确定背包新的剩余容量 if(i=n) goodsi.X=cu/goodsi.w;/该物品所要放的量 /按物品编号做降序排列 for(j=2;j=n;j+) goods0=goodsj; i=j-1; while (goods0.flaggoodsi.flag) goodsi+1=goodsi; i-; goodsi+1=goods0; cout最优解为:endl; for(i=1;i=n;i+) cout第i件物品要放:; coutgoodsi.Xendl; int main(void) cout|-运用贪心法解背包问题-|endl; cout|-|endl; int i,j,n; float M; goodinfo *goods; /定义一个指针 coutpress to run the programendl; coutpress to exitj; while(j) coutn; goods=new struct goodinfo n+1; coutM; coutendl; for(i=1;i=n;i+) goodsi.flag=i; cout请输入第igoodsi.w; cout请输入第igoodsi.p; goodsi.p=goodsi.p/goodsi.w; /得出物品的效益,重量比 coutendl; Insertionsort(goods,n); bag(goods,M,n); coutpress to run agianendl; coutpress to exitj; system(pause); return 0; 四
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- EBI课件教学课件
- EAP培训课件教学课件
- DVR与NVR基础知识培训
- dsb培训课件教学课件
- 《跨学科实践:制作隔音房间模型》说课稿及反思-人教版(2024)物理八年级上册
- 2025年健康促进护理题库及答案
- 第11课 感受别样的热闹-多彩的节日教学设计小学地方、校本课程粤教版国际理解教育
- 9心中的110-不要上当受骗(第2课时)(教学设计)统编版道德与法治三年级上册
- (正式版)DB65∕T 4292-2020 《牛羊布鲁氏菌病荧光偏振(FPA)检测方法》
- (正式版)DB65∕T 4220-2019 《黄檗育苗技术规程》
- 人生的因拼搏而精彩课件
- 2025年国企综合笔试试题及答案
- 中药用药安全知识培训课件
- 老旧护栏加固施工方案
- 中国资源循环集团有限公司子公司招聘笔试题库2025
- 雨季行车安全培训
- 2025年青海海东通信工程师考试(通信专业实务终端与业务)高、中级考前题库及答案
- 2025年浙江省档案职称考试(档案高级管理实务与案例分析)综合能力测试题及答案
- 景区接待培训课件
- 部编人教版二年级上册语文全册教学设计(配2025年秋改版教材)
- 2025年郑州航空港经济综合实验区招聘社区工作人员120名考试参考题库附答案解析
评论
0/150
提交评论