【问题标题】:BFS vs DFS for these situations?BFS 与 DFS 适合这些情况?
【发布时间】:2017-08-16 07:00:50
【问题描述】:

我无法决定在这两种情况下是否使用 bfs 或 dfs

情况1:图是高度为40且到任何叶节点的最小深度为38的不平衡无向边加权树。找到从根到任何叶的最小边成本的最佳算法是什么

情况2:图是一个最大堆,哪种算法最好在堆的每一层内找到最大的键值。

对于情况 1,我正在考虑 DFS,因为您不必遍历所有分支来找到最小的分支,第二个分支大于您停止的比较。

对于情况 2,我正在考虑 BFS,因为 BFS 一次从每个级别获取所有节点,并且更适合比较..

有什么建议吗?

【问题讨论】:

  • 您是否出于特殊原因不提及 Dijkstra(针对情况 1)?它增加了对数开销,但如果情况非常不平衡,可以有效地避免坏分支。

标签: algorithm depth-first-search breadth-first-search


【解决方案1】:

我假设在这两种情况下你只有一个指向树/堆根的指针。

无论您使用 BFS 还是 DFS,这两种情况的最坏情况时间复杂度是 O(n),其中 n 是节点数。因此,您可能提出的任何优化都将是“平均”优化。

由于您给出的确切原因,对于情况 1,DFS 可能比 BFS 执行得更好,这是正确的。

然而,对于情况 2,DFS 并不比 BFS 慢(至少理论上如此),因为您可以简单地将每个节点存储在其相应的级别,然后它们会比较每个级别中的所有节点。然而,对于空间复杂性,BFS 会更好,因为一旦完成一个级别并进入下一个级别,您就不必存储任何父节点。因此,BFS 可以推荐用于情况 2。

【讨论】:

    猜你喜欢
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    相关资源
    最近更新 更多