DFS 在什么意义上比 BFS 更快?

In what sense is DFS faster than BFS?

在阅读有关 DFS 与 BFS 的文章时,我看到一个说法,即 DFS 比 BFS 更快,并且需要更少的内存。

我的实现都是用 C++ 实现的,为 DFS 创建堆栈,为 BFS 创建队列。有人可以解释一下速度和内存要求有什么不同吗?

  • 内存要求:堆栈大小受深度限制,而队列大小受宽度限制。对于具有 n 个节点的平衡二叉树,这意味着堆栈大小为 log(n),但队列大小为 b O(n)。请注意,在所有情况下,BFS 可能都不需要显式队列——例如,在数组嵌入式二叉树中,应该可以计算下一个索引。

  • Speed:我不认为这是真的。对于完整搜索,这两种情况都会访问所有节点,而不会产生明显的额外开销。如果在找到匹配元素时可以中止搜索,那么如果被搜索的元素通常在搜索树中更高,因为它逐级进行,BFS 通常应该更快。如果搜索的元素通常相对较深并且找到许多元素中的一个就足够了,则 DFS 可能会更快。