版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、算法设计与分析实验报告实验二 0-1背包问题院系: 班级: 计算机科学与技术学号: 姓名: 任课教师: 成绩:湘 潭 大 学2016年5月实验二 0-1背包问题1. 实验内容分别编程实现动态规划算法和贪心法求0-1背包问题的最优解,分析比较两种算法的时间复杂度并验证分析结果。二实验目的1、掌握动态规划算法和贪心法解决问题的一般步骤,学会使用动态规划和贪心法解决实际问题;2、理解动态规划算法和贪心法的异同及各自的适用范围。三. 算法描述/*动态规划 0-1背包问题算法如下*/TemplateVoid Knapsack(Type v,int w,int c,int n,Type * m)int j
2、Max = min(wn - 1,c);For(int j = 0;j = jMax;j+)mnj = 0;For(int j = wn;j 1;i-)jMax = min(wi - 1,c);For(int j = 0;j = jMax;j+) mij = mi+1j;For(int j = wi;j = w1) m1c = max(m1c,m2c-w1+v1);TemplateVoid Traceback(Type*m,int w,int c,int n,int x)for(int i =1 ;i n;i +)If(mic = mi+1c) xi = 0;Elsexi = 1;c -=wi
3、;xn = (mnc) ? 1:0;按上述算法Knapsack计算后m1c给出所要求的0-1背包问题的最优解。相应的最优解可由算法Traceback计算如下。如果m1c =m2c,则x1 = 0,否则x1 = 1。当x1=0时,由m2c继续构造最优解。当x1 = 1时,由m2c-w1继续构造最优解。以此类推,可构造出相应的最优解(x1,x2,.,xn),时间复杂性O(n2n)。/*贪心法 0-1背包问题*/首先计算每种物品单位重量的价值Vi/Wi,然后,依贪心选择策略,将尽可能多的单位重量价值最高的物品装入背包。若将这种物品全部装入背包后,背包内的物品总重量未超过C,则选择单位重量价值次高的物
4、品并尽可能多地装入背包。依此策略一直地进行下去,直到背包装满为止。四. 算法实现1. 数据结构及函数说明在该问题中物品质量Wn和包所能承受的最大重量都是又用户自己任意定义的,在实现的过程中用到一个栈来实现。第i件物品的选择有两种可能:i.物品i被选择,这种可能性仅当包含它不会超过方案总重量的限制时才是可行的。选中后。继续其余物品的选择;ii.物品i不被选择,这种可能性仅当不包含物品i不满足条件的情况。现以第一个物品为例,当物品1不被选择,则问题转变为相对于其他物品(2,3,n),背包重量仍然为maxweight;若物品1被选择,问题就变为关于最大背包重量为maxweight-w1的问题,现设r
5、maxweight,maxweight-w1为剩余重量的背包问题。2. 源程序代码/*动态规划 0-1背包问题*/#include#include int V200200; int max(int a,int b) if(a=b) return a; else return b; int KnapSack(int n,int w,int v,int x,int C) int i,j; for(i=0;i=n;i+) Vi0=0; for(j=0;j=C;j+) V0j=0; for(i=0;i=n-1;i+) for(j=0;j=C;j+) if(j=0;i-) if(VijVi-1j) xi
6、=1; j=j-wi; else xi=0; printf(n选中的物品是:n); for(i=0;in;i+) printf(%d ,xi); printf(n); return Vn-1C; void main() double start,finish; start=clock(); int s; int w15; int v15; int x15; int n,i; int C; n=5; printf(背包的最大容量:); scanf(%d,&C); printf(输入物品个数:); scanf(%d,&n); printf(n请分别输入物品的重量:n); for(i=0;in;i+
7、) scanf(%d,&wi); printf(n请分别输入物品的价值:n); for(i=0;in;i+) scanf(%d,&vi); s=KnapSack(n,w,v,x,C); printf(nMax_V:); printf(%dn,s); finish=clock(); printf(所需时间 %f msn,(finish-start); /*贪心法 0-1背包问题*/#include#includeint max(int a,int b) if(ab)return a;elsereturn b;void Knapsack(int *v,int *w,int *x,int c,int
8、 n, int m8100) int i,j;for(j=0; jc; j+) if(j=1; i-) for(j=wi; j=c; j+)mij=max(mi+1j,mi+1j-wi+vi);for(i=1; in; i+) if(mic=mi+1c)xi=0;else xi=1;c=c-wi;xn=(mnc)?1:0;return;int main() double start,finish; start=clock();int i=0;int n=5;int w= 0,30,20,40,40,40;int v= 0,40,20,30,40,30;int x= 0,0,0,0,0,0,0,
9、0;printf(背包的最大容量:100n);printf(物品个数为:5n);printf(物品重量分别为:);for (i=1; i=n; i+)printf(%d ,wi);printf(n物品价值分别为:);for (i=1; i=n; i+)printf(%d ,vi);int m=100;int array8100= 0;Knapsack(v,w,x,m,7,array);printf(nMAX_V: %dn,array1m);printf(选择的物品: );for(i=1; i=n; i+) if(i=1)printf(%d,xi);elseprintf( %d,xi);printf(n);finish=clock();/取结束时间printf(所需时间 %f msn,(finish-start);return 0;5 程序运行结果动态规划 0-1背包问题运行结果截图贪心法 0-1背包问题结果及截图6 实验结果分析动态规划求0-1背包问题可以得出最优解,而用贪心法求0-1背包问题可能会得不到最优解。分析:对于0-1背包问题,贪心算法之所以不能得到最优解是因为在这种情况下,它无法保证最后能将背包装满,部分闲置的背包空间,使每公斤背包的价值降低了。以上算法的时间复杂度和空间复杂度为O(n*n),其中时间复杂度基本已经不能再
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【文档】应急管理部18号令《安全生产违法行为行政处罚办法》重点解读
- 2024-2025学年反射疗法师3级经典例题重点附答案详解
- 证据支持下的护理实践
- 紧急项目进度通报回复函7篇范本
- 2024-2025学年公务员(省考)考前冲刺试卷(考点梳理)附答案详解
- 2024-2025学年云南交通职业技术学院电视播音主持期末考试考前冲刺试卷及参考答案详解(达标题)
- 2024-2025学年度执业兽医试题(夺分金卷)附答案详解
- 2024-2025学年度专升本试卷带答案详解(达标题)
- 2024-2025学年度收银审核员模拟试题【有一套】附答案详解
- 2024-2025学年度烟台汽车工程职业学院单招数学题库试题附参考答案详解【巩固】
- 2026年宁夏葡萄酒与防沙治沙职业技术学院自主公开招聘工作人员考试参考试题及答案解析
- 推动职业教育国际化-交流协会的探索与实践
- 2026中央台办所属事业单位招聘10人笔试备考试题及答案解析
- 2025年“安全生产月”《安全知识》培训考试题库及答案
- 2026浙江台州市港航事业发展中心招聘2人考试备考试题及答案解析
- 腹膜透析护理实践指南(2025年版)
- GB/T 1535-2026大豆油
- 2026年临汾职业技术学院单招职业倾向性考试题库含答案详解(完整版)
- 2026校招:远大物产集团试题及答案
- 康复中心考核制度
- 点金手丰年课件在线看
评论
0/150
提交评论