A*,IDDFS 和 IDA*
过程
首先给出起点和终点,定义从起点开始的距离函数
为了尽量让答案更优,肯定优先选择
整体来看,
迭代加深搜索 IDDFS,是一种每次限制搜索深度的 DFS,本质还是深搜,但每次搜索前首先规定一个最大深度
对比
同是找最优解,为啥不用 BFS 呢?
因为 BFS 需要使用队列,而队列复杂度不低,空间消耗也会比较大,当状态数多了之后 BFS 的劣势也就显出来了。
迭代加深搜索本质为深搜,空间耗费相对较小,而且当搜索树分叉较多时,每增加一次深度搜索的复杂度都会出现指数级增长,那么重复搜索所带来的消耗几乎可以不记,所以它时间复杂度是可以近似看成 BFS 的。
过程
初始时规定一个深度
在当前深度内寻找目标状态,如果找到了就回溯,退出外层的深度规定;否则将
srds,在大部分题目里 BFS 还是方便些的,因为它很容易判重。
但如果空间比较极限,再加上找最优解的话,还是可以考虑使用 IDDFS 的。
顾名思义,
- 不需要判重,不需要排序,利于深度剪枝。
- 空间需求减少:每个深度下实际上是一个深度优先搜索,不过深度有限制,使用 DFS 可以减小空间消耗。
缺点:
- 重复搜索了一部分。
本文作者:wnsyou の blog
本文链接:https://www.cnblogs.com/wnsyou-blog/p/search_plus.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步