动态规划问题
- 算法原理
将复杂的问题分解成若干个简单的子问题,根据这些简单的子问题的解得到原复杂问题的解。 - 关键点
找到子问题原原问题之间的关系:包括最优子结构、重复子问题 - 如何减小问题规模
- 每次减小一半:二分法、折半查找
- 每次减少一个
- 最优子结构
子问题与原问题之间的关系:即原问题的最优解是由它各个子问题的最优解决定的。
这两者之间的联系可以用状态转移方程来描述:

通过该方程便能写出递归解法 - 重复子问题
子问题与子问题之间的关系:当我们求解一个子问题的最优解的时候,可能会需要用到更小的子问题,这些子问题会重叠地出现在子问题里面,则会出现很多的重复计算。
解决此问题的方法如下:- 自顶向下(记忆法)
在递归地求解子问题 f(1), f(2)… 过程中,将结果保存到一个表里,在后续求解子问题中如果遇到求过结果的子问题,直接查表去得到答案而不计算,由于递归的存在,需要额外消耗栈 - 自底向上(迭代)
避免了递归,而是记住每个最小问题规模的解,来避免重复计算,需要明确的迭代方向
- 自顶向下(记忆法)
本文深入探讨动态规划算法的核心原理,包括如何通过最优子结构找到复杂问题的解,以及如何处理重复子问题以提高效率。通过递归与迭代两种方法阐述记忆化搜索和自底向上的策略,揭示动态规划在解决问题时如何避免不必要的计算。
&spm=1001.2101.3001.5002&articleId=120511833&d=1&t=3&u=3ba43876856749bd871b06396d455ca8)

被折叠的 条评论
为什么被折叠?



