搜索
搜索
有一个lq暴论:会搜索就能拿省一。其实也没什么问题,但是搜索掌握的太差了,目前还是只会回溯法和一点点的迭代加深。
回溯
这个是搜索最基本的操作了,应该不需要赘述。
折半搜索
当一个搜索树的深度足够深,我们就会花上
但是当我们的始末态明确的时候,我们可以从头开始搜一半的深度,从尾开始搜一半的深度,如果两种能够拼接在一起,就说明这是一种合理的解法。
例题
- P4799
- CSP2022T1
这两道例题里面的折半拼接方法大概是,把每一半可能的答案都分别存进数组里面,然后用大概类似于双指针或者是二分的办法来贪心选取拼接之后的答案。
A*
一个甚至在竞赛之外也有很多应用的算法,比如MOBA类游戏中的寻路。
就是给状态设计一个估值函数,然后根据估值函数来对状态进行优劣排序,存在一个优先队列里面进行广搜。
这里摘一段 OI WIKI 的原文 :
定义起点
A * 算法每次从优先队列中取出一个
如果
当
(因此可以通过BFS快速求简单边权为
//TODO
迭代加深
顾名思义就是给搜索树限定一个深度。
void dfs(int x,int dep,int limit) { if(dep>limit)return; else dfs(....); } int main() { for(int dep=1;dep<=n;++dep) dfs(start,0,dep); return 0; }
这样的话就不至于一条路走到黑了,当然只有在答案足够小的时候才能够使用(或者说是数据范围足够小)
例题
- 埃及分数
IDA*
这个可以顾名思义一下,实际上就是把 A* 和 迭代加深 套在一起了。
有段时间非常喜欢写这个,但是缺点就在于有些重复的东西还是会搜很多次。
例题
- 埃及分数
Dancing Links
本文来自博客园,作者:Hanggoash,转载请注明原文链接:https://www.cnblogs.com/Hanggoash/p/18566004
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效