动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若?个?问题。但是经分解得到的?问题往往不是互相独?的
动态规划策略通常?于求解最优化问题。
– 在这类问题中,可能会有许多可?解。每?个解都对应于?个值,我们希望找到具有最优值的那个解,即最优解。
– 动态
• 在?定条件下,当前阶段的状态和下?阶段的状态之间的转移。
– 规划
• 建?状态转移?程(或称各阶段间的递推关系式),将各个阶段的状态以表格式?法存储。
• 表格式?法:??个表来记录所有已解决的?问题的解
过程:
• 阶段 stage
– 将所给问题的过程,按时间或空间特征分解成若?相互联系的阶段,以便按次序去求每阶段的解。
• 状态 state
– 各阶段开始时的客观条件叫做状态。
• 决策 decision
– 当各阶段的状态确定以后,就可以做出不同的决定,从?确定下?阶段的状态,这种决定称为决策。
• 状态转移 transition
– 根据上?阶段的状态和决策来导出本阶段的状态。
在分治法求解时,有些问题被重复计算了许多次
如果能够保存已解决的?问题的答案,?在需要时再找出已求得的答案,就可以避免?量重复计算,从?得到多项式时间算法。
基本要素
• 最优?结构(optimal substructure)
– 原问题的最优解包含了?问题的最优解。
– 该性质使我们能够以?底向上的?式递归地从?问题的最优解逐步构造出原问题的最优解。
• 重叠?问题(overlapping subproblem)
– 有些?问题被反复计算多次(前?阶段的状态带到当前阶段,当前阶段的状态带到下?阶段)。
– 通过表格式?法来记录已解决的?问题的答案
0-1背包问题?
• 给定n种物品和?个背包。物品i的重量是wi,其价值为vi,背包的容量为c。问应如何选择装?背包的物品,使得装?背包中物品的总价值最??
– 0-1:在选择装?背包的物品时,对每种物品i只有两种选择,即装?背包或不装?背包。不能将物品i装?背包多次,也不能只装?部分的物品i。
– 找出?个n元0-1向量(x1, x2, …, xn),使得n最大
(1)证明问题具有最优解
– 证明:设(y1,y2,…,yn)是给定n种物品在背包载重为c时的?个最优解,则(y2,…,yn)是除了第?个物品之外的n-1个物品在背包载重为c-w1y1时的?个最优解。
– 反证法:如若不然,设(z2,…,zn)是上述?问题的?个最优解,?(y2,…,yn)不是。(y1, y2, …,yn)不是
(2) 设m(i,j)是背包容量为j,可选择物品为1, 2, …, i时0-1背包问题的最优值。假设j是整数,从1开始逐?递减地划分
• 递归定义最优值
• 方法一:设m(i,j)是背包容量为j,(当前阶段)可选择物品为i, i+1,…,n时0-1背包问题的最优值。
• ?法?:设m(i,j)是背包容量为j,(当前阶段)可选择物品为1,2,…,i时0-1背包问题的最优值。