web-dev-qa-db-ja.com

最短経路を探すときのBFSとダイクストラのアルゴリズムの違いは何ですか?

Graphアルゴリズムについて読んでいたときに、これら2つのアルゴリズムに出会いました。

私はこれについて多くを検索しましたが、満足のいく答えは得られませんでした!

最短経路を探しているとき、ダイクストラのアルゴリズムとBFSの違いは何ですか?

グラフ内の最短経路を見つけるためにBFSを使用している間

接続されているすべての頂点を検出し、キューに追加し、ソースからその頂点までの距離を維持します。ソースからその頂点までの距離がさらに短いパスが見つかった場合、更新します!

これは、ダイクストラのアルゴリズムで行うこととまったく同じです!ダイクストラとBFSの違いは何ですか?そして、なぜこれらのアルゴリズムの時間の複雑さはそんなに異なるのですか?

誰かが擬似コードの助けを借りてそれを説明できるなら、私は非常に感謝します!

私は何かが欠けていることを知っています!助けてください!

40
harrythomas

幅優先探索は、すべてのエッジの重みが1に等しいダイクストラのアルゴリズムです。

ダイクストラのアルゴリズムは、概念的に幅優先の検索であり、エッジコストを尊重します。

グラフを探索するプロセスは、どちらの場合も構造的に同じです。

77
Timothy Shields

グラフで最短パスを見つけるためにBFSを使用しているときにブロッククォートすることは、接続されているすべての頂点を検出し、キューに追加し、ソースからその頂点までの距離を維持することです。ソースからその頂点までの距離がさらに短いパスが見つかった場合、更新します!

BFSでは距離を維持しません。ノードの発見用です。そこで、それらを一般的なキューに入れてポップします。 Dijikstraとは異なり、ノードの累積ウェイト(緩和後)を優先キューに入れ、最小距離をポップします。

そのため、BFSは等重量グラフでdijikstraのように機能します。

シンプルキューとプライオリティキューを使用しているため、複雑さが異なります。

2
tanweer alam