首先动态规划是比较复杂的算法问题,但在实际解决一些最优化的问题上是很强的利器,如果不了解原理的话,请直接点击下方视频链接,讲的很好,估计用文字描述很难到达下方链接的讲解水平,这可能也就是一些数据结构与算法书没有讲解的原因。
接下来,我会去leetcode上找些算法题的例子,作为部分例题进一步加深理解和应用。
写点总结:“动态规划在查找有很多重叠子问题的情况的最优解时有效。它将问题重新组合成子问题。为避免多次解决这些子问题,它们的结果都逐渐被计算并被保存,从简单的问题直到整个问题都被解决。因此,动态规划保存递归时的结果,因而不会在解决同样的问题时花费时间......动态规划只能应用于有最优子结构的问题。最优子结构的意思是局部最优解能决定全局最优解(对有些问题这个要求并不能完全满足,故有时需要引入一定的近似)。简单的说,问题能够分解成子问题来解决。”
通俗一点来讲,动态规划和其它遍历算法(如深/广度优先搜索)都是将原问题拆成多个子问题然后求解,他们之间最本质的区别是,动态规划保存子问题的解,避免重复计算。解决动态规划问题的关键是找到状态转移方程,这样我们可以通过计算和存储子问题的解来求解最终问题。