当前位置:   article > 正文

java面试题:DFS和BFS的优缺点及应用场景_java bfs和dfs优缺点

java bfs和dfs优缺点

DFS和BFS的区别

  • BFS是围绕某个点一层一层的进行遍历,借助队列的数据结构实现。
  • DFS是从一个点出发一直往深处遍历,条件不符就折返,通过栈的数据结构实现。

在正常情况下二者的时间复杂度都是相同的O(v+e),但是在内存的使用上BFS由于要使用队列存储所有的外层节点,所以内存消耗相对较大。

从宏观上来看:

  • 如果你已经知道解离根节点比较近,那么BFS更好
  • 如果整体上每个节点的边很多,那么BFS消耗的内存会很大
  • 如果一棵树很深而解很少,那么DFS可能会很慢(相反如果解很多并且都比较深的话,那么BFS就会很慢)从名字上就很容易得出,
  • 如果一个问题深度无穷而广度有限,那么DFS就没法获得解,但BFS可以,反之也同理。

从具体应用上看:

  • DFS比较适合判断图中是否有环,寻找两个节点之间的路径,有向无环图(DAG)的拓扑排序,寻找所有强连通片(SCC),无向图中寻找割点和桥等;
  • BFS则比较适合判断二分图,以及用于实现寻找最小生成树(MST),如在BFS基础上的Kruskal算法。还有寻找最短路径问题(如Dijkstra算法)。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/476061
推荐阅读
相关标签
  

闽ICP备14008679号