算法 -- 动态规划 Dynamic Programming 学习理解
在上一篇博客中,我们讲解了贪心算法 - https://www.cnblogs.com/wphl-27/p/23228025. 现在,我们来讲解另一种经典算法 -- 动态规划,它好像和贪心算法有点相似,但又不同
动态规划(Dynamic Programming - DP)是一种用于解决优化问题的算法设计方法,它将问题分解成子问题,通过解决子问题,存储子问题的解,来求解原始问题,以避免重复计算,提高效率。
动态规划的核心思想是利用已解决的子问题的解来构建原问题的解,从而减少重复计算。通常,动态规划问题满足两个条件:
- 最优子结构性质:问题的最优解可以通过子问题的最优解构建。
- 重叠子问题:问题可以被分解成许多重叠的子问题,DP通过存储这些子问题的解来避免重复计算
动态规划实现步骤:
- 问题建模:将问题划分成子问题,定义子问题的状态和转移方程。
- 初始化:初始化边界条件,通常是最小规模子问题的解。
- 状态转移:根据子问题之间的关系,使用递归或迭代的方式计算子问题的解,并将结果保存在表格中。
- 解决原问题:通过解决子问题,逐步构建出原问题的最优解。
- 返回结果:返回原问题的最优解。
之前我写的一个算法题 - 数学中的斐波那契数列 (https://www.cnblogs.com/wphl-27/p/17125701.html) 就是用的动态规划算法
动态规划算法和前面讲解的贪心算法区别如下:
贪心算法: 每一步选择当前最优,不能回溯,可能得不到全局最优解
动态规划: 会记录之前的计算结果,并基于子问题的最优解来构造整体的最优解
浙公网安备 33010602011771号