Math World Lab

グラフ理論の基礎(最短経路)

点と線のネットワークから「最も安く」目的地へ到達する経路を見つける

この単元の発見をシェア
3行要約(Key Takeaways / AIOサマリー)
1
グラフとは「頂点(ノード)」と、それらを結ぶ「辺(エッジ)」の集合で、辺には移動コストを表す「重み」を持たせることができる
2
ダイクストラ法は、始点から各頂点までの最短距離を「確定済みの中で最も近い頂点」から順に確定させていく貪欲アルゴリズムで、負の重みがなければ最短経路を必ず正しく求められる
3
カーナビの経路案内、Webサイトのリンク解析、通信ネットワークのルーティングなど、現実世界の「最短で行きたい」問題の多くはグラフの最短経路問題に帰着する

なぜこれを学ぶのか? — 現実社会とテクノロジーでの価値

Purpose & Motivation

なぜ生まれたのか?

グラフとは「頂点(ノード)」と、それらを結ぶ「辺(エッジ)」の集合で、辺には移動コストを表す「重み」を持たせることができる

身につく武器・思考力

ダイクストラ法は、始点から各頂点までの最短距離を「確定済みの中で最も近い頂点」から順に確定させていく貪欲アルゴリズムで、負の重みがなければ最短経路を必ず正しく求められる

実社会・ITでの活躍現場

  • •カーナビ・ネットワークルーティングにおけるダイクストラ法
  • •ITシステム・アルゴリズム実装における論理設計
  • •データ分析やシミュレーションにおける数理モデリング

Layer 1 — 直感・シミュレーター

重み付きの小さなネットワーク図から、始点となるノードをクリックし、次に終点となるノードをクリックしてみよう。ダイクストラ法が実行され、最短経路が太い線でハイライトされるとともに、合計コスト(距離)が表示される。別の始点・終点の組み合わせを試して、経路がどう変わるか確認してみよう。

ノードをクリックして始点を選び、次に別のノードをクリックして終点を選ぶと、ダイクストラ法による最短経路がハイライトされます。
42517324ABCDEF
A から F への最短距離: 11
直感チェック!ミニクイズ

ダイクストラ法で最短経路を求める際、「未確定の頂点の中から選ぶべき次の頂点」はどのような頂点か?

Layer 2 — 定義・受験・証明

定義

グラフ G=(V,E)G=(V,E) とは、頂点の集合 VV と、頂点同士を結ぶ辺の集合 EE の組である。各辺 (u,v)∈E(u,v)\in E に非負の重み w(u,v)w(u,v) を割り当てたものを「重み付きグラフ」と呼ぶ。始点 ss から頂点 vv までの「最短距離」d(v)d(v) とは、ss から vv に至るすべての経路の中で、通過する辺の重みの総和が最小となる値である。

公式・数理モデル

d(v)=min⁡P: s→v∑(u,w)∈Pweight(u,w),d(v)←min⁡(d(v), d(u)+w(u,v)) (緩和操作)d(v) = \min_{P:\,s\to v} \sum_{(u,w)\in P} \text{weight}(u,w), \qquad d(v) \leftarrow \min\big(d(v),\, d(u) + w(u,v)\big)\ (緩和操作)

証明・導出

ダイクストラ法の正当性(貪欲選択の妥当性): 確定済み頂点集合を SS、各頂点の暫定距離を d(⋅)d(\cdot) とし、初期状態は S={s}S=\{s\}、d(s)=0d(s)=0、他は ∞\infty とする。 アルゴリズムは、V∖SV\setminus S の中で dd が最小の頂点 uu を選び SS に追加、uu に隣接する頂点 vv について d(v)←min⁡(d(v),d(u)+w(u,v))d(v) \leftarrow \min(d(v), d(u)+w(u,v)) と更新(緩和)することを繰り返す。 数学的帰納法でこの手続きの正しさを示す:∣S∣=1|S|=1 のときは自明に正しい。∣S∣=k|S|=k まで正しいと仮定し、次に選ばれる頂点を uu とする。 すべての辺の重みが非負であるため、ss から uu へ向かう「SS の外を経由する」経路のコストは、途中で SS を出た時点で既に d(u)d(u) 以上である(非負性より経路長は単調非減少)。 したがって SS の外を経由しても d(u)d(u) より短くはならず、uu が選ばれた時点の d(u)d(u) は真の最短距離と一致する。この論法を繰り返し適用すれば、すべての頂点で正しい最短距離が確定することが示される(負の重みが存在すると、この単調性が崩れ証明は成立しない)。

押さえておきたいポイント

  • ダイクストラ法は「負の重みの辺が存在しない」という条件下でのみ正しく動作する貪欲アルゴリズムである
  • 優先度付きキュー(二分ヒープ)を使うと、頂点数 VV、辺数 EE に対し計算量 O((V+E)log⁡V)O((V+E)\log V) で解ける
  • 負の重みを許容する場合はベルマン・フォード法、全点対間の最短距離を求めたい場合はワーシャル・フロイド法を用いる
  • グラフの探索順序を工夫すること(幅優先探索・深さ優先探索)は最短経路以外にも連結成分の判定やサイクル検出など多くの応用を持つ
参照基準・学習指導要領との対応

本トピックの内容・数理モデルは、文部科学省学習指導要領(算数・数学・情報)および国際標準カリキュラムに準拠し、エンジニアリング現場の実装事例と照らし合わせてMath World Lab編集部により検証・作成されています。

Layer 3 — 工学応用・現場実装

カーナビ・ネットワークルーティングにおけるダイクストラ法

道路網を「交差点=頂点」「道路区間=重み付き辺(距離や所要時間)」としてモデル化すると、カーナビの経路探索は最短経路問題そのものになる。同じアルゴリズムはインターネットのパケットルーティング(OSPFなどのルーティングプロトコル)にも使われている。

1type Graph = Map<string, Map<string, number>>; // 頂点 -> (隣接頂点 -> 重み)
2
3// ダイクストラ法による単一始点最短経路
4function dijkstra(graph: Graph, start: string): Map<string, number> {
5 const dist = new Map<string, number>();
6 const visited = new Set<string>();
7
8 for (const node of graph.keys()) dist.set(node, Infinity);
9 dist.set(start, 0);
10
11 while (visited.size < graph.size) {
12 // 未確定の中で距離最小の頂点を選ぶ(貪欲選択)
13 let current: string | null = null;
14 let minDist = Infinity;
15 for (const [node, d] of dist) {
16 if (!visited.has(node) && d < minDist) {
17 minDist = d;
18 current = node;
19 }
20 }
21 if (current === null) break; // 到達不能な頂点のみ残っている
22 visited.add(current);
23
24 // 隣接頂点の距離を緩和(更新)
25 const neighbors = graph.get(current) ?? new Map();
26 for (const [next, weight] of neighbors) {
27 const candidate = dist.get(current)! + weight;
28 if (candidate < (dist.get(next) ?? Infinity)) {
29 dist.set(next, candidate);
30 }
31 }
32 }
33 return dist;
34}
35
36// 例: 4つの交差点からなる簡単な道路網
37const roadNetwork: Graph = new Map([
38 ["A", new Map([["B", 4], ["C", 1]])],
39 ["B", new Map([["D", 1]])],
40 ["C", new Map([["B", 2], ["D", 5]])],
41 ["D", new Map()],
42]);
43
44console.log(dijkstra(roadNetwork, "A"));
45// A->C->B->D という経路で D への最短距離は 4 になる
この単元につながる学習ロードマップ

次に学ぶならコレ!おすすめトピック

この単元と深い繋がりを持つ、あわせて学ぶと理解が深まるおすすめ単元

数理モデル・概念が近い関連トピック

♞全マス巡歴Warnsdorff
関連度高数の不思議・パズル

ナイト・ツアーとグラフ巡歴パズル

チェスの騎士で全マスを1度ずつ踏破せよ。ハミルトン路と貪欲探索の極致

関連度高工学応用

最短経路探索(ダイクストラ法とA*アルゴリズム)

グラフ上の無数のルートから「最もコストが小さい道」を一瞬で見つけ出す数学

A(5)B(3)C(3)D(3)全頂点が奇数 ➔ 不可能
関連度高数の不思議・パズル

一筆書きとケーニヒスベルクの橋

グラフ理論の夜明け — なぜこの橋は絶対に渡りきれないのか?

同じレベルで次に挑戦したいトピック

同レベル推薦大学数学

固有値・固有ベクトル

行列で変換しても「向きが変わらない」特別な方向

同レベル推薦大学数学

フーリエ変換と周波数分解

どんなに複雑な波も、単純なサイン波の重ね合わせに分解できる

同レベル推薦大学数学

ベイズの定理(条件付き確率と事前・事後確率)

新たな情報や証拠(エビデンス)を得て「確信度」を更新する確率論

工学・実社会での応用先でつながるトピック

工学・実践連携小学校・算数

場合の数と樹形図(組み合わせの初歩)

「もれなく、重複なく」数え上げるための樹形図と積の法則

工学・実践連携中学数学

三平方の定理

直角三角形の3辺に隠れた面積の等式

面積 x1辺 = √x√x√x34
工学・実践連携中学数学

平方根と無理数

「2乗するとxになる数」を図形の面積と数直線から理解する

あなたの数学力をさらに伸ばす

数学の弱点診断や算数パズルに挑戦してみませんか?

簡単な質問に答えてあなたにぴったりの学習ロードマップを発見したり、直感を試すパズルで数の面白さを体験できます。