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

时间:2017-11-10 12:31:09

标签: data-structures graph-theory depth-first-search breadth-first-search

在阅读有关DFS与BFS的内容时,我发现DFS比BFS更快,并且需要的内存更少。

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

1 个答案:

答案 0 :(得分:3)

  • 内存要求:堆栈大小受深度限制,而队列大小则受宽度限制。对于具有n个节点的平衡二叉树,这意味着堆栈大小将是log(n),但队列大小将是b O(n)。请注意,在所有情况下,BFS可能不需要显式队列 - 在可行的情况下保留一堆子索引可能就足够了。

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