dfs之迭代加深
为什么要用迭代加深
每次会选择搜索树的一个分支,不断深入,直到达到递归边界条件;但这种搜索策略带有一定的缺陷性:
如果搜索树的某一个分支中的节点个数特别多,但是答案并不在这棵子树里面,那么我们就需要花费很多的无用时间去搜索这棵子树。
如图:
在这张图中,假设我们的目标节点是标五角星的节点,我们会首先搜索框框中的子树,然后才会搜到目标节点。这会浪费我们很多时间。
因此,我们需要想出一种思路去优化这种搜索策略。
什么是迭代加深
还是那上面那个图来举例子。如果我们按层搜索,那么只要搜索三层就可以搜索到当前节点了,这样可以节省我们很多时间。
所以,可以规定搜索最大层数,只要搜索到仍然无解,那么我们就扩展_, 扩大深度继续搜索目标。
误区解释
-
Q : 我们每次扩展深度的时候,会重复搜索 到 层之间的节点,这样就不会浪费时间了吗??
-
A : 虽然深度限制为 时,会重复搜索 - 之间的节点,但是当搜索树节点分支数目较多时,随着层数的深入,每层的节点个数会呈指数级增长,这点搜索重复和深层节点的搜索冗余相比实在是太少了。
迭代加深经典例题
Acwing 170. 加成序列 (来源:《算法竞赛进阶指南》
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示