「《最短路問題》」の版間の差分
細 ("《最短路問題》" を保護しました。 [edit=sysop:move=sysop]) |
Tetsuyatominaga (トーク | 投稿記録) |
||
5行目: | 5行目: | ||
最短路問題は[[組合せ最適化問題]]の中での最も基本的かつ重要な問題の一つである. 例えば, [[ナップサック問題]], [[PERT]], [[巡回セールスマン問題]]など様々な組合せ最適化問題が最短路問題とも関係し, 最短路問題において得られた知識はそれらの組合せ最適化問題の解法にも影響を与えている. また, 交通計画や通信ネットワークの分野などでは最短路問題を利用し解析に必要な基本データを算出している. さらに, [[ネットワークフロー問題]], [[配送計画問題]]やネットワークデザインなどのより複雑な問題に対するアルゴリズムにおいて,子問題として最短路問題を解くことがしばしば要求され, その応用は広範囲におよぶ ([2]). | 最短路問題は[[組合せ最適化問題]]の中での最も基本的かつ重要な問題の一つである. 例えば, [[ナップサック問題]], [[PERT]], [[巡回セールスマン問題]]など様々な組合せ最適化問題が最短路問題とも関係し, 最短路問題において得られた知識はそれらの組合せ最適化問題の解法にも影響を与えている. また, 交通計画や通信ネットワークの分野などでは最短路問題を利用し解析に必要な基本データを算出している. さらに, [[ネットワークフロー問題]], [[配送計画問題]]やネットワークデザインなどのより複雑な問題に対するアルゴリズムにおいて,子問題として最短路問題を解くことがしばしば要求され, その応用は広範囲におよぶ ([2]). | ||
− | 最短路問題に対して様々なアルゴリズムが提案されている ([1]). それらのアルゴリズムは, それが適用できるネットワークの種類から大きく二つに分類できる. 一つは, 負の長さの枝が存在しても適用できるアルゴリズムで, もう一つは, 負の長さの枝が存在しない時にのみ適用できるアルゴリズムである. | + | 最短路問題に対して様々なアルゴリズムが提案されている ([1, 6]). それらのアルゴリズムは, それが適用できるネットワークの種類から大きく二つに分類できる. 一つは, 負の長さの枝が存在しても適用できるアルゴリズムで, もう一つは, 負の長さの枝が存在しない時にのみ適用できるアルゴリズムである. |
前者のタイプのアルゴリズムとしては, L. R. Ford [5] とR. E. Bellman [3] によって独立に示された[[ベルマン・フォード法]](Bellman-Ford algorithm)(フォード・ベルマン法ともいう)が良く知られている. この方法では, <math>p(s)=0, p(v)=+\infty\, </math> <math>(v\in V)\, </math>なる点のラベル<math>p\, </math>を用意して, 枝<math>(u,v)\, </math>に対して<math>l(u,v)+p(u)<p(v)\, </math>ならば<math>p(v)\leftarrow l(u,v)+p(u)\, </math>とおく.ここで,すべての枝に対して1回ずつこの操作を行うことを基本操作として,ラベルの減少が起る限り高々<math>|V|\, </math>回基本操作を繰り返す.基本操作が<math>|V|\, </math>回繰り返された場合には負閉路が検出される.そうでない場合には, 終了時に得られたラベル<math>p\, </math>によって,<math>l(u,v)+p(u)-p(v)=0\, </math>を満たす枝の全体からなる<math>G\, </math>の部分グラフ中の点<math>s\, </math>から各点<math>v\, </math>への有向道が最短路を与える.なお,ベルマン・フォード法の変種で隣接2点間の距離行列のべき乗と同等と見做される行列演算によって理解されるアルゴリズムとして,べき乗法(power method)も知られている. これらは<math>{\rm O}(|V||A|)\, </math>時間のアルゴリズムである. | 前者のタイプのアルゴリズムとしては, L. R. Ford [5] とR. E. Bellman [3] によって独立に示された[[ベルマン・フォード法]](Bellman-Ford algorithm)(フォード・ベルマン法ともいう)が良く知られている. この方法では, <math>p(s)=0, p(v)=+\infty\, </math> <math>(v\in V)\, </math>なる点のラベル<math>p\, </math>を用意して, 枝<math>(u,v)\, </math>に対して<math>l(u,v)+p(u)<p(v)\, </math>ならば<math>p(v)\leftarrow l(u,v)+p(u)\, </math>とおく.ここで,すべての枝に対して1回ずつこの操作を行うことを基本操作として,ラベルの減少が起る限り高々<math>|V|\, </math>回基本操作を繰り返す.基本操作が<math>|V|\, </math>回繰り返された場合には負閉路が検出される.そうでない場合には, 終了時に得られたラベル<math>p\, </math>によって,<math>l(u,v)+p(u)-p(v)=0\, </math>を満たす枝の全体からなる<math>G\, </math>の部分グラフ中の点<math>s\, </math>から各点<math>v\, </math>への有向道が最短路を与える.なお,ベルマン・フォード法の変種で隣接2点間の距離行列のべき乗と同等と見做される行列演算によって理解されるアルゴリズムとして,べき乗法(power method)も知られている. これらは<math>{\rm O}(|V||A|)\, </math>時間のアルゴリズムである. | ||
11行目: | 11行目: | ||
一方, すべての枝の長さが非負の時に,より高速に最短路を見出すタイプの代表的なアルゴリズムとして, E. W. Dijkstra [4] によって提案された[[ダイクストラ法]] (Dijkstra's algorithm) が知られている.この方法では,出発点<math>s\, </math>からの(最短)距離が小さい順に最短路および(最短)距離が確定していく.初期ラベル<math>P\, </math>はベルマン・フォード法と同じで, アルゴリズム実行中に最短路が確定した点集合を<math>W\, </math>とすると,<math>p(v)\, </math> <math>(v\in W)\, </math>は点<math>s\, </math>から点<math>v\, </math>への(最短)距離に等しく, <math>l(u,v)+p(u)-p(v)=0\, </math>である枝<math>(u,v)\, </math>を通って<math>W\, </math>内において点<math>s\, </math>から点<math>v\, </math>へ行く有向道が点<math>s\, </math>から点<math>v\, </math>への最短路である.<math>W\, </math>内で最後に(最短)距離が確定した点を<math>u\, </math>として, <math>l(u,v)+p(u)<p(v)\, </math>なる各点<math>v\in V-W\, </math>に対し<math>p(v)\leftarrow l(u,v)+p(u)\, </math>とおき,<math>V-W\, </math>中でラベルの最小な点<math>v\, </math>を見つけて<math>W\leftarrow W\cup\{v\}\, </math>とおく.初期には<math>W=\{s\}\, </math>である.ダイクストラ法は<math>{\rm O}(|A|+|V|\log|V|)\, </math>時間のアルゴリズムとして実現可能である. | 一方, すべての枝の長さが非負の時に,より高速に最短路を見出すタイプの代表的なアルゴリズムとして, E. W. Dijkstra [4] によって提案された[[ダイクストラ法]] (Dijkstra's algorithm) が知られている.この方法では,出発点<math>s\, </math>からの(最短)距離が小さい順に最短路および(最短)距離が確定していく.初期ラベル<math>P\, </math>はベルマン・フォード法と同じで, アルゴリズム実行中に最短路が確定した点集合を<math>W\, </math>とすると,<math>p(v)\, </math> <math>(v\in W)\, </math>は点<math>s\, </math>から点<math>v\, </math>への(最短)距離に等しく, <math>l(u,v)+p(u)-p(v)=0\, </math>である枝<math>(u,v)\, </math>を通って<math>W\, </math>内において点<math>s\, </math>から点<math>v\, </math>へ行く有向道が点<math>s\, </math>から点<math>v\, </math>への最短路である.<math>W\, </math>内で最後に(最短)距離が確定した点を<math>u\, </math>として, <math>l(u,v)+p(u)<p(v)\, </math>なる各点<math>v\in V-W\, </math>に対し<math>p(v)\leftarrow l(u,v)+p(u)\, </math>とおき,<math>V-W\, </math>中でラベルの最小な点<math>v\, </math>を見つけて<math>W\leftarrow W\cup\{v\}\, </math>とおく.初期には<math>W=\{s\}\, </math>である.ダイクストラ法は<math>{\rm O}(|A|+|V|\log|V|)\, </math>時間のアルゴリズムとして実現可能である. | ||
− | ベルマン・フォード法やダイクストラ法など現在提案されている最短路問題に対するアルゴリズムは本質的に始点<math>s\, </math>から全点までの最短路を同時に求める. 全点間の最短路を求めたい場合には, 1点から全点への最短路を求めるアルゴリズムを繰り返し適用し求めればよい.この場合, 負の長さの枝が存在する場合には1点からの最短路問題を1回解いてすべての枝の長さを非負に等価変換することが可能であり, 基本的にダイクストラ法を<math>|V|\, </math>回適用する手間で解くことができる.なお,全点間最短路問題の<math>{\rm O} | + | ベルマン・フォード法やダイクストラ法など現在提案されている最短路問題に対するアルゴリズムは本質的に始点<math>s\, </math>から全点までの最短路を同時に求める. 全点間の最短路を求めたい場合には, 1点から全点への最短路を求めるアルゴリズムを繰り返し適用し求めればよい.この場合, 負の長さの枝が存在する場合には1点からの最短路問題を1回解いてすべての枝の長さを非負に等価変換することが可能であり, 基本的にダイクストラ法を<math>|V|\, </math>回適用する手間で解くことができる.なお,全点間最短路問題の<math>{\rm O}(|V|^3)\, </math>時間のアルゴリズムであるワーシャル・フロイド法 (Warshall-Floyd algorithm) も知られている. |
最短路問題は有向グラフ上で定義されているが, [[無向グラフ]]上の最短路問題を考えたい場合には, 各枝をそれと同じ長さの互いに逆向きの有向枝で置き換えることにより, 有向グラフの場合に帰着することができる.ただし,負の長さの枝が存在する場合は, この帰着によって負閉路が含まれるので, 通常の最短路問題には帰着されない. | 最短路問題は有向グラフ上で定義されているが, [[無向グラフ]]上の最短路問題を考えたい場合には, 各枝をそれと同じ長さの互いに逆向きの有向枝で置き換えることにより, 有向グラフの場合に帰着することができる.ただし,負の長さの枝が存在する場合は, この帰着によって負閉路が含まれるので, 通常の最短路問題には帰着されない. | ||
30行目: | 30行目: | ||
[5] L. R. Ford, Jr., "Network Flow Theory," Report P-923, Rand Corp., Santa Monica,1956. | [5] L. R. Ford, Jr., "Network Flow Theory," Report P-923, Rand Corp., Santa Monica,1956. | ||
+ | |||
+ | [6] 久保,田村,松井 (編) 『応用数理計画ハンドブック』,朝倉書店,2002. |
2007年8月6日 (月) 23:57時点における版
【さいたんろもんだい (shortest path problem) 】
有向グラフの各枝に長さが付与されているネットワークが与えられているとする. 有向グラフの任意の2点に対して, 点を始点とし点を終点とする有向道の長さは上の枝の長さの総和, , と定める. 始点から終点への有向道のなかで, その長さを最小にするもの(が存在すれば, それ)を点構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle s\, } から点構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle t\, } への最短路(shortest path)といい, 最短路を求める問題を最短路問題 (shortest path problem) という. 与えられたネットワークにおいて負の長さの有向閉路(負閉路と呼ぶ)が存在する場合には一般に最短路は存在しなくなる. ただし,負閉路を持つネットワーク上でも,初等的な(点を繰り返さない)道で最短なものを求める問題を考えることもあるが,一般的には解くことが難しい問題となる.
最短路問題は組合せ最適化問題の中での最も基本的かつ重要な問題の一つである. 例えば, ナップサック問題, PERT, 巡回セールスマン問題など様々な組合せ最適化問題が最短路問題とも関係し, 最短路問題において得られた知識はそれらの組合せ最適化問題の解法にも影響を与えている. また, 交通計画や通信ネットワークの分野などでは最短路問題を利用し解析に必要な基本データを算出している. さらに, ネットワークフロー問題, 配送計画問題やネットワークデザインなどのより複雑な問題に対するアルゴリズムにおいて,子問題として最短路問題を解くことがしばしば要求され, その応用は広範囲におよぶ ([2]).
最短路問題に対して様々なアルゴリズムが提案されている ([1, 6]). それらのアルゴリズムは, それが適用できるネットワークの種類から大きく二つに分類できる. 一つは, 負の長さの枝が存在しても適用できるアルゴリズムで, もう一つは, 負の長さの枝が存在しない時にのみ適用できるアルゴリズムである.
前者のタイプのアルゴリズムとしては, L. R. Ford [5] とR. E. Bellman [3] によって独立に示されたベルマン・フォード法(Bellman-Ford algorithm)(フォード・ベルマン法ともいう)が良く知られている. この方法では, 構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle p(s)=0, p(v)=+\infty\, } 構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle (v\in V)\, } なる点のラベル構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle p\, } を用意して, 枝に対して構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle l(u,v)+p(u)<p(v)\, } ならば構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle p(v)\leftarrow l(u,v)+p(u)\, } とおく.ここで,すべての枝に対して1回ずつこの操作を行うことを基本操作として,ラベルの減少が起る限り高々構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle |V|\, } 回基本操作を繰り返す.基本操作が構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle |V|\, } 回繰り返された場合には負閉路が検出される.そうでない場合には, 終了時に得られたラベル構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle p\, } によって,構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle l(u,v)+p(u)-p(v)=0\, } を満たす枝の全体からなる構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle G\, } の部分グラフ中の点構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle s\, } から各点への有向道が最短路を与える.なお,ベルマン・フォード法の変種で隣接2点間の距離行列のべき乗と同等と見做される行列演算によって理解されるアルゴリズムとして,べき乗法(power method)も知られている. これらは構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle {\rm O}(|V||A|)\, } 時間のアルゴリズムである.
一方, すべての枝の長さが非負の時に,より高速に最短路を見出すタイプの代表的なアルゴリズムとして, E. W. Dijkstra [4] によって提案されたダイクストラ法 (Dijkstra's algorithm) が知られている.この方法では,出発点構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle s\, } からの(最短)距離が小さい順に最短路および(最短)距離が確定していく.初期ラベル構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle P\, } はベルマン・フォード法と同じで, アルゴリズム実行中に最短路が確定した点集合を構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle W\, } とすると,構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle p(v)\, } 構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle (v\in W)\, } は点構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle s\, } から点構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle v\, } への(最短)距離に等しく, である枝構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle (u,v)\, } を通って構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle W\, } 内において点構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle s\, } から点構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle v\, } へ行く有向道が点構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle s\, } から点への最短路である.構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle W\, } 内で最後に(最短)距離が確定した点を構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle u\, } として, 構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle l(u,v)+p(u)<p(v)\, } なる各点構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle v\in V-W\, } に対し構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle p(v)\leftarrow l(u,v)+p(u)\, } とおき,構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle V-W\, } 中でラベルの最小な点構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle v\, } を見つけてとおく.初期には構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle W=\{s\}\, } である.ダイクストラ法は構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle {\rm O}(|A|+|V|\log|V|)\, } 時間のアルゴリズムとして実現可能である.
ベルマン・フォード法やダイクストラ法など現在提案されている最短路問題に対するアルゴリズムは本質的に始点構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle s\, } から全点までの最短路を同時に求める. 全点間の最短路を求めたい場合には, 1点から全点への最短路を求めるアルゴリズムを繰り返し適用し求めればよい.この場合, 負の長さの枝が存在する場合には1点からの最短路問題を1回解いてすべての枝の長さを非負に等価変換することが可能であり, 基本的にダイクストラ法を回適用する手間で解くことができる.なお,全点間最短路問題の構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle {\rm O}(|V|^3)\, } 時間のアルゴリズムであるワーシャル・フロイド法 (Warshall-Floyd algorithm) も知られている.
最短路問題は有向グラフ上で定義されているが, 無向グラフ上の最短路問題を考えたい場合には, 各枝をそれと同じ長さの互いに逆向きの有向枝で置き換えることにより, 有向グラフの場合に帰着することができる.ただし,負の長さの枝が存在する場合は, この帰着によって負閉路が含まれるので, 通常の最短路問題には帰着されない.
参考文献
[1] R. K. Ahuja, T. L. Magnanti and J. B. Orlin, Network Flows:Theory, Algorithms, and Applications, Prentice Hall, New Jersey, 1993.
[2] R. K. Ahuja, T. L. Magnanti and J. B. Orlin, "Applications of Network Optimization," in Network Models, M. O, Ball, T. L. Magnanti, C. L. Monma and G. L. Nemhauser, eds., North-Holland, 1995.
[3] R. E. Bellman, "On a Routing Problem," Quarterly of Applied Mathematics, 16 (1958), 87-90.
[4] E. W. Dijkstra, "A note on two problems in connexion with graphs," Numerische Mathematik, 1 (1959), 268-271.
[5] L. R. Ford, Jr., "Network Flow Theory," Report P-923, Rand Corp., Santa Monica,1956.
[6] 久保,田村,松井 (編) 『応用数理計画ハンドブック』,朝倉書店,2002.