首页 > 其他分享 >【code】动态规划

【code】动态规划

时间:2022-11-16 09:47:40浏览次数:50  
标签:code 子结构 问题 穷举 动态 规划 最值

了解动态规划

  • 动态规划问题的一般形式就是求最值。动态规划其实是运筹学的一种最优化方法,只不过在计算机问题上应用比较多,比如说让你求最长递增子序列呀,最小编辑距离呀等等
  • 求解动态规划的核心问题是穷举。因为要求最值,肯定要把所有可行的答案穷举出来,然后在其中找最值。需要你熟练掌握递归思维,只有列出正确的「状态转移方程」,才能正确地穷举
  • 动态规划常常适用于有重叠子问题和最优子结构性质的问题,并且记录所有子问题的结果
    • 需要判断算法问题是否具备「最优子结构」,是否能够通过子问题的最值得到原问题的最值
    • 动态规划问题存在「重叠子问题」,如果暴力穷举的话效率会很低,所以需要你使用「备忘录」或者「DP table」来优化穷举过程,避免不必要的计算。

动态规划的解题方式

  • 动态规划有自底向上和自顶向下两种解决问题的方式。自顶向下即记忆化递归,自底向上就是递推。
  • 使用动态规划解决的问题有个明显的特点,一旦一个子问题的求解得到结果,以后的计算过程就不会修改它,这样的特点叫做无后效性,求解问题的过程形成了一张有向无环图。动态规划只解决每个子问题一次,具有天然剪枝的功能,从而减少计算量
  • 动态规划与状态和选择有关

动态规划的三要素

  • 重叠子问题
  • 最优子结构
  • 状态转移方程

ps: 用空间换时间是降低时间复杂度的不二法门

标签:code,子结构,问题,穷举,动态,规划,最值
From: https://www.cnblogs.com/xiaoyu-jane/p/16894824.html

相关文章