Simplex
Twophase
Dijkstra
Prim
Kruskal
Ford-Fulkerson
Dijkstra JavaScript demos:
FAQ
Japanese/English
|
最短経路問題
連結グラフ G=(V,E) と重み d:E->R+ および
始点 s in V が与えられたとき、
s から 他の頂点までの最短経路と最短距離を求めよ。
ダイクストラ法
ダイクストラ法はたいへん効率の良いアルゴリズムとして知られている。
- Set i=0, S0= {u0=s},
L(u0)=0, and L(v)=infinity for v <> u0.
If |V| = 1 then stop, otherwise go to step 2.
- For each v in V\Si, replace L(v) by
min{L(v), L(ui)+dvui}.
If L(v) is replaced, put a label (L(v), ui) on v.
- Find a vertex v which minimizes {L(v): v in V\Si}, say ui+1
.
- Let Si+1 = Si cup {ui+1}.
- Replace i by i+1. If i=|V|-1 then stop, otherwise go to step 2.
ダイクストラ法をインプリメントした下のプログラムは
O(|V|2) アルゴリズムである。
{v in V\Si : L(v) < infinity} をとっておくために
ヒープを用いれば、計算時間を O(|E|log|V|) とすることができる。
JavaScript ソースファイル:
JavaScript デモ:
関連ページ:
|