动态规划和递归算法

假定有一个LeetCode题目

1. 使用递归算法

我们需要判断改题目是否由多个子任务组成,可以嵌套成递归的形式,在这一步我们往往需要一个递归表达式。

当有中间状态时

有时候我们在处理路径搜索,有中间状态如状态矩阵时,我们需要设定一个容器存储中间状态的数值。一般我们会设定一个与初始矩阵同等大小的矩阵作为容器。更新路径的信息。

2.使用动态规划Dynamic Programming

动态规划是一种多阶段决策最优解的模型,一般用以求最值。可用于自下而上的递推求解。

使用动态规划要满足三个条件:

  1. 多阶段决策
  2. 最优子结构
  3. 自下而上(求状态转移方程)

基本思路

  1. 首先判断是否可使用递归法求解,并列出递归法的树状图
  2. 再判断在递归的过程中是否存在大量的重复计算的子问题,假如存在重复问题,说明使用递归法会有大量的重复计算,影响效率
  3. 然后用备忘录记录子问题与其计算记录(记录中间状态)
  4. 最后改用自下而上的方法重新递推,得到的解法即为动态规划

猜你喜欢

转载自blog.csdn.net/jxsdq/article/details/106753937