动态规划

一. 动态规划(dynamic programming):

  • 动态规划与分治方法相似,都是通过组合子问题的解来求解原问题。
  • 动态规划方法常用来求解最优化问题(optimization problem)。

二. 动态规划与分治方法的区别(difference):

  • 分治方法将问题划分成互不相交的子问题,递归的求解子问题,组合子问题解,求出原问题的解。
  • 动态规划用于子问题重叠情况。

三. 动态规划步骤:

  1. 刻画最优解结构特征。
  2. 递归地定义最优解的值。
  3. 计算最优解的值,通常采用自下向上(打表)的方法,还有自下向上(记忆化)的方法。
  4. 利用计算出的信息构造一个最优解(获得最优值的解,这种解可以有很多)。

四. 举例:

钢条切割问题:给定一段长度为 n 英寸的钢条和一个价格表 pi (i = 1, 2, …, n),求切割方案,使得销售收益 rn 最大。

长度i12345678910
价格pi1589101717202430

将 n 英寸切割为 k 段(1<= k <= n)的最优方案:

{n=i1+i2+...+ikrn=pi1+pi2+...pik { n = i 1 + i 2 + . . . + i k r n = p i 1 + p i 2 + . . . p i k

针对上述表格,最优收益值如下:

收益切割方案
r1 = 11 = 1
r2 = 52 = 2
r3 = 83 = 3
r4 = 104 = 2 + 2
r5 = 135 = 2 + 3
r6 = 176 = 6
r7 = 187 = 1 + 6 or 7 = 2 + 2 + 3
r8 = 228 = 2 + 6
r9 = 259 = 3 + 6
r10 = 3010 = 10

更一般的,对于 rn (n >= 1), 我们可以用更更短的钢条的最优切割收益来描述它:

rn=max(pn,r1+rn1,r2+rn2,...,rn1+r1) r n = m a x ( p n , r 1 + r n − 1 , r 2 + r n − 2 , . . . , r n − 1 + r 1 )
上面 pn 对应不切割的切割方案,其他为另外切割的方案。

MEMOIZED-CUT-ROD-AUX(p,n,r)
if r[n] >= 0
   return r[n];
if n == 0
   q = 0;
else
    q = NaN;
    for i = 1 to n
        q = max(q,p[i]+MEMOIZED-CUT-ROD-AUX(p,n-i,r));
 r[n]=q;
 return q;

参考文献

  1. Thomas H.Cormen, Charles E.Leiserson, Ronald L.Rivest,等. 算法导论(原书第3版 )[J]. 计算机教育, 2013(12):51-51.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值