両方を使用して、単一ソースからの最短パスを見つけることができます。 BFSはO(E+V)
で実行され、ダイクストラはO((V+E)*log(V))
で実行されます。
また、Dijkstraがルーティングプロトコルでよく使用されるのを見てきました。
したがって、BFSが同じことをより速くできるのであれば、なぜダイクストラのアルゴリズムを使用するのでしょうか?
ダイクストラでは、各ステップに1以外の距離を割り当てることができます。たとえば、距離(または重み)のルーティングでは、速度、コスト、優先度などによって割り当てることができます。その後、アルゴリズムは、ソースからトラバースグラフのすべてのノードまでの最短パスを提供します。
一方、BFSは基本的に、すべての反復で検索を1ステップ(リンク、Edge、アプリケーションで呼び出すもの)だけ拡張します。これは、最小のステップ数を見つける効果があります=ソース(「ルート」)から特定のノードに到達するのに時間がかかります。
旅行ウェブサイトを検討する場合、これらはノードの重み(距離)のためにダイクストラのアルゴリズムを使用します。
すべてのノード間で同じ距離を考慮する場合、BFSの方が適しています。
たとえば、A -> (B, C) -> (F)
が_A->B
_ = 10、_A->C
_ = 20、_B->F
_ = _C->F
_ = 5。
ここで、BFSを適用すると、答えはABFまたはACFになります。両方とも(エッジの数に関して)最短パスですが、Dijstraを適用すると、答えはABFになります。パス。
ダイクストラのアルゴリズム
実装の観点からは、queue
をpriority queue
と交換することにより、ダイクストラのアルゴリズムをBFSとまったく同じように実装できます。
ソース: リンクの説明をここに入力