算法 -- 动态规划 Dynamic Programming 学习理解

在上一篇博客中,我们讲解了贪心算法 - https://www.cnblogs.com/wphl-27/p/23228025.  现在,我们来讲解另一种经典算法 -- 动态规划,它好像和贪心算法有点相似,但又不同

动态规划(Dynamic Programming - DP)是一种用于解决优化问题的算法设计方法,它将问题分解成子问题,通过解决子问题,存储子问题的解,来求解原始问题,以避免重复计算,提高效率。

动态规划的核心思想是利用已解决的子问题的解来构建原问题的解,从而减少重复计算。通常,动态规划问题满足两个条件:
  1. 最优子结构性质:问题的最优解可以通过子问题的最优解构建。
  2. 重叠子问题:问题可以被分解成许多重叠的子问题,DP通过存储这些子问题的解来避免重复计算
动态规划实现步骤:
  1. 问题建模:将问题划分成子问题,定义子问题的状态和转移方程。
  2. 初始化:初始化边界条件,通常是最小规模子问题的解。
  3. 状态转移:根据子问题之间的关系,使用递归或迭代的方式计算子问题的解,并将结果保存在表格中。
  4. 解决原问题:通过解决子问题,逐步构建出原问题的最优解。
  5. 返回结果:返回原问题的最优解。

 之前我写的一个算法题 - 数学中的斐波那契数列 (https://www.cnblogs.com/wphl-27/p/17125701.html) 就是用的动态规划算法

动态规划算法和前面讲解的贪心算法区别如下:

贪心算法:  每一步选择当前最优,不能回溯,可能得不到全局最优解

动态规划: 会记录之前的计算结果,并基于子问题的最优解来构造整体的最优解

 

posted on 2026-10-08 19:21  新西兰程序员  阅读(8)  评论(0)    收藏  举报