(此文针对有DFS基础的)
如果大家学过dfs,那么肯定会遇到以下问题:
1.难调试
2.超时
第一个嘛...多练,第二个,就是我们今天要讲的记忆化搜索(Memory search):
首先,递归时,老是出现多次调用同样的参数,这时候怎么办呢?存结果?对,这就是"记忆"
比如一个递归函数老是调用dfs(20,20,20)时,我们就用三维数组存结果呗:
if(!ans[20][20][20]) {
ans[20][20][20]=f(20,20,20);
}
return ans[20][20][20];
这样,在下次调用时,我们就直接"翻"出答案
避免接下来的亿堆调用
那么,我们该如何存"答案"呢?有细心的小伙伴可能就看出来了
如果调用了x和y(举个栗子),就把答案存进二维数组里
if(!ans[x][y]){
ans[x][y] = dfs(x, y);
}
return ans[x][y];
先判断这个答案有没有存过
if 没存过{
调用
}
else : return 答案
调用三个参数就用三维数组(千万不要开大,我已经以身试法过了,MLE)
这样,避免了多次的调用,降低时间复杂度
否则... TLE...
(这个系列我会续更,欢迎大家点赞!)