动态规划之斐波那契数列
2013-08-27 15:14
197 查看
本博客已迁往http://coredumper.cn
如果一个递归算法需要对相同的子问题进行多次重复计算,那么我们通常可以采用动态规划对其进行优化。动态规划的具体实现可以分为两类:一类是自顶向下的备忘录方法,这种方法只需要对原始的递归算法进行少量的改动,增加一个子问题解的记录,每当需要用到一个子问题的解时,首先查看这个记录,如果记录中存在需要的解,则可直接得到,如果不存在,则递归求解,并将结果记录下来。另一类是自底向上的迭代方法,这种方法从最基本的子问题开始求解,并将结果记录下来,然后利用已经求得的解继续对高一级的子问题求解,这样循环计算下去,直到解决了最终的问题为止。
斐波那契数列是一个体现动态规划方法的简单问题,下面分别给出原始递归算法、备忘录方法和迭代方法的源码。
原始递归算法,该算法需要大量重复计算相同子问题:
int fab(int n) { if(n == 0 || n == 1){ return 1; } else{ return fab(n - 1) + fab(n - 2); } }动态规划的备忘录方法:
#define SIZE 50 int fab(int n, int m[]) { if(m ){ return m ; } else{ m = fab(n - 1, m) + fab(n - 2, m); return m ; } } int memFab(int n) { int m[SIZE]; int i; m[0] = 1; m[1] = 1; for(i = 2; i < SIZE; ++i){ m[i] = 0; } return fab(n, m); }动态规划的迭代方法:
int fab(int n) { int f1, f2, f3, i; if(n == 0 || n == 1){ return 1; } else{ f1 = 1; f2 = 1; for(i = 1; i < n; ++i){ f3 = f1 + f2; f1 = f2; f2 = f3; } return f3; } }
相关文章推荐
- 从Alphacode看斐波那契数列与线性动态规划
- 求解斐波那契数列的动态规划方法
- 动态规划--斐波那契数列
- 动态规划的方法求解斐波那契数列
- 动态规划8:斐波那契数列
- 动态规划问题学习路线:斐波那契数列,最大递增子序列,松鼠捡苹果,最大公共子序列,字符串编辑距离
- 动态规划与斐波那契数列问题,最短路径问题
- Nyoj 492 骨牌铺方格[简单动态规划||斐波那契数列]
- 剑指offer 07-10 斐波那契数列类型题目的动态规划解题方法(递归方法)
- 动态规划入门之求解斐波那契数列
- 动态规划(1)——斐波那契数列
- c++ 函数对象动态规划解斐波那契数列
- 动态规划-斐波那契数列求算
- 动态规划入门-斐波那契数列的计算
- 增强学习(三)----- MDP的动态规划解法
- 动态规划 所有题型的总结
- acm pku 1050 To the Max的动态规划方法
- BZOJ 1212 HNOI2004 L语言 AC自动机(Trie树)+动态规划
- 算法之动态规划(DP)
- 动态规划--台阶问题