如何学习动态规划

来源:百度知道 编辑:UC知道 时间:2024/06/01 23:58:25
我学C语言的,动态规划一直不好,一遇到就不会做,想学习一下

动态规划就是由小的问题来解决大的问题。比如F(n)是用F(n-1),F(n-2)....F(1)来解决的。
重点要解决怎么把大的问题由小的问题来表示出来。实现过程的思想就是 建立一维数组或者二维数组,你从下标小的开始逐渐的填到下标最大的。动态规划也就是逐渐把所建立的表填满的过程。比如Fibonacci number也反映出动态规划的思想 如F(n)=f(n-1)+f(n-2),这是递归方程,若果用递归来解决问题,这里f(n-2)会被重复计算2次.(如f(n-1)=f(n-2)+f(n-3)).一次类推,f(1)就重复次数最多,这就是为什么要建立表格的原因,它是用来存储已经算出来的结果,所以下次在遇到时就直接从表格里读出结果,从而大大提高运行速度。在动态规划里这个重复计算现象叫做overlapping subproblem 只要满足这个条件我们可以采用动态规划来解决,否则我们可以用递归或者别的方法解决。
给你一个网站,有很多例子你可以看看
http://people.csail.mit.edu/bdean/6.046/dp/

我个人觉得,动归的学习,就是多做题,不会做没关系,看题解。做的题多了,看到了新题,再能马上的设计出状态和转移方程。给你如下建议:1、做几道递推题。2、练习一下记忆化搜索。3、一般记忆化搜索的题目可以用动归解决。