文章目录

  • ​​一、动态规划四要素​​
  • ​​1、动态规划状态 State​​
  • ​​2、动态规划初始化 Initialize​​
  • ​​3、动态规划方程 Function​​
  • ​​4、动态规划答案 Answer​​






一、动态规划四要素



在上一篇博客 ​​【算法】动态规划 ① ( 动态规划简介 | 自底向上的动态规划示例 | 自顶向下的动态规划示例 )​​ 中 , 不管是 自底向上的动态规划 还是 自顶向下的动态规划

  • 状态 State
  • 初始化 Initialize
  • 方程 Function
  • 答案 Answer


1、动态规划状态 State



动态规划 的 状态 State , 与 递归的定义



使用 一维数组 f[i] 或者 二维数组 f[i][j] 表示 特定条件下 规模更小 的问题的答案 ;

使用 i 或 i , j 参数 将 大规模的问题 划分成 小规模问题 ;



一维数组 f[i] 或者 二维数组 f[i][j] 中的元素值 可能是 :

  • 某个小规模问题的 最大值 结果
  • 某个小规模问题的 最小值 结果
  • 方案可行性


上一篇博客 ​​【算法】动态规划 ① ( 动态规划简介 | 自底向上的动态规划示例 | 自顶向下的动态规划示例 )​​ 中 , 动态规划 状态 State 就是 二维数组 dp , dp[i][j] 表示从 第 i 行 第 j 列的元素出发 , 数组的元素值就是走到最底层的最短路径 ; 是 小规模问题的 最小值结果 ;



2、动态规划初始化 Initialize



动态规划 的 初始化 Initialize , 与 递归的出口



当 大规模问题 无法 拆解成 小规模问题 时的 最小状态



在 自底向上 的 动态规划 中 , 初始化 就是 最底层 的数据 ;

在 自顶向下 的 动态规划 中 , 初始化 就是 最顶层 的数据 ;

另外 无法代入 到 动态规划方程 Function 中的数据 , 也要并入到 动态规划初始化 Initialize 范畴中 , 对这部分数据也要进行初始化操作 ; 如 : 上一篇博客 ​​【算法】动态规划 ① ( 动态规划简介 | 自底向上的动态规划示例 | 自顶向下的动态规划示例 )​​ 中 自顶向下的动态规划示例 中 , 对 数字三角形 左右两边 的 两列 数据进行初始化 操作 ;



3、动态规划方程 Function



动态规划 的 方程 Function , 与 递归的拆解



动规方程 主要用于 描述 大规模问题 如何 拆解成 小规模问题 , 即 大规模问题 是 如何 依赖于 小规模问题的

  • 大规模问题的结果 由 小规模问题 的计算结果 相加
  • 大规模问题的结果 由 小规模问题 的计算结果 取最大值
  • 大规模问题的结果 由 小规模问题 的计算结果 取最小值
  • 大规模问题的结果 由 小规模问题 的计算结果 必须全部可行
  • 大规模问题的结果 由 小规模问题 的计算结果 只要有一个可行即可
  • 大规模问题的结果 由 小规模问题 的计算结果 没有可行结果
  • 大规模问题的结果 由 小规模问题 的计算结果 可行方案总数

小规模问题的 结果 存放在 一维数组 f[i] 或者 二维数组 f[i][j] 中 ;



4、动态规划答案 Answer



动态规划 的 答案 Answer , 与 递归的调用



动态规划 方程 执行后 , 得到 一堆 小规模问题的计算结果 , 小规模问题的 结果 存放在 一维数组 f[i] 或者 二维数组 f[i][j] 中 ;

  • 大规模问题的结果 由 小规模问题 的计算结果 相加
  • 大规模问题的结果 由 小规模问题 的计算结果 取最大值
  • 大规模问题的结果 由 小规模问题 的计算结果 取最小值
  • 大规模问题的结果 由 小规模问题 的计算结果 必须全部可行
  • 大规模问题的结果 由 小规模问题 的计算结果 只要有一个可行即可
  • 大规模问题的结果 由 小规模问题 的计算结果 没有可行结果
  • 大规模问题的结果 由 小规模问题 的计算结果 可行方案总数