【だいくすとらほう】

ダイクストラ法 とは?

最終更新:
💡 始点からの距離が最小の地点を、順に確定する

辺の重みが0以上のグラフで、一つの始点から各頂点までの最短距離や経路を求めるアルゴリズム。ここでの距離は、経路上の重みの合計を指す。

📌 このページのポイント
辺のコストの合計が最小になる経路 線の数字=辺の重み/丸内=Sからの距離 2 5 3 6 1 3 4 S 0 A 2 B 5 C 5 D 6 G 8 最短経路 S → A → C → G = 8
無向グラフの説明例。辺の重みはすべて0以上。丸内の数字はSからの最短距離で、橙色はSからGへの最短経路。
ひよこ ひよこ
ダイクストラ法ってカーナビみたいなもの?
ペンギン先生 ペンギン先生
経路を考える例としてはわかりやすいね。交差点を頂点、道路を辺、長さや時間を重みとして表せる。その重みが0以上なら、出発地からの重みの合計が最小になる経路を調べられるよ。OSPFという通信の規格でも、最短経路木の計算に使われているんだ。
ひよこ ひよこ
どうやって最短ルートを見つけるの?
ペンギン先生 ペンギン先生
始点の距離を0、他の頂点を無限大にする。未確定の頂点のうち、始点からの暫定距離が最小のものを選び、そこまでの距離を確定するよ。隣へ進む経路の合計が既知の距離より短ければ更新し、同じ操作を繰り返すんだ。
ひよこ ひよこ
全部のルートを列挙するわけじゃないんだね!
ペンギン先生 ペンギン先生
そうだよ。暫定距離が最小の頂点を、優先度付きキューで選ぶ実装もある。ここでいう距離は地図上の直線距離ではなく、始点から辺の重みを足した値なんだ。到達できない頂点の距離は無限大のままで、そこへの経路は見つからないよ。
ひよこ ひよこ
負の重みがあると使えないの?
ペンギン先生 ペンギン先生
この方法の前提は、辺の重みが0以上であることだよ。負の重みがある場合は、ベルマン・フォード法などの別の方法と、その適用条件を検討する。始点から到達できる、重みの合計が負になる閉路のために、最短距離そのものが定まらない場合もあるんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ダイクストラ法」って出てきたら「始点から近い順に距離を確定する最短経路アルゴリズム」と思えばだいたいOK!
📖 おまけ:英語の意味
「Dijkstra's Algorithm」 = ダイクストラのアルゴリズム
💬 考案者E. W. Dijkstraの名前に由来するよ。関連する論文「A note on two problems in connexion with graphs」は1959年に発表されたんだ

参考資料

← 用語集にもどる