动态规划解背包问题方法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Wi i 2 1
0 0
1 0
2 6
3 6
4 9
5 9
6 12
7 12
8 15
9 15
10 15
Vi 6 3 5 4 6
2
6 5 4
2
3 4 5
0
0 0 0
0
0 0 0
3
0 0 0
3
0 0 0
6
6 6 6
6
6 6 6
9
6 6 6
9
6 6 6
9
6 6 6
10
10 10 6
11
11 10 6
求最优解
Wi i 2 1
引言
动态规划是运筹学的一个分支,是求解决策过程最优 化的数学方法。 20世纪50年代,Richard Bellman等人提出了解决多阶 段决策问题的“最优性原理”,并创建了最优化问题 的一种新的求解方法--动态规划(Dynamic programming)。 “Programming”是计划和规划的意思,不是代表计 算机中的编程。
Wi i 2 1 2 6 5 4 2 3 4
0
1
2
3
4
5
6
7
8
9
10
Vi 6 3 5
0
0
0
0
0
0
0
0
6
6
6
6
6
6
6
6
6
6
10
6
10 4
6 6
5
最后,如果w1>C,则w1不放入,m[1,c]=m[2,c] 否则,从放与不放的最大值中选择最优值。 因为c=10>w1,所以, m[1,10]=max{m[2,10],m[2,c-w1]+v1} =max{11,m[2,8]+6}=max{11,15}=15 依此计算m[1,0..9]。
Wi i 2 1 2 6 5 4 2 3 4 5
0
1
2
3
4
5
6
7
8
9
10 V i 6
3
5 0 0 0 0 6 6 6 6 6 6 6 4 6
再分析物品4,确定m[4,0..10]这11个元素的值。W[4]=5 j<w[4]:不能放入物品4,m[4,j]=m[5,j] j ≥ w[4]:对物品4要么放入,要么不放入(选择标准应依据 总价值),选总价值最大的。 不放:m[i,j]=m[i+1,j],即m[4,5]=m[5,5]=6 放入:m[i,j]=m[i+1,j-w4]+v4,即m[4,5]=m[5,0]+4=4
i i
C
ቤተ መጻሕፍቲ ባይዱ
w1 y1 wi zi C
i 2
这说明(z1,z2,…,zn)是所给问题的更优解,从而(y1 ,y2,…,yn)不是最优解,此为矛 盾。
7
递归关系
设所给0-1背包问题的子问题
max vk xk
k i
n wk xk j k i xk {0,1}, i k n
4
6
m[1][10]≠m[2][10]x[1]=1 (装入物品1) m[2][10-w1]=m[2][8] ≠m[3][8] x[2]=1 (装入物品2) m[3][8-w2]=m[3][6] =m[4][6] x[3]=0 (未装入物品3) m[4][6] = m[5][6] x[4]=0 (未装入物品4) m[5][6] ≠0 x[5]=1(装入物品5) 最优解为: (1,1,0,0,1),最优值为15
max vi xi
i 1 n
n wi xi C i 1 xi {0,1},1 i n
4
0-1背包问题的应用
0-1背包问题是一类经典的组合优化问题 对0-1背包问题的研究可以广泛运用于资源分 配、投资决策、货物装载等方面。
1一辆货车有固定的载重量C,有n种货物,每种 货物i的重量和价格是(wi,vi),运输哪些货物有最 大的收益? 2 一个计算机有内存C,有n个程序,分别耗费内 存及其所交费用是(wi,vi),调度哪些程序使得 费用最大?
2
但是经分解得到的子问题往往不是互相独立的。不同 子问题的数目常常只有多项式量级。在用分治法求解 时,有些子问题被重复计算了许多次,以至于最后解决 原问题需要耗费指数时间。
T(n)
=
n
n/2
n/2
n/2
n/2
T(n/4)
T(n/4)
T(n/4)
T(n/4)
T(n/4) T(n/4) T(n/4) T(n/4) T(n/4) T(n/4)
1
1
算法总体思想
• 动态规划算法与分治法类似,其基本思想也是 将待求解问题分解成若干个子问题
T(n)
n/2
=
n/2
n
n/2 n/2
T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n
6
反证法证明
否则,设(z2,z3,…,zn)是上述问题的一个最优解,而(y2,…,yn)不是它的最优解。 由此可知
v z v y , 且w y w z
i 2 i i
n
n
n
v1 y1 vi zi vi yi 因此,
i 2 n i 1
i 2 n
i
i
1 1
n
i 2
2 6 5 4 2 3 4 5 0 0 0 0 0 0 1 0 0 0 0 0 2 6 3 0 0 0 3 6 3 0 0 0 4 9 6 6 6 6 5 9 6 6 6 6 6 12 9 6 6 6 7 12 9 6 6 6 8 15 9 6 6 6 9 15 10 10 10 6 10 V i 15 11 11 10 6 6 3 5
5
最优子结构性质
设(y1,y2,…,yn)是所给问题的一个最优 解,则(y2,…,yn)是下面相应子问题的一个最优 n 解: max vi xi i 2 说明: 一个n阶的问题, n w i x i C w 1y 1 可以由n-1阶的问 i 2 1}, 2 i n 题得到 x i {0,
设数组m[6][11] m[i][j]:表示可选物品为i,i+1,…,n背包容量为j(总重量)时背包 中所放物品的最大价值。
Wi i 2 1 0 1 2 3 4 5 6 7 8 9 10 Vi 6 3 5 4 6
2
6 5 4
2
3 4 5
首先,背包为空,先对物品n的放入背包的情况分析:即在 总重量为0~10时,如何放置物品n,使总价值最大。此时需 要确定m[5,0..10]11个元素的值。 w[5]=4,当背包容量j<w[5]时,物品5是不能放入的, m[5,j]=0;当j≥w[5]时,放入物品5价值最大,m[5,j]=v[5]
T(n/4)
3
实例:0-1背包问题
给定n种物品和一背包。物品i的重量是wi,其价值为vi,背 包的容量为C。问应如何选择装入背包的物品,使得装入背 包中物品的总价值最大?
特点:每种物品仅有一件,可以选择放或不放。
输入:C>0, wi>0, vi>0, 1≤i≤n 输出:(x1, x2, …, xn), xi∈{0, 1}, 满足
j wn v n m(n, j ) 0 0 j wn
选择最后一个物品的情况
放入第i个物品,使剩余 物品(i+1,…,n)的最 大容量变为j-wi,此时背 包中的最大价值为
9
例:物品数量n=5,w[n]={2,2,6,5,4}, v[n]={6,3,5,4,6},背包总重量c=10
n
的最优值为m(i,j),即m(i,j)是背包容量为j,可选择物品 为i,i+1,…,n时0-1背包问题的最优值。
8
递归关系
不放入第i个物品,此 时背包中的最大价值 为
由0-1背包问题的最优子结构性质,可以建立计算m(i,j)的 递归式如下。
j wi max{m(i 1, j ), m(i 1, j wi ) vi } m(i, j ) 0 j wi m(i 1, j )