dfs之迭代加深
作者:互联网
为什么要用迭代加深
\(dfs\) 每次会选择搜索树的一个分支,不断深入,直到达到递归边界条件;但这种搜索策略带有一定的缺陷性:
如果搜索树的某一个分支中的节点个数特别多,但是答案并不在这棵子树里面,那么我们就需要花费很多的无用时间去搜索这棵子树。
如图:
在这张图中,假设我们的目标节点是标五角星的节点,我们会首先搜索框框中的子树,然后才会搜到目标节点。这会浪费我们很多时间。
因此,我们需要想出一种思路去优化这种搜索策略。
什么是迭代加深
还是那上面那个图来举例子。如果我们按层搜索,那么只要搜索三层就可以搜索到当前节点了,这样可以节省我们很多时间。
所以,可以规定搜索最大层数\(max\)\(depth\),只要搜索到\(max\)\(depth\)仍然无解,那么我们就扩展\(max\)_\(depth\), 扩大深度继续搜索目标。
误区解释
-
Q : 我们每次扩展深度的时候,会重复搜索\(maxdepth - 1\) 到 \(1\) 层之间的节点,这样就不会浪费时间了吗??
-
A : 虽然深度限制为 \(maxdepth\) 时,会重复搜索 \(1\) - \(maxdepth - 1\)之间的节点,但是当搜索树节点分支数目较多时,随着层数的深入,每层的节点个数会呈指数级增长,这点搜索重复和深层节点的搜索冗余相比实在是太少了。
迭代加深经典例题
Acwing 170. 加成序列 (来源:《算法竞赛进阶指南》
标签:迭代,max,dfs,depth,加深,搜索,maxdepth,节点 来源: https://www.cnblogs.com/LcyRegister/p/15863111.html