如果给出图形问题,我们如何知道是否需要使用bfs或dfs算法? 或者我们何时使用dfs算法或bfs算法。 一个人与另一个人的区别和优势是什么?
答案 0 :(得分:81)
BFS将根据分支因素使用更多内存...但是,BFS是一个完整的算法...这意味着如果您使用它来搜索可能的最低深度的东西,BFS将为您提供最佳解。
BFS空间复杂度为O(b^d)
...分支因子提升到深度(可能是很多内存)。
O(|V|)
...意味着它可以占用的最大内存是最长的路径。
它们具有相同的时间复杂性。
在实施方面,BFS通常使用Queue
实施,而DFS使用Stack
。
答案 1 :(得分:6)
广度首先搜索兄弟姐妹。深度首先显然是先搜索孩子。所以,我想这取决于你想要做什么样的搜索。跨字段的关系类型搜索可能会适用于bfs,其中层次结构(树,文件夹,等级等)更适合作为dfs。
答案 2 :(得分:4)
图遍历都有一个原因:图的完全遍历,访问图中的每个顶点。如果你没有内存限制,DFS是一个不错的选择,因为BFS占用了大量空间。 因此,在这两者之间进行选择取决于您的要求。
想要找到图表中的(强/)连接组件吗?或解决迷宫或数独? 使用DFS。如果仔细观察,预订,订购后和订购都是DFS的变种。所以,是的,这是一些有趣的应用程序。
BFS如果要测试图是否为二分图,请找到两个节点或需要此类任务的应用程序之间的最短路径。
答案 3 :(得分:2)
在bfs队列中使用,而dfs堆栈用于根据图遍历存储顶点 bfs过程中的2-是从一级到另一级完成的(根据有向图或非有向图) 而在dfs中,进程是深度进行的(首先访问根节点的过程是另一个进行远程,然后应用从最后一个节点到根节点的回溯)。
答案 4 :(得分:-2)
BFS非常适合最短路径而DFS不是。