zoukankan      html  css  js  c++  java
  • 迭代加深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

     

    四、总结

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

  • 相关阅读:
    nullnullConnecting with WiFi Direct 与WiFi直接连接
    nullnullUsing WiFi Direct for Service Discovery 直接使用WiFi服务发现
    nullnullSetting Up the Loader 设置装载机
    nullnullDefining and Launching the Query 定义和启动查询
    nullnullHandling the Results 处理结果
    装置输出喷泉装置(贪心问题)
    数据状态什么是事务?
    停止方法iOS CGD 任务开始与结束
    盘文件云存储——金山快盘
    函数标识符解决jQuery与其他库冲突的方法
  • 原文地址:https://www.cnblogs.com/AbandonZHANG/p/2598276.html
Copyright © 2011-2022 走看看