gpt4 book ai didi

algorithm - 为什么 DFS 而不是 BFS 用于在图中查找循环

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:12:06 25 4
gpt4 key购买 nike

DFS 主要用于查找图中的循环而不是 BFS。有什么原因吗?两者都可以找到一个节点是否已经被在遍历树/图时访问了。

最佳答案

深度优先搜索比广度优先搜索更节省内存,因为您可以更快地回溯。如果使用调用堆栈,实现起来也更容易,但这依赖于最长路径不会溢出堆栈。

此外,如果您的图表是 directed那么你不仅要记住你是否访问过一个节点,还要记住你是如何到达那里的。否则你可能认为你找到了一个循环,但实际上你只有两条独立的路径 A->B 但这并不意味着存在路径 B->A。例如,

如果你从 0 开始进行 BFS,它会检测到循环存在,但实际上没有循环。

通过深度优先搜索,您可以在下降时将节点标记为已访问,并在回溯时取消标记。请参阅有关此算法性能改进的评论。

对于best algorithm for detecting cycles in a directed graph你可以看看Tarjan's algorithm .

关于algorithm - 为什么 DFS 而不是 BFS 用于在图中查找循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2869647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com