动态规划
基本思想
动态规划算法通常用于求解某种最优化性质的问题,在这类问题中,可能会有多个可行解。
每一个解都对应一个值,我们希望找到具有最优值得解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解为若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合用动态规划求解的问题,经分解得到的子问题往往不是相互独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了多次。如果我们能够保存已解决的子问题的答案,在需要时找出已求得的答案,这样就可以避免大量重复的计算,节省时间。我们可以用一个表来记录所有已解的子问题的答案。不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中。这就是动态规划的思路。
适用条件
适用动态规划的问题必须满足最优化原理和无后效性。
1、最优化原理:一个最优化策略的子策略总是最优的。
2、无后效性:将各阶段按照一定的次序排列好之后,对于某个给定的阶段,它以前各阶段的状态无法直接影响它未来的决策,而只能通过当前的这个状态,换句话说,每个状态都是对过去历史的一个完整总结。
注:
动态规划实质是一种以空间换取时间的技术,它在实现过程中,不得不存储产生过程中的各种状态,所以它的空间复杂度要大于其他算法。