动态规划算法通常用于求解具有某种最优性质的问题。
基本思想:是将待求解问题分解为若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。
与分治法最大的差别是:适用于动态规划求解的问题,经分解后得到的子问题往往不是互相独立的(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)。
我们可以用一个表来记录所有已解决的子问题的答案。不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中。这就是动态规划算法的基本思路。具体的动态规划算法多种多样,但它们具有相同的填表格式。
- 应用场景:
适用于动态规划的问题必须满足最优化原理、无后效性和重叠性。
(1) 最优化原理(最优子结构性质):一个最优化策略具有这样的性质,不论过去状态和决策如何,对前面的决策所形成的状态而言,余下的决策必须构成最优策略。简而言之,一个最优化策略的子策略总是最优的。一个问题满足最优化原理又称其具有最优子结构性质。
(2) 无后效性:将各阶段按照一定的次序排列好之后,对于某个给定的阶段状态,它以前各阶段的状态无法直接影响它未来的决策,而只能通过当前的这个状态。换句话说,每个状态都是过去历史的一个完整总结。这就是无后向性,又称无后效性。
(3) 子问题的重叠性:动态规划将原来具有指数级时间复杂度的搜索算法改进成了具有多项式时间复杂度的算法。其中的关键在于解决冗余,这就是动态规划算法的根本目的。动态规划实质上是一种以空间换时间的技术,它在实现的过程中,不得不存储产生过程中的各种状态,所以它的空间复杂度要大于其他算法。
(1)背包问题
1.要对比,加了该物品和不加该物品的背包价值
2.加了该物品的背包价值,也就是还需要计算在加该物品之前的价值,
要得到剩余空间(表明此时的背包负重能力-当前物品重量后,得到的剩余空间) 也就得到的背包剩余的重量能力,它含有的价值,就是我们要对比的价值(放物品,要整个放进去)
https://www.cnblogs.com/wujing-hubei/p/6376218.html?utm_source=tuicool&utm_medium=referral
浙公网安备 33010602011771号