记忆化搜索
Posted bigyellowdog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记忆化搜索相关的知识,希望对你有一定的参考价值。
记忆化搜索
什么是记忆化搜索?
- 百度百科:算法上依然是搜索的流程,但是搜索到的一些解用动态规划的那种思想和模式作一些保存。
- 个人理解:就是每求到一个状态就保存下来,下次再遇到这个状态直接调用即可
它有什么好处?
- 用记搜容易理解。避免了dp的高思维难度
- 快。因为每个状态只会算一遍,所以相对与深搜和广搜会快许多
- 好写。
如何实现?
- 算法流程图如下:
#include <iostream>
#include <cstdio>
int dfs(int x)
{
if(状态[x]保存过) return 状态[x];
if(到达目的地) return 递归最底层的解
int tot=0; //执行到这里说明状态[x]没被保存过,定义变量tot为方案数
for(int i=1;i<=算符种数;i++)
tot+=分支方案数
状态[x]=tot;
return 状态[x];
}
int main()
{
cout<<dfs(x); //输出以x为开始的方案数
return 0;
}
总结
- 记忆化搜索是个非常功利性的算法。有时候在考场中写正解dp可能要想很久,甚至边界设置错误导致全WA,而记忆化搜索容易写,且易理解,所以掌握好是很必要的。
- 记忆化搜索是一种思想,并不是所有的记搜都按照算法模版写的,而是因题而异。但思想是一致的,多刷几道题即可熟练掌握
- 题目列表:
以上是关于记忆化搜索的主要内容,如果未能解决你的问题,请参考以下文章