首页 文章

如果广度优先搜索(BFS)可以更快地做同样的事情,为什么要使用Dijkstra的算法?

提问于
浏览
92

两者都可用于从单一来源找到最短路径 . BFS在 O(E+V) 中运行,而Dijkstra在 O((V+E)*log(V)) 中运行 .

另外,我见过Dijkstra在路由协议中使用了很多 .

因此,如果BFS可以更快地做同样的事情,为什么要使用Dijkstra的算法呢?

3 回答

  • 2

    Dijkstra允许为每个步骤分配1以外的距离 . 例如,在路由中,距离(或权重)可以通过速度,成本,偏好等来分配 . 然后,算法为您提供从源到遍历图中的每个节点的最短路径 .

    同时BFS基本上只是在每次迭代时通过一个“步骤”(链接,边缘,无论你想在应用程序中调用它)扩展搜索,这恰好具有找到任何步骤所需的最小步骤数的效果 . 来自您的源(“root”)的给定节点 .

  • 18

    如果您考虑旅行网站,由于节点上的权重(距离),这些使用Dijkstra的算法 .

    如果您考虑所有节点之间的距离相同,那么BFS是更好的选择 .

    例如,考虑 A -> (B, C) -> (F) ,边缘权重由 A->B = 10, A->C = 20, B->F = C->F = 5给出 .

    在这里,如果我们应用BFS,答案将是ABF或ACF,因为两者都是最短路径(相对于边数),但如果我们应用Dijstra,答案将仅为ABF,因为它考虑了连接上的权重路径 .

  • 130

    Dijkstra的算法

    • 与加权图的BFS类似 .

    • 如果所有费用相等,Dijkstra = BFS

    资料来源:https://cs.stanford.edu/people/abisee/gs.pdf

相关问题