• 迭代加深IDDFS搜索算法


    迭代加深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

     

    四、总结

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

  • 相关阅读:
    [C#1] 2类型基础
    [C#2] 5迭代器
    [C#1] 6方法
    [C#1] 8数组
    [C#1] 12特性
    [C#1] 10事件
    [C#2] 2匿名方法
    实用代码JavaScript实用小函数一枚(深入对象取值)
    [C#1] 11接口
    实用代码C#获取本机网络适配器信息及MAC地址
  • 原文地址:https://www.cnblogs.com/AbandonZHANG/p/2598276.html
Copyright © 2020-2023  润新知