记忆化搜索(Memory Search):搜索+动态规划,数组记录上一层计算结果,避免重复计算
记忆化搜索,其实还是用递归函数实现,算法上依然是搜索的流程,但是搜索到的一些解用动态规划的那种思想和模式作一些保存;一般说来,动态规划总要遍历所有的状态,而搜索可以排除一些无效状态。更重要的是搜索还可以剪枝,可能剪去大量不必要的状态,因此在空间开销上往往比动态规划要低很多。
记忆化算法在求解的时候还是按着自顶向下的顺序,但是每求解一个状态,就将它的解保存下来,以后再次遇到这个状态的时候,就不必重新求解了。这种方法综合了搜索和动态规划两方面的优点。
可以归纳为:记忆化搜索=搜索的形式+动态规划的思想
核心过程:
1.函数一开始的判断出口:if(搜索过) return 数组中的值。这里涉及到是否搜索过,所以一般将数组初始化为0
2.函数的递归前进语句如:f[a][b]=dfs(a+1,b)+dfs(a,b+1);
return f[a][b];
这样就做到了数组的每个值只计算了一次,不会有多余的时间消耗。
3.注意:ms型dfs就必须是整型,不能用bool型或void的。
例如:1010过河卒