- 58
- 0
- 约6.88千字
- 约 28页
- 2017-08-20 发布于湖北
- 举报
0-1背包问题
* * * 1. 问题描述 1) KNAP(1,j,X) 目标函数: 约束条件: 0/1背包问题:KNAP(1,n,M) 最优性原理对于0/1背包问题成立 求解策略:向前递推、向后递推 6.5 0/1背包问题 * * 2) 向后的递推求解 记fj(X)是KNAP(1,j,X)的最优解,则fn(M)有 fn(M) = max{fn-1(M),fn-1(M-wn)+pn} 对于任意的fi(X),i>0,有 fi(X) = max{fi-1(X),fi-1(X-wi)+pi} 递推过程: ★ 初始值 0 X≥0 f0= -∞ X<0 ★ 求出fi在所有可能的X取值情况下的值。 ★ fn(M)=KNAP(1,n,M) * * 例6.11 背包问题: n=3,(w1,w2,w3)=(2,3,4),(p1,p2,p3)=(1,2,5), M=6 递推计算过程 -∞ X<0 f0(X)= 0 X≥0 -∞ X<0 f1(X)= max{0,-∞+1}=0 0≤X<2 max{0,0+1} = 1 X≥2 -∞ X<0 max{0,-∞+2}=0 0≤X<2 f2(X)= max{1,-∞+2}=1 2≤X<3 max{1,0+2}=2 3≤X<5 max{1,1+2} = 3 X≥5 f3(M)= max{3,1+5} = 6 M=6 尽管X≥0,但还不足以装下w1 fi(X)是关于X的一个分段函数 * * 2 2 3 5 0 0 1 2 3 1 f1(X) f2(X) X X * * 解向量的推导:根据特定情况下fi取值的选择情况决定xi的值 f3(M)=6 x3=1 ΔP=6-p3=1 KNAP(1,3,6)=6 ΔM=6-w3=2 X=(1,0,1) f2(ΔM)=1 x2=0 f1(ΔM)=1 x1=1 * * f1,f2,f3计算过程的图解 1 2 3 4 5 6 7 0 1 2 f0(x)=0 i:fi-1(x-wi) + pi(装下i物品的情况) i=0:函数不存在 1 2 3 4 5 6 7 0 1 2 i=1:f0(x-w1) + p1 1 2 3 4 5 6 7 0 1 2 f1(x)=max(f0(x), f0(x-w1) + p1) 1 2 3 4 5 6 7 0 1 2 i=2:f1(x-w2) + p2 3 x x x x 1 2 3 4 5 6 7 0 1 2 3 x f2(x)= max(f1(x), f1(x-w2) + p2) 取大值原则 * * 1 2 3 4 5 6 7 0 6 7 8 x 1 2 3 4 5 8 9 i=3:f2(x-w3) + p3 6 7 8 1 2 3 4 5 1 2 3 4 5 6 7 0 x 8 9 f3(x)= max(f2(x), f2(x-w3) + p3) 10 注: ● fi-1(X-wi)+pi曲线的构造:将fi-1(X)的曲线在X轴上右移wi个单位,然后上 移pi个单位而得到; ● fi(X)曲线的构造:由fi-1(X) 和fi-1(X-wi)+pi的曲线按X相同时f取大值的规 则归并而成 * * 2. 用序偶表示法求0/1背包问题
原创力文档

文档评论(0)