- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
0/1背包
0-1背包问题
所谓0/1背包问题是指在物品不能分割,只能整件装入背包或
不装入的情况下,求一种最佳装载方案使得总收益最大
给定n种物品和一背包,物品编号从1到n。物品i的重量是w,其
价值为v,背包的容量为C。问应如何选择装入背包的物品,使
得装入背包中物品的总价值最大
0-1背包问题是一个特殊的整数规划问题。
max v, x
Wx.≤C
x1∈{0,1,1≤i≤n
2动态规划法求解
最优子结构
●0/1背包的最优解具有最优子结构特性
●设(x1,X2,….,xn),x∈{0,1}是0/1背包的最优解,
那么,(X1,X2,…,Xn=1)必然是0/1背包子问题的
最优解:背包载重CWXn,共有n-1件物品,第i
件物品的重量为W;,效益V,W0,V10,
n。
0-1背包问题
设所给0-1背包问题的子问题
max Vk r
xk≤J
,1}≤k≤n
的最优值为m(i,j,即m(,j是背包容量为,可选择物品为1,
i时0-1背包问题的最优值。由0-1背包问题的最优子结
构性质,可以建立计算m(i,j的递归式如下。
aKD十.zk
假如有容量为9的背包,要装入4种体积为2,3,4和5的物品,
价值分别为3,4,5和7
要在不超出背包容量的前提下,用某种方法尽可能多地在背包内
装入物品,使总价值最大,
首先,准备一个标号为0到4共5行和标号从0起到9共10列的空的
矩形表,接着用值0初始化0列和0行的元素
列号
按如下办法直接填行1的值:m[1,j=3(第一种物品的价值),当
且仅当j≥2(第一种物品的体积)。
第二行中的每项n[2,j有两种可能性,第一种可能性是置
m[2,j=m[1,j这相当于把第一种物品放入背包,2号物品放不下;第
种可能性是置皿[2,j=[1,j-3]+4,它相当于加上第二种物品,使
它或者仅包含第二种物品,或者同时包含第一种和第二种物品。当然,
仅当j≥3时,才有可能加上第二种物品。继续这种方法,填入第3行
第4行,得到如图所示的表
林行列号
容量为9
01
9的背包
0
000
0
和的
123
4034
5037
0
0000
3333
303444
60378
7
80379
0371
0
578101112
图背包问题算法的一个例子每种物品只一件
4,第9列的第i项,也就是V[i,9,包含通过用前i个物品来装背包可
以得到的最大价值,这样在最后一列的最后一项找到最优解通过装物
品3和4达到。还存在着装物品1,2和3的另一个最优解,这个解对
表中的m3,9],它是在考虑第4种物品前的最优解。
●作业
设有O/1背包问题n=3,(W1,W2W3)=(2,34),
(v1,Vn,V2)=(1,2,4)和C=6。
Knapsack有两个较明显的缺点:
1.算法要求所给物品的重量w是整数
2.当背包睿量c很大时,算法需要的计
算时间比较多
算法改进
由m()的递归式容易证明,在一般情况下,对每一个确定的
i(1≤i≤n),函数m()是关于变量j的阶梯状单调不减函数。跳
跃点是这一类函数的描述特征。在一般情况下,函数m(由
其全部跳跃点唯一确定。如图所示
对每一个确定的(1≤i≤n),用一个表p[存储函数m(,j的全
部跳跃点。表p[]可依计算m(i,j的递归式递归地由表p[i+1]
计算,初始时p[n+1]={(0,O)}
个例子
3,c=6,W={4,3,2},V={5,2,
m(4,x)
m(4,x-2)+1
m(3,x)
(0.0
m(2,x)
m(3,x)
m(3,x-3)+2
(2
(0,0)
(2
(1,x)
m(2,x)
m(2,x-4)+5
(9)
(5,3)
文档评论(0)