记忆化搜索

发布时间 2023-04-30 00:16:13作者: 邪童

搜索的低效在于没有能够很好地处理重叠子问题; 动态规划虽然比较好地处理了重叠子问题, 但是在有些拓扑关系比较复杂的题目面前, 又显得无奈. 记忆化搜索正是在这样的情况下产生的, 它采用搜索的形式和动态规划中递推的思想将这两种方法有机地综合在一起


记忆化搜索 = 搜索的形式 + 动态规划的思想


动态规划, 就是一个最优化问题, 先将问题分解为子问题, 并且对于这些分解的子问题自身就是最优的才能在这个基础上得出我们要解决的问题的最优方案, 要不然的话就能找到一个更优的解来替代这个解, 得出新的最优子问题, 这当然和前提是矛盾的. 动态规划不同于贪心算法, 因为贪心算法是从局部最优来解决问题, 而动态规划是全局最优的. 用动态规划的时候不可能在子问题还没有得到最优解的情况下就做出决策, 而是必须等待子问题得到了最优解之后才对当下的情况做出决策, 所以往往动态规划都可以用一个或多个递归式来描述. 而贪心算法却是先做出一个决策, 然后再去解决子问题. 这就是贪心和动态规划的不同

动态规划的一种变形就是记忆化搜索, 就是根据动态规划方程写出递归式, 然后在函数的开头直接返回以前计算过的结果, 当然这样做也需要一个存储结构记下前面计算过的结果(空间换时间), 所以又称记忆化搜索