2017-02-08 3 views
1

私はDijkstraのアルゴリズムが負の重み付きグラフでは機能しないのを忘れてしまいました。私は、完全に探索されたノードを指すさらなるノードを持つすべての例を理解しています。しかし、この例は私の頭の中にあります。Dijkstraのアルゴリズムグラフを使ってこの負の重みについて正しい方法で考えていますか?

enter image description here

私はそれを考えるには正しいだろう。最初にAが探索されます。 A->B1となり、A->C100となります。次にBを調べ、B->D2に設定します。次に、ソースに戻って最も短いパス(優先キューの先頭)が現在あるため、Dが探索されますか?

私はB->D100だった場合、Cは(A->D101あるので)最初に検討されてきただろうと言って、正しいでしょうか?

すべての説明で実際に言及しなかったことは、ノードが探索され/訪問されたことです.Dijkstraが優先キューで動作するため、これ以上更新できません。この場合、DにはCより前に訪問した理由を頭で囲むのは難しいです。

+0

あなたは正しいです。このアルゴリズムは、ノードへの最短パスがキューから削除されたときに判明している場合にのみ機能し、後でノードに負の重み付きリンクがある場合は必ずしも真ではありません。 –

+0

ありがとうございました。なぜあなたは答えとしてそれを置かないで、私はそれに目を向けるでしょう。 B-> Cを100に変更するという2番目の声明で正しいのですか? –

+0

私の答えがサイトに多くの価値を追加するとは思わないので、誰かが素敵な説明をしたい場合に備えて、私は部屋を空けておきます。はい、あなたの2番目のステートメントは正しいです。 –

答えて

1

それは簡単です:Djikstraのアルゴリズムを使用してノードを探索している時に/訪問/これは、あなたがそれゆえ、このノードはすでに、reexploredまたは再訪することが、あなたを必要としない、そのノードへの最短経路を発見したことを意味閉じノードへの最短経路を知る。

  • ABD 2
  • コスト100

とACと最小のパスコスト:あなたは、Dを選択例えば

は、PQにおける2つのパスがある探求しますコストが選択されます。アークコストが常に正の場合、A-Cを通過するDへの最短経路を見つけることはできません。 Dへの最短経路が見つけられ、ノードは閉じられます。

ただし、負のアークコストが許容されている場合、この推論はすべて当てはまりません。そのため、Djikstraのアルゴリズムはそれらに対して機能しません。

0

あなたが記述しているDijkstraアルゴリズムは、正の重み関数でのみ動作すると思います。特に、Dijkstraアルゴリズムは、重み付けされた(正に)グラフ上に有効なメトリック空間構造を与える。一方、これは、任意の重み付きグラフの場合ではないようです。たとえば、2つのノードAとBと1つのエッジを持つグラフをウェイト-5で取ります。この場合、これはAとBの間の距離を与えません。あなたが説明しているように、ある種の修正されたDijkstraモデルに入ると思います。そして、あるノードから別のノードへの解釈はもはやノード間の距離。

+0

私は私が従うかどうか分からない。私が上で使用しているアルゴリズムは正の重み関数でのみ正しいです。私が上で与えた説明は、アルゴリズムが「A→C→D」が最短経路であることを見逃す原因となった(私が思う)ものでした。 –

+0

この場合、「最短経路」の定義は何ですか?それはあなたに最小の重量合計を与えるAからDまでのエッジのシーケンスですか? – Steve

+0

はい、Dへの最短経路 –

関連する問題