美文网首页
DFS(栈)&BFS(队列)

DFS(栈)&BFS(队列)

作者: _Xie_ | 来源:发表于2019-04-02 00:00 被阅读0次

    前言

    对树(tree)或者图(graph)而言,深度优先搜索(DFS) 和广度优先搜索(BFS)都是用于遍历或者搜索节点的算法(或求最优解),只是搜索的策略不同。用途也非常广。算法都是为解决实际问题而存在的。后面会举例介绍。

    优缺点

    原链接:什么时候用BFS和DFS?

    1. BFS是用来搜索最短径路的解是比较合适的,比如求最少步数的解,最少交换次数的解,因为BFS搜索过程中遇到的解一定是离根最近的,所以遇到一个解,一定就是最优解,此时搜索算法可以终止。这个时候不适宜使用DFS,因为DFS搜索到的解不一定是离根最近的,只有全局搜索完毕,才能从所有解中找出离根的最近的解。(当然这个DFS的不足,可以使用迭代加深搜索ID-DFS去弥补)
    2. 空间优劣上,DFS是有优势的,DFS不需要保存搜索过程中的状态,而BFS在搜索过程中需要保存搜索过的状态,而且一般情况需要一个队列来记录。
    3. DFS适合搜索全部的解,因为要搜索全部的解,那么BFS搜索过程中,遇到离根最近的解,并没有什么用,也必须遍历完整棵搜索树,DFS搜索也会搜索全部,但是相比DFS不用记录过多信息,所以搜素全部解的问题,DFS显然更加合适。

    DFS(Depth-first search)

    DFS(Depth-first search) wiki

    BFS(Breadth-first search)

    BFS(Breadth-first search) wiki

    相关文章

      网友评论

          本文标题:DFS(栈)&BFS(队列)

          本文链接:https://www.haomeiwen.com/subject/wkbwjxtx.html