幅優先検索(BFS)が同じことをより速く実行できるのに、なぜダイクストラのアルゴリズムを使用するのですか?


109

どちらも、単一のソースからの最短経路を見つけるために使用できます。BFSはで実行されO(E+V)、ダイクストラはで実行されO((V+E)*log(V))ます。

また、ダイクストラがルーティングプロトコルでよく使用されるのを見ました。

したがって、BFSが同じことをより速く実行できるのに、なぜダイクストラのアルゴリズムを使用するのでしょうか。

回答:


156

ダイクストラでは、各ステップに1以外の距離を割り当てることができます。たとえば、ルーティングでは、距離(または重み)を速度、コスト、設定などで割り当てることができます。このアルゴリズムにより、ソースから、通過したグラフのすべてのノードへの最短パスが得られます。

一方、基本的には最小の発見の効果持つように起こるすべての反復、上の(あなたがあなたのアプリケーションでそれを呼び出すために好きなリンク、エッジ、)1「ステップ」での検索展開しBFS ステップ数を、それがいずれかに取得するのにかかるがソースからの特定のノード(「ルート」)。


1
どちらも同じ結果、つまり2つの頂点間のパスを生成しますが、最短パスを保証するのはダイクストラのみです。
エドウィン

受け入れられた回答、2番目のコメントを参照してください。計算の複雑さが異なる理由を説明するのは非常に良い方法:stackoverflow.com/questions/25449781/...
jmcarter9t

23

旅行のウェブサイトを検討する場合、ノードの重み(距離)のため、ダイクストラのアルゴリズムが使用されます。

すべてのノード間で同じ距離を検討する場合は、BFSの方が適しています。

たとえば、= 10、= 20、= = 5でA -> (B, C) -> (F)与えられるエッジの重みについて考えます。A->BA->CB->FC->F

ここでは、BFSを適用すると、ABFまたはACFになります。どちらも(エッジの数に関して)最短のパスであるためですが、ダイストラを適用すると、接続の重みを考慮しているため、答えはABFになります。道。



4

実装の観点から見ると、ダイクストラのアルゴリズムは、BFSと同じようqueueに、priority queue

ソース

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.