文章出处:极客时间《数据结构和算法之美》-作者:王争。该系列文章是本人的学习笔记。
动态规划的文章已经写了好几篇了。现在看下在实际开发中如何应用动态规划。也就是说前面几道题目可以解决哪些问题。
双11凑单问题,其实就是0-1背包问题。
莱文斯坦编辑距离和最长公共子串长度,可以用于解决输入搜索词的自动纠错功能。
四种算法的区别和联系。分治法与其他算法完全隔开,思路不同。分治法把一个问题分为多个子问题,利用子问题的答案求原问题的解。这几个子问题一定是不重复的。如果子问题重复,那就需要考虑回溯、贪心、动态规划。
回溯是基础,动态规划是对回溯的优化。回溯每一步都有选择,计算每一步(阶段)可以有多少种选择,每次选择一种进入下一个状态。最后得出最优解。
贪心的思路是当前状态下选择最好的。
动态规划是指计算当前状态是由哪些状态转变过来的,考虑在得到这些状态的最优解后怎么计算当前状态的最优解。最终得到目标状态。
贪心算法关注限制值和目标值。需要举一些例子来看看贪心是不是正确。
动态规划关注目标状态和目标值。