动态规划和递归、循环、迭代

原创 2013年12月03日 18:28:49

动态规划和递归是两种不同的方法,不可混为一谈。

递归算法是解决递归问题的算法。若问题与其子问题是同一概念,该问题是递归问题。

动态规划算法是空间换时间的算法。

经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题。简单地采用把大问题分解成子问题,并综合子问题的解导出大问题的解的方法,问题求解耗时会按问题规模呈幂级数增加。

为了节约重复求相同子问题的时间,引入一个数组,不管它们是否对最终解有用,把所有子问题的解存于该数组中,这就是动态规划法所采用的基本方法。

当递归运算的中间结果要反复使用时,动态规划可能将指数速度的算法改进为多项式速度(但相应地,空间代价提高)。
动态规划可以递归地实现,也可以非递归地实现,一般建议用非递归的方法即循环的方法,用递归的方法有点杀鸡用宰牛刀的感觉了。


注意循环,递归,迭代各自适用的地方,三种方法有时可以互换,但是更适用一种方法的若换另一种方法往往不方便或形式复杂。

相关文章推荐

java算法的基本思想之迭代,递归,动态规划

这里有n个台阶,每次能爬1或2节,请问有多少种爬法?

递归、迭代、到动态规划

递归 VS迭代首先,一起来看下这几道经典面试题: 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳...
  • ssqqdns
  • ssqqdns
  • 2017年07月31日 17:50
  • 169

递归、迭代与动态规划

在这篇博客里,我将以计算斐波那契数列指定位置的数为例介绍递归、迭代与动态规划。首先我们得弄清楚这三者的定义。 递归——程序调用自身,也就是函数自己调用自己。递归通常从顶部将问题分解,通过解决掉所有分...
  • wopelo
  • wopelo
  • 2017年07月09日 20:35
  • 138

ACM递归与动态规划(三)

  • 2012年10月19日 21:45
  • 43KB
  • 下载

最长公共子序列求解:递归与动态规划方法

在做OJ题目的时候,经常会用到字符串的处理。例如,比较二个字符串相似度。这篇文章介绍一下求两个字符串的最长公共子序列。   一个字符串的子序列,是指从该字符串中去掉任意多个字符后剩下的字符在不改变顺...

ACM递归与动态规划(二)

  • 2012年10月19日 21:44
  • 37KB
  • 下载

斐波拉契数列=>多种方法的比较(分治、递归、动态规划/递推)

斐波拉契数列是一个很不错的例子,它的第一项和第二项都为1,以后的每一项都是前两项的和。 这样,斐波拉契数列可以有很多种解法。 首先用递归://递归for斐波那契数列 #include #includ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:动态规划和递归、循环、迭代
举报原因:
原因补充:

(最多只允许输入30个字)