现在的位置: 首页 > 综合 > 正文

迭代加深ID-DFS搜索算法

2013年10月14日 ⁄ 综合 ⁄ 共 866字 ⁄ 字号 评论关闭

迭代加深ID-DFS搜索算法

迭代加深搜索,实质上就是限定下界的深度优先搜索。即首先允许深度优先搜索K层搜索树,若没有发现可行解,再将K+1后重复以上步骤搜索,直到搜索到可行解。

迭代加深搜索算法的实现原理及基本框架

在迭代加深搜索的算法中,连续的深度优先搜索被引入,每一个深度约束逐次加1,直到搜索到目标为止。

基本框架如下:

ProcedureID-dfs(dep:integer);

Var

 J:integer;

Begin

 Ifdep>深度的限界thenexit;//如果搜索的深度大于限界,则返回上一层

 Forj:=1tondo //
按照规则生成子结点

  If子结点安全then

   Begin

     入栈;

     If子结点是目标结点then对目标结点进行处理,退出程序

         Elseid-dfs(dep+1);

     退栈;

   End;

End;

    

Fori:=1todepmaxdo//枚举深度的限界

Begin

   Id-dfs(i);

   If运行超时thenbreak;

End;

迭代加深搜索算法的复杂度分析

从上述迭代加深搜索算法的实现过程和框架,我们可以看出,迭代加深搜索算法就是仿广度优先搜索的深度优先搜索。既能满足深度优先搜索的线性存储要求,又能保证发现一个最小深度的目标结点。(时间复杂度推算详见NOI导刊2010年第6期P26)

从实际应用来看,迭代加深搜索的效果比较好,并不比广度优先搜索慢很多,但是空间复杂度却与深度优先搜索相同,比广度优先搜索小很多。

迭代加深搜索算法的应用

使用搜索算法的时候,选择正确的搜索方式很重要。当有一类问题需要做广度优先搜索,但却没有足够的空间,而时间却很充裕,碰到这类问题,我们可以选择迭代加深搜索算法。

例题:POJ 2286 The Rotation Game

 

四、总结

一般来说,如果目标结点离根结点远,需要遍历整棵树,可以考虑使用深度优先搜索;如果目标离根结点近,或求最小步数,则考虑广度优先搜索或迭代加深搜索;若广度优先搜索存在空间不够的问题,则考虑使用迭代加深搜索。

抱歉!评论已关闭.