第六讲动态规划背包问题_第1页
第六讲动态规划背包问题_第2页
第六讲动态规划背包问题_第3页
第六讲动态规划背包问题_第4页
第六讲动态规划背包问题_第5页
已阅读5页,还剩25页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第六讲动态规划背包问题经典的背包问题(01背包)有N件物品;第i件物品Wi公斤;第i件物品价值Ci元;现有一辆载重M公斤的卡车;问选取装载哪些物品,使得卡车运送的总价值最大?2动态规划可以按每个物品进行规划,同样每种物品有选和不选两种选择设F(i,j)表示前i件物品载重为j的最大效益,则有1<=i<=N,0<=j<=N初值:F(0,j)=0F(N,M)即答案显然时间复杂度为O(NM)3主程序如下fori:=1tomdof[0,i]:=0;//初始化fori:=1tondof[i,0]:=0;fori:=1tondo//动态规划,递推求f forj:=1tomdo begin ifj>=w[i]then//背包容量够大 f[i,j]:=max(f[i-1,j-w[i]]+c[i],f[i-1,j]) else//背包容量不足f[i,j]:=f[i-1,j]; end;4满背包问题(01背包)有N件物品;第i件物品Wi公斤;第i件物品价值Ci元;现有一辆载重M公斤的卡车;问选取装载哪些物品,使得卡车开车正好装满时,运送的总价值最大? 若无法装满卡车,则输出无解。5动态规划设F(i,j)表示前i件物品背包为j的最大效益,则有1<=i<=N,0<=j<=N初值:F(0,j)=0,F(1,j)=-∞F(N,M)即答案显然时间复杂度为O(NM)6带条件的背包问题(1)有N件物品;第i件物品Wi公斤;第i件物品价值Ci元;第i件物品可能带0~2个附件;若装载附件,必须装载主件,反之没有约束;现有一辆载重M公斤的卡车;问选取装载哪些物品,使得卡车运送的总价值最大?7分析假设只有主件的情况,显然与经典背包问题完全相同!现在每个物品有附件,我们可以分成4种方案仅装载主件装载主件+第1个附件装载主件+第2个附件装载主件+2个附件由于上述4种并列,这是几种不同的决策同时规划即可8动态规划设F(i,j)表示前i件物品背包为j的最优解,则有,1<=i<=N,0<=j<=M时间复杂度O(NM)9多层背包问题有N件物品;第i件物品Wi公斤;第i件物品价值Ci元;现有一辆载重M公斤的卡车;第i件物品限制最多只能取Xi个;问选取装载哪些物品,使得卡车运送的总价值最大?10分析我们可以类似01背包问题,将第i种物品拆分成x[i]个,这样每个物品只有1件了,如下图:然后对所有的物品采用动态规划即可。F(i,j)=max{f(i-1,j-k*w[i])+k*c[i]}0<=k*w[i]<=j11完全背包问题有N件物品;第i件物品Wi公斤;第i件物品价值Ci元;现有一辆载重M公斤的卡车;每次可以选取某种物品的任意多件装载;问选取装载哪些物品,使得卡车运送的总价值最大?12分析类似多层背包问题将每个物品展开成X[i]=m/w[i]个,然后对所有的物品采用动态规划即可。若两件物品i、j满足c[i]<=c[j]且w[i]>=w[j],则将物品i去掉,不用考虑。这个优化的正确性显然:任何情况下都可将价值小费用高的j换成物美价廉的i,得到至少不会更差的方案。由于每种物品有选和不选两种情况,可以将每种物品的2k个当成一个整体考虑。这样对于某种物品要选取多个,都可以由若干个2k个物品进行组合(即2进制数)。例如第i种物品要选10个,则10=23+21。这样第i种物品的个数为k=㏒2(m/wi)物品,是一个很大的改进。进一步,在计算k时,K=㏒2(j/wi),j为当前背包剩余空间。13进一步fori:=1tondo//动态规划,递推求f forj:=mdownto1do begin ifj>=w[i]then//背包容量够大 f[i,j]:=max(f[i-1,j-w[i]]+c[i],f[i-1,j]) else//背包容量不足f[i,j]:=f[i-1,j]; end;在这里为了使得每个物品只取1个或不取,采用了每次取j都是与i-1进行比较,实际上保存了每1步取不同j的值14改进程序事实上,我们只关心剩余背包的最大值,也就是仅仅关心f(j),因此,在对f(j)更新时,只要背包容量可以,那么可以反复更新。程序如下: fori:=1tondo//动态规划,递推求f forj:=0tomdo begin ifj>=w[i]then//背包容量够大 f[j]:=max(f[j-w[i]]+c[i],f[j]) end;15思考题1:机器分配M台设备,分给N个公司。若公司i获得j台设备,则能产生Aij效益问如何分配设备使得总效益最大?M<=15,N<=10。16分析用机器数来做状态,数组f(i,j)表示前i个公司分配j台机器的最大盈利。则状态转移方程为:f(i,j)=Max{f[i-1,k]+a[i,j-j]}(1<=i<=N,1<=j<=M,0<=k<=j)初始值:f(0,0)=0时间复杂度O(N*M2)17思考题2:硬币找零给定N枚硬币给定T元钱用这N枚硬币找这T元钱,使得剩下的钱最少。剩下钱数最少的找零方案中的所需的最少硬币数。N<=500,T<=10000.18分析设F[i]表示需要找的钱数为i时所需要的最少钱币数。显然有:F[i]=Min{F[i-A[j]]+1}{i≤T,1≤j≤N}初始值:F[0]=0。A[j]表示其中第j种钱币的面值。时间复杂度为O(N*T)。19思考题3:系统可靠性一个系统由若干部件串联而成,只要有一个部件故障,系统就不能正常运行,为提高系统的可靠性,每一部件都装有备用件,一旦原部件故障,备用件就自动进入系统。显然备用件越多,系统可靠性越高,但费用也越大,那么在一定总费用限制下,系统的最高可靠性等于多少?给定一些系统备用件的单价Ck,以及当用Mk个此备用件时部件的正常工作概率Pk(Mk),总费用上限C。求系统可能的最高可靠性。20样例输入文件格式:第一行:nC第二行:C1P1(0)P1(1)…P1(X1)(0<=X1<=[C/Ck])

…第n行:CnPn(0)Pn(1)…Pn(Xn)(0<=Xn<=[C/Cn])输入:220 30.60.650.70.750.80.850.950.70.750.80.80.90.95输出:0.637521分析设f(i,j)表示将j的资金用到前i项备用件中去的最大可靠性,则有F(i,j)=max{F(i-1,j–k*Cost[i])*P[i,k]}0<=i<=n,0<=j<=C,0<=k<jdivCost(i)初始:F(0,0)=0目标:F(n,C)时间复杂度:O(k*n*C),这里k是常数因子,与数据相关22思考题4:快餐问题套餐由由A个汉堡,B个薯条和C个饮料组成生产汉堡、薯条、饮料的时间为p1,p2,p3有N条流水线,N<=10,第i条流水线生产时间为Ti每条流水线都可生产汉堡、薯条和饮料每天汉堡、薯条和饮料个数不超过100如何安排生产使得生产套餐数量最多。23分析对于每条流水线,它的生产时间是一定的,我们如果知道了生产汉堡和薯条的个数,就很容易计算出生产饮料的个数。因此,假设第i条流水线生产了i’个汉堡,j’个薯条,那么还能生产饮料个数为: k’=(Ti-i’*p1-j’*p2)/p324动态规划设f(x,i,j)表示前x条流水线生产i个汉堡,j个薯条最多还能生产饮料个数。如果前x-1条流水线只要生产i’汉堡,j’个薯条,生产的饮料为f(x-1,i’,j’)因此有第x条流水线必须生产了i-i’个汉堡,j-j’个薯条,剩下的时间生产k个饮料。因为前x条流水线生产的饮料= 前x-1条流水线生产的饮料+第x条流水线生产的饮料所以有,f(x,i,j)=max{f(x-1,i’,j’)+k}25流水线资源分配图26思考?f(x,i,j)=max{f(x-1,i’,j’)+k} 1<=x<=n<=10,0<=i’<=i<=100,0<=j’<=j<=100k可以实时求出时间复杂度为10*1002*1002=109显然超时!27优化求出最多可能生产多少套,减少不必要循环。淘汰一些没有意义状态,比如生产了过多第三种物质,却没把前两种生产满。让每条流水线大多数时间按成套时间生产,留下一些时间进行动态规划,这样将在动态规划时,极大地减少每种物品的产量从而极大地减少动态规划的状态数。28说明利用前两个优化基本可以出解第3个优

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论