搜索策略学习笔记(1):BFS与DFS基础理论学习

搜索简介

搜索算法是利用计算机的高性能来有目的的穷举一个问题解空间的部分或所有的可能情况,从而求出问题的解的一种方法。搜索算法实际上是根据初始条件和扩展规则构造一棵“解答树”并寻找符合目标状态的节点的过程。所有的搜索算法从最终的算法实现上来看,都可以划分成两个部分——扩展节点的方式扩展节点,而所有的算法优化和改进主要都是通过修改其控制结构来完成的。其实,在这样的思考过程中,我们已经不知不觉地将一个具体的问题抽象成了一个图论的模型——树,即搜索算法的使用第一步在于搜索树的建立。


经典问题

  1. n^2-1数码难题(n=8,15,24……)
  2. 迷宫求生
  3. 黑白棋游戏

DFS与BFS

在这里,我根据最近编程获得的一点点经验谈一谈搜索算中的最基本两种——深度优先(DFS)与宽度优先(BFS)

关于DFS与BFS的大致定义和特点,我相信广大读者能够通过下列八数码难题的搜索树建立过程迅速了解,我就不多说了
这里写图片描述
这里写图片描述

DFS与BFS有各自的有点也有各自的缺点,我们要根据待求解问题的性质来决定选择哪种搜索方式


选择DFS的情况:

  1. 当最大深度确定,只要知道问题有没有解
  2. 当最大深度确定,只要求出一个或部分解时


    选择BFS的情况:
    1、当要求出问题最优解(树的深度最小)
    2、需要求出问题的全部解时(dfs也可)


    BFS需要拓展所有节点,随着结点在搜索树上的深度增大,搜索的结点数会很快增长,并以指数形式扩张,从而所需的存储空间和搜索花费的时间也会成倍增长。所以在不需要求得最短路径的情况下我建议使用DFS