ダイクストラのアルゴリズムは、優先キューを持つBFSだけですか?


21

このページによると、ダイクストラのアルゴリズムは優先キューを備えたBFSにすぎません。本当にそんなに簡単なのですか?私はそうは思いません。


1
なぜそう思う?
ラファエル

@Raphaelそれはあまりにも単純に見えるので、私はもう一度勉強しましたが、ノード間の距離を追跡しないので、実際にはダイクストラではなくBFSです。
バリーフルーツマン

1
ダイクストラ、キューが「ソート」される値(「リラクゼーション」と呼ばれることが多い)を変更します。あなたがそれを禁じるなら、それは同じではない、本当です。
ラファエル

回答:


19

ダイキューストラのアルゴリズムは、優先キューを備えたBFSとして実装できます(ただし、唯一の実装ではありません)。

ダイクストラのアルゴリズムは、からtへの最短パスが、パスに沿った頂点のいずれかへの最短パスでもあるという特性に依存しています。これはまさにBFSが行うことです。st

または、別の観点から:すべての重みが1である場合、ダイクストラのアルゴリズムはどのように動作しますか?BFSとまったく同じです。


4

G=(V,E)

Dasgupta et alの本「Algorithms(Section 4.4)」のアイデアを以下に示します。

e=(u,v)Elele1le1uv

GGG

GG

Gle

第三に、Dijkstraアルゴリズムは重み付けされていないグラフでどのように動作しますか?

BFSとまったく同じように動作します。これを2つの主要なポイントから詳しく説明します。

  • 「リラクゼーション」について。

    一般的な重み付きグラフのダイクストラアルゴリズムの場合、緩和は

    for all edges (u,v) in E:
        if dist(v) > dist(u) + w(u,v)
           dist(v) = dist(u) + w(u,v)
    

    dist(v)=w(u,v)=1

    for all edges (u,v) in E:
        if dist(v) = \infty
           dist(v) = dist(u) + 1
    
  • 「優先キュー」。

    ダイクストラアルゴリズムが重み付けされていないグラフで実行されると、優先キューには常に2つの異なる(距離)値が含まれます。したがって、BFSのFIFOキューで十分です。

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