动态规划(一)


Reference:Introduction to Algorithms(Thrid Edition) 机械工业出版社

动态规划原理


动态规划方法通常用于求解最优化问题,即求得最优化问题的一个最优解;问题需满足两个要素:最优子结构和子问题重叠。

1、最优子结构:问题的最优解由相关子问题的最优解组合而成,而这些问题是可以独立求解的。

2、子问题重叠:如果递归算法反复求解相同的子问题,我们称最优化问题具有重叠子问题性质,不同的子问题具有公共的子子问题;。与动态规划相对的分治算法是将问题划分为互不相交的子问题,递归地求解,然后再组合起来,对于子问题重叠,分治算法会做许多不必要的工作,重复求解公共子问题。

我们通常用四个步骤设计一个动态规划算法:

1.刻画一个最优解的结构特征

2.递归地定义最优解的值

3.计算最优解的值,通常采用自底向上的方法

4.利用计算出来的信息构造最优解

效率

对于朴素的递归算法,之所以效率低下,是因为它反复求解相同的子问题,因此动态规划方法仔细安排求解顺序,对每个子问题只求解一次,并将结果保存下来,若随后再次需要此问题的解,只需要查找保存的结果,而不必重新计算,这付出了额外的内存空间的代价,是时空权衡(time-memory trade-off)的例子。

实现方法

动态规划有两种等价的实现方法:带备忘的自顶向下和自底向上法

1 top-down whth momoization:次方法按自然的递归形式编写过程,但过程会保存每个子问题的解,当需要一个子问题的解的时候,通常是先检查是否已经保存过此解,如果是,就返回对应的值,否则按照通常的方式计算这个子问题。

2 bottom-up method :这种方法一般需要恰当定义子问题规模的概念,是的任何子问题的求解都只依赖于更小的子问题的解。因而我们可以将子问题按规模排序,按小至到的顺序进行求解。当求解某个子问题时,它所依赖的更小的子问题都已经求解完毕。


这篇小结一下理论,第二,三和第四篇将用钢条切割,矩阵链乘法和LCS问题来诠释理论,然后再写一篇来总结,求不偷懒,每天一篇。。done 

Aug 31

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值