下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、用贪心算法求解背包问题D软件101 薛思雨 511020825一、贪心算法介绍顾名思义,贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。当然,希望贪心算法得到的最终结果也是整体最优的。虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。如单源最短路经问题,最小生成树问题等。在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。贪心算法求解的问题一般具有两个重要性质:贪心选择性质和最优子结构性质。所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优解的选择,即贪心选择
2、来达到。这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。问题的最优子结构性质是该问题可用动态规划算法或贪心算法求解的关键特征。二、贪心法的基本思路从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快的地求得更好的解。当达到某算法中的某一步不能再继续前进时,算法停止。该算法存在问题:1. 不能保证求得的最后解是最佳的;2. 不能用来求最大或最小解问题;3. 只能求满足某些约束条件的可行解的范围。三、关于贪心算法在背包问题中的应用的探讨问题描述:0-1背包问题:给定n种物品和一个背包。物品i的重量是Wi
3、,其价值为Vi,背包的容量为C。应如何选择装入背包的物品,使得装入背包中物品的总价值最大? 在选择装入背包的物品时,对每种物品i只有2种选择,即装入背包(1)或不装入背包(0)。不能将物品i装入背包多次,也不能只装入部分的物品i。背包问题:与0-1背包问题类似,所不同的是在选择物品i装入背包时,可以选择物品i的一部分,而不一定要全部装入背包,1in。贪心算法解决背包问题有几种策略:(i) 一种贪婪准则为:从剩余的物品中,选出可以装入背包的价值最大的物品,利用这种规则,价值最大的物品首先被装入(假设有足够容量),然后是下一个价值最大的物品,如此继续下去。这种策略不能保证得到最优解。例如,考虑n=
4、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,
5、即该项值和大小的比,再按比值的降序来排序,从第一项开始装背包,然后是第二项,依次类推,尽可能的多放,直到装满背包。有的参考资料也称为价值密度pi/wi贪婪算法。这种策略也不能保证得到最优解。利用此策略试解n= 3 ,w=20,15,15, p=40,25,25, c=30 时的最优解。虽然按pi /wi 非递(增)减的次序装入物品不能保证得到最优解,但它是一个直觉上近似的解。而且这是解决普通背包问题的最优解,因为在选择物品i装入背包时,可以选择物品i的一部分,而不一定要全部装入背包,1in。贪心算法解决背包问题的算法实现:#include "iostream" using
6、namespace std; struct goodinfo float p; /物品效益 float w; /物品重量 float X; /物品该放的数量 int flag; /物品编号 ;/物品信息结构体 void Insertionsort(goodinfo goods,int n) int j,i; for(j=2;j<=n;j+) goods0=goodsj; i=j-1; while (goods0.p>goodsi.p) goodsi+1=goodsi; i-; goodsi+1=goods0; /按物品效益,重量比值做升序排列 void bag(goodinfo g
7、oods,float M,int n) float cu; int i,j; for(i=1;i<=n;i+) goodsi.X=0; cu=M; /背包剩余容量 for(i=1;i<n;i+) if(goodsi.w>cu)/当该物品重量大与剩余容量跳出 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.flag&
8、lt;goodsi.flag) goodsi+1=goodsi; i-; goodsi+1=goods0; cout<<"最优解为:"<<endl; for(i=1;i<=n;i+) cout<<"第"<<i<<"件物品要放:" cout<<goodsi.X<<endl; int main(void) cout<<"|-运用贪心法解背包问题-|"<<endl; cout<<"|-|
9、"<<endl; int i,j,n; float M; goodinfo *goods; /定义一个指针 cout<<"press <1> to run the program"<<endl; cout<<"press <0> to exit"<<endl; cin>>j; while(j) cout<<"请输入物品的总数量:" cin>>n; goods=new struct goodinfo n+1;
10、 cout<<"请输入背包的最大容量:" cin>>M; cout<<endl; for(i=1;i<=n;i+) goodsi.flag=i; cout<<"请输入第"<<i<<"件物品的重量:" cin>>goodsi.w; cout<<"请输入第"<<i<<"件物品的效益:" cin>>goodsi.p; goodsi.p=goodsi.p/goodsi.w; /得出物品的效益,重量比 cout<<endl; Insertionsort(goods,n); bag(goods,M,n); cout<<"press <1> to run agian"<<endl; cout<<"press <0> to exit"<<endl; cin>>j; syst
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2027届贵州省安顺市高三六校第一次联考物理试卷(含答案解析)
- 2026-2027学年四川省自贡市高考考前提分物理仿真卷(含答案解析)
- 2×660MW清洁高效煤电项目可行性研究报告模板-立项拿地
- 门店玻璃广告投放合作正式合同范本
- GB30871-2022《危险化学品企业特殊作业安全规范》全面解读
- 深基坑支护安全检查细则
- 跨境算力中心与温泉地热协同中跨国温泉回灌热污染算力-基于国际温泉地热协会回灌热污染监测与算力调度指南规范分析
- 网络信息安全防护教育
- 药物过敏的健康教育
- 胆囊癌的治疗
- 2026浙江杭州胡庆余堂集团有限公司招聘6人笔试题库【巩固】附答案详解
- 校园超市经营投标方案(技术标)
- 2025年宜春市事业单位真题及答案
- 2026年北京市高考英语试卷(含答案及解析)
- 2026天津市津鉴检测技术发展有限公司社会招聘工作人员3人笔试历年常考点试题专练附带答案详解
- 高考物理一轮复习课件电磁感应单双杆模型图像问题
- 人工智能的伦理问题及其治理研究
- 员工工作态度培训PPT模板(含完整内容)11
- 四川省公路工程试验检测收费标准通用资料
- 对拉螺栓计算表
- 兴义八中小升初招生考试语文试题
评论
0/150
提交评论