背包算法问题.docxVIP

  • 8
  • 0
  • 约2.12千字
  • 约 4页
  • 2023-08-13 发布于天津
  • 举报
背包问题贪心方法实验日志 实验题目 1)求以下情况背包问题的最优解:n=7,M=15,(p1,…,p7)=(10,5,15,7,6,18,3)和(*,…,七)=(2,3,5,7,1,4,1)。 实验目的: 掌握贪心方法算法思想;熟练使用贪心算法之背包问题解决相应的问题。 实验思想: 贪心方法是一种改进了的分级处理方法。它首先根据题意,选取一种量度标准。 然后按这种量度标准对这n个输入排序,并按排序一次输入一个量。如果这个输入和当前已构成在这种量度意义下的部分最优解加在一起不能产生一个可行解,则不把此解输入加到这部分解中。这种能够得到某种度量意义下的最优解的分级处理方法称为贪心方法。 1.背包问题(1)背包问题的描述:已知有n种物品和一个可容纳M重量的背包,每种物品i的重量为w。假定将物品i的一部分x放入背包就会得到px的效益,这里,iiii 0X,1,pi0。显然,由于背包容量是M,因此,要求所有选中要装入背包的物品总重量不得超过M.。如果这n件物品的总重量不超过M,则把所有物品装入背包自然获得最大效益。现需解决的问题是,这些物品重量的和大于M,该如何装包。由以上叙述,可将这个问题形式表述如下: 极大化£PXii1in约束条件£wxMii1in0x.1,p0,w^0,1in (2)用贪心策略求解背包问题首先需选出最优的量度标准。不妨先取目标函数作为量度标准,即每装入一件物品就使背包获得最大可能的效益值增量。在这种量度标准下的贪心方法就是按效益值的非增次序将物品一件件放到背包中去。如果正在考虑中的物品放不进去,则可只取其一部分来装满背包。但这最后一次的方法可能不符合使背包每次获得最大效益增量的量度标准,这可以换一种能获得最大增量的物品,将它(或它的一部分)放入背包,从而使最后一次装包也符合量度标准的要求。算法如下所示。 算法2.1背包问题的贪心算法procedureGREEDY-KNAPSACK(P,W,虬X,n) //P(1:n)和W(1:n)分别含有按P(i)/W(i)NP(i+1)/W(i+1)排序的n件物品的效益值和重量。M是背包的容量大笑,而X(1:n)是解向量。// realP(1:n),W(1:n),X(1:n),M,cu;integeri,n;XJ0//将解向量初始化为零 cuJM//cu是背包剩余容量 foriJ1tondoifW(i)cuthenexitendifX(i)J1cuJcu-W(i) repeat ifiWnthenX(i)Jcu/W(i) endif endGREEDY-KNAPSACK 实验代码: #includeiostream usingnamespacestd; voidbeibao(double*w,double*v,double*x,doublen,double*C) { inti,j,temp; for(i=0;in-1;i++) for(j=i+1;jn;j++) if(v[i]/w[i]v[j]/w[j]) { temp=v[i]; v[i]=v[j]; v[j]=temp; temp=w[i]; w[i]=w[j]; w[j]=temp; } for(i=0;in;i++) x[i]=0; for(i=0;*C!=0;i++) { if(w[i]*C) {x[i]=w[i];*C=*C-w[i]; } else {x[i]=*C;*C=*C-*C; } } } voidmain() { inti; double*w,*v,n,C; double*x; cout请输入物品数endl; cinn; w=newdouble(n);//动态分配内存 v=newdouble(n); x=newdouble(n); cout请输入背包的容量endl; cinC; cout请分别输入n个物品的重量:endl; for(i=0;in;i++) cinw[i]; cout请分别输入n个物品的价值:endl; for(i=0;in;i++) cinv[i]; beibao(w,v,x,n,C); cout装入的物品为:endl; for(i=0;in;i++) { if(x[i]!=0) cout其装的重量为:x[i]其价值为:v[i]; } coutendl; } } 实验结果: JeJj*flF:背包l°j3\Debiig\aa.exe臂霸如啊野理参蠹A其价值为后毓入物晶数帝输入背包的容量牌分别输入?个物品的重量:2357141隋夺别输.X?个物品的价值:1E)515761?3装入的物品为:其装的重量为:1其价值为:6R焯装的重量为:5其价值为;其装的重量为;i其价值为3其装的重量为其价谊丸5Pressanykey JeJj 臂霸如啊野理参蠹A其价值为 心得体会: 通过本次使用让我了解了什

文档评论(0)

1亿VIP精品文档

相关文档