




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
算法0-1背包问题算法0-1背包问题算法0-1背包问题算法0-1背包问题编制仅供参考审核批准生效日期地址:电话:传真:邮编:一、实验目的与要求掌握回溯法、分支限界法的原理,并能够按其原理编程实现解决0-1背包问题,以加深对回溯法、分支限界法的理解。要求分别用回溯法和分支限界法求解0-1背包问题;要求交互输入背包容量,物品重量数组,物品价值数组;要求显示结果。二、实验方案在选择装入背包的物品时,对每种物品i只有2种选择,即装入背包或不装入背包。不能将物品i装入背包多次,也不能只装入部分的物品i。三、实验结果和数据处理1.用回溯法解决0-1背包问题:代码:import.*;publicclassKnapsack{privatedouble[]p,w;d];w[i+1]=ww[q[i].id];}cw=;cp=;bestX=newint[n+1];heap=newMaxHeap(n);doublebestp=MaxKnapsack();for(intj=0;j<n;j++)xx[q[j].id]=bestX[j+1];returnbestp;}publicstaticvoidmain(String[]args){doublew[]=newdouble[5];w[1]=3;w[2]=5;w[3]=2;w[4]=1;doublep[]=newdouble[5];p[1]=9;p[2]=10;p[3]=7;p[4]=4;doublec=7;intx[]=newint[5];doublem=Knapsack(p,w,c,x);"优先队列式分支限界法:");"物品个数:n=4");"背包容量:c=7");"物品重量数组:w={3,5,2,1}");"物品价值数组:p={9,10,7,4}");"最优值:="+m);"选中的物品是:");for(inti=1;i<=4;i++)"");}}pperProfit;if(upperProfit<xup)return-1;if(upperProfit==xup)return0;elsereturn1;}}classElementimplementsComparable{intid;doubled;publicElement(intidd,doubledd){id=idd;d=dd;}publicintcompareTo(Objectx){doublexd=((Element)x).d;if(d<xd)return-1;if(d==xd)return0;return1;}publicbooleanequals(Objectx){returnd==((Element)x).d;}}classMaxHeap{staticHeapNode[]nodes;staticintnextPlace;staticintmaxNumber;publicMaxHeap(intn){maxNumber=(int)((double)2,(double)n);nextPlace=1;pperProfit<nodes[j+1].upperProfit)++j;if(!<nodes[j].upperProfit))break;nodes[s]=nodes[j];s=j;}nodes[s]=rc;}privatestaticvoidheapSort(HeapNode[]nodes){for(inti=(nextPlace-1)/2;i>0;--i){heapAdjust(nodes,i,nextPlace-1);}}}运行结果:3.用队列式分支限界法解决0-1背包问题:代码:#include<>#include<>#defineMAXNUM100structnode{ intstep; doubleprice;doubleweight;doublemax,min;unsignedlongpo;};typedefstructnodeDataType;structSeqQueue{/*顺序队列类型定义*/ intf,r; DataTypeq[MAXNUM];};typedefstructSeqQueue*PSeqQueue;PSeqQueuecreateEmptyQueue_seq(void){ PSeqQueuepaqu; paqu=(PSeqQueue)malloc(sizeof(structSeqQueue)); if(paqu==NULL) printf("Outofspace!!\n"); else paqu->f=paqu->r=0; returnpaqu;}intisEmptyQueue_seq(PSeqQueuepaqu){ returnpaqu->f==paqu->r;}/*在队列中插入一元素x*/voidenQueue_seq(PSeqQueuepaqu,DataTypex){if((paqu->r+1)%MAXNUM==paqu->f) printf("Fullqueue.\n"); else { paqu->q[paqu->r]=x;paqu->r=(paqu->r+1)%MAXNUM; }}/*删除队列头元素*/voiddeQueue_seq(PSeqQueuepaqu){ if(paqu->f==paqu->r) printf("EmptyQueue.\n"); else paqu->f=(paqu->f+1)%MAXNUM;}/*对非空队列,求队列头部元素*/DataTypefrontQueue_seq(PSeqQueuepaqu){ return(paqu->q[paqu->f]);}/*物品按性价比从新排序*/voidsort(intn,doublep[],doublew[]){ inti,j; for(i=0;i<n-1;i++) for(j=i;j<n-1;j++) { doublea=p[j]/w[j]; doubleb=p[j+1]/w[j+1]; if(a<b) { doubletemp=p[j];p[j]=p[j+1];p[j+1]=temp;temp=w[j];w[j]=w[j+1];w[j+1]=temp;}}}/*求最大可能值*/doubleup(intk,doublem,intn,doublep[],doublew[]){ inti=k;doubles=0;while(i<n&&w[i]<m) { m-=w[i];s+=p[i];i++;}if(i<n&&m>0) { s+=p[i]*m/w[i];i++;} returns;}/*求最小可能值*/doubledown(intk,doublem,intn,doublep[],doublew[]){inti=k;doubles=0;while(i<n&&w[i]<=m) {m-=w[i];s+=p[i];i++;}returns;}/*用队列实现分支定界算法*/doublesolve(doublem,intn,doublep[],doublew[],unsignedlong*po){ doublemin;PSeqQueueq=createEmptyQueue_seq();DataTypex={0,0,0,0,0,0};sort(n,p,w);=up(0,m,n,p,w);=min=down(0,m,n,p,w);if(min==0)return-1;enQueue_seq(q,x);while(!isEmptyQueue_seq(q)) { intstep;DataTypey;x=frontQueue_seq(q);deQueue_seq(q); if<min)continue;step=+1;if(step==n+1)continue;=+up(step,m-,n,p,w);if>=min) { =+down(step,,n,p,w);=;=;=step;=<<1;if>=min) { min=;if(step==n)*po=;}enQueue_seq(q,y);}if+w[step-1]<=m) { =+p[step-1]+ up(step,[step-1],n,p,w);if>=min){=+p[step-1]+ down(step,[step-1],n,p,w);=+p[step-1];=+w[step-1];=step;=<<1)+1;if>=min) { min=;if(step==n)*po=;}enQueue_seq(q,y); } } } returnmin;}#definen4doublem=7;doublep[n]={9,10,7,4};doublew[n]={3,5,1,2};in
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025北京市人力资源和社会保障局劳动合同样本
- 2025房地产开发合同模板
- 小区垃圾清理方案范本
- 升降道闸安装施工方案
- 机电技术应用教授科目
- 农场流转合同样本
- 2025年智能化项目委托监理合同范本示例
- 2025年宁夏短期用工合同范本参考
- 经营目标完成情况的检讨与调整计划
- 班级学生个性发展的支持措施计划
- 部编版小学语文四年级下册教师教学用书
- 钢结构与玻璃雨棚的抗风设计施工方案
- 管理制度企业安全生产管理制度(范本)
- 手术室护理带教
- 化工厂施工吊装方案
- DB14∕T 1795-2019 连翘种子标准规范
- 《传感器与检测技术》练习题集
- 《自贡市医疗服务项目价格汇编(2023版)》
- 电动车带牌过户免责协议书
- (完整版)大学英语六级单词表
- 新疆大学答辩模板课件模板
评论
0/150
提交评论