私は非循環有向グラフでソースとシンク(t)の間の最短経路を探しています。グラフには位相的な順序(時間的)があります。すべてのエッジが負または無コストです。 Dijkstraアルゴリズムを使用することはまだ可能ですか? グラフは次のようになります。graph example 通常、ノードは1回しか探索されないため(コストが増加すると仮定して)、ダイクストラは負の重みでは機能しません。 この場合、負の値(またはコストはゼロ)しかないので、コストは減少するだけです。トポロジカルな順序に従ってグラフを探索すると、パスが最適であることが保証されますか? Dijkstraのアルゴリズム - DAG負のコストを伴う最短経路
あなたは
1
A
答えて
2
はい、それが最適になりますありがとうございました - それはダイクストラ法ではありません。
Dijkstraのアルゴリズムは、現在の重みに従ってノードを探索する方法を指定します。 original articleから:
セットの最短分岐IIはこのセットから除去され、1つのノードがIを設定する集合Bから転送された結果 セットIに加えました。
あなたが記述していることは別のソリューションであり、そしてそれが動作:今すぐ
D[source] = 0
D[v] = min {D[u] + w(u,v) | u in V}
、あなたはトポロジカル順序を以下しているので、あなたは上記の式が正しい誘導によって証明することができます - 誘導を想定しているのですべてのu
がv
の前に探索されているという仮説は正しいですが、D[v]
も正しい(再開されないため)という結論が成り立ちます。
P.S.この証明は、負の重みだけの仮定を必要としなくても、重みが混合されているとうまくいくので、同じ解が成り立ちます。
0
したがって、あなたが見ているのは、正の重みを持つグラフ上で最も長いパスです(各値の逆を取るだけです)。この問題は実際には一般的なグラフではNP困難ですが、グラフが有向非循環グラフであれば線形時間で解くことができます。非常に良い説明は例えばhereです。
関連する問題
- 1. dijkstraの最短経路アルゴリズム
- 2. Dijkstraの最短経路アルゴリズムの変更
- 3. Dijkstraの最短経路アルゴリズムの問題
- 4. シングルソースシングルターゲット最短経路のDijkstraアルゴリズムを改善するには?
- 5. 最短経路アルゴリズム
- 6. n最短経路を返す方法(dijkstraアルゴリズム)
- 7. Djikstraの最短経路アルゴリズム
- 8. C++ k最短経路アルゴリズム
- 9. 最短経路、最低回転アルゴリズム
- 10. 最短経路アルゴリズムのjsエラー
- 11. 最短経路アルゴリズムへの調整
- 12. ベルマンフォード最短経路アルゴリズムの性能
- 13. フロイド・ウォーシャル最短経路アルゴリズムのエラー
- 14. sna:Dijkstraアルゴリズムの修正(最短経路)
- 15. Floydの最短経路アルゴリズムC++
- 16. Neo4j:経路内の2つの連続関係に依存するコスト関数を持つ最短経路
- 17. Floyd-Warshallアルゴリズム:最短経路を得る
- 18. 最短経路とダイクストラアルゴリズム
- 19. 最小コスト経路
- 20. Dijkstraアルゴリズムを使用して隣接行列の最短経路を見つけよう
- 21. Dijkstraのアルゴリズムを最短経路でノードを印刷するように修正する
- 22. 最短経路アルゴリズム:複数のソース、最も近い宛先
- 23. PostgreSQL - 最短経路
- 24. Dijkstraの最短経路アルゴリズムのこのプログラムの詳細を理解する方法
- 25. O(E)最短経路
- 26. Dijkstraの最短経路アルゴリズムを使用して頂点の重みを設定する
- 27. Dijkstraアルゴリズムを使用して2つのノード間の最短経路を計算する
- 28. 最短経路を見つけるためのダイクストラのアルゴリズム?
- 29. ケビンベーコンゲームの最短経路グラフトラバーサル
- 30. DijkstraアルゴリズムをGoogleマップに適用して、2点間の最短経路を見つける方法は?