动态规划(DP)笔记(一): 简介

动态规划的性质:

  • 最优子结构:一个最优化的策略,其子策略总是最优的,反过来也可以通过最优子策略推出最优策略。

  • 无后效性:当前决策只与当前状态有关,与之前的决策无关。

  • 子问题重叠:算法在计算过程中会反复求解一定量的相同的子问题,而不是不断生成新的子问题。也就是说子问题空间不大,或者是状态空间不大,可以通过存储状态的答案加速计算过程。


动态规划题目特点:

  • 最值

  • 计数

  • 存在性判定(相当于计数是否大于0)


动态规划的实现方式:

  • 记忆化搜索:记忆化搜索是比较简单的实现方式,通过数组存储不同状态的答案,当搜索某一状态时,若已经计算过就直接返回,否则向下搜索并存储计算到的答案。

    优点:
    · 能避免无用状态答案的计算
    · 边界问题易于考虑
    · 易于思考,无需考虑状态的计算顺序
    · 可以使用搜索算法的优化技巧

  • 递推:利用 for 循环进行状态的枚举更新,需要推导状态转移方程。

    优点:
    · 可以加入动态规划优化
    · 没有记忆搜索的递归栈开销,速度快


解决步骤小结:

  1. 确定状态表示,包含阶段划分和状态表示
  2. 写出转移方程
  3. 确定边界:初始的情况
  4. 如果使用递推,需要考虑状态枚举的顺序

参考

动态规划 – Introduction
本文是基于该博客的笔记,更详细的内容可以在上述链接查看。
这位博主的B站也有配套的视频讲解,我是觉得讲得特好!

posted on 2020-02-17 18:49  joe11111  阅读(129)  评论(0编辑  收藏  举报

导航