グラフ理論(最小全域木・最短経路)とは?点(頂点)と線(辺)で『つながり』を表す数学

公開: 更新: カテゴリ: テクノロジ系

30秒で結論

グラフ理論とは(全体像)

グラフ理論は、ものとものの「つながり」を、点と線だけで表して扱う数学のこと。ここでの「グラフ」は棒グラフや折れ線グラフとは別物で、点(頂点)をつなぐ線(辺)の集まりを指す。

身近な例は路線図。駅が頂点、駅と駅を結ぶ線路がだ。辺に「距離」や「料金」などの重みをつければ、「いちばん安く行くには?」といった問題が解ける。

押さえる基本用語は3つ。


詳しく:この3つのアルゴリズムだけ覚えれば戦える

ここが記事の心臓部。よく出る道具を整理する。

主要アルゴリズム

名前何をするひとこと
ダイクストラ法2点間の最短経路を求める重みが負でないときに使える
最小全域木(MST)全頂点を最小コストでつなぐクラスカル法・プリム法で作る
幅優先探索(BFS)近いところから順に探す最短のステップ数を求めるのに向く
深さ優先探索(DFS)行けるところまで進んで探す迷路探索などに向く

ダイクストラ法は、カーナビの「最短ルート探索」そのもの。スタートから各地点までの最短距離を順に確定していく。ただし辺の重みがマイナスだと使えない点に注意。

最小全域木(MST)は、「全部の頂点を、できるだけ少ないコストでつなぐ」問題。たとえば全部の家を最短の総延長で電線でつなぐイメージだ。クラスカル法(重みの小さい辺から順に足す)とプリム法(頂点を1つずつ取り込む)の2つの作り方がある。

次に、ひっかけ定番の2つの回路

オイラー回路 vs ハミルトン回路

オイラー回路ハミルトン回路
1回ずつ通るのはすべてのすべての頂点
イメージ一筆書き全部の地点を巡る
見分けの条件すべての頂点の次数が偶数(連結)簡単な条件はなく難問

つまり、オイラーは「辺」を全部、ハミルトンは「頂点」を全部。一筆書き(オイラー回路)は「すべての頂点の次数が偶数なら描ける」という分かりやすい条件があるが、ハミルトン回路は簡単な判定法がなく難しい問題だ。

わかりやすく言い換えると

要するに、グラフは「点と線でかいた路線図」だ。

ダイクストラ法 … カーナビの「最短ルートで案内」ボタン

最小全域木 … 全部の家を最短の電線でつなぐ工事プラン

オイラー回路 … 一筆書き(すべての線を1回ずつなぞる)

ハミルトン回路 … すべての駅に1回ずつ立ち寄るスタンプラリー


試験のツボ

🔴 一番出る:オイラー回路とハミルトン回路の区別

①オイラー回路=すべての辺を1回ずつ(一筆書き)

②ハミルトン回路=すべての頂点を1回ずつ

🔴 次に出る:用途とアルゴリズムの対応

①最短経路=ダイクストラ法(負の重みは不可)

②全頂点を最小コストでつなぐ=最小全域木(クラスカル・プリム)

🟡 押さえると安定:探索の使い分け

①幅優先探索(BFS)=最短ステップ数

②深さ優先探索(DFS)=行けるところまで進む


よくある間違い

「オイラー回路はすべての頂点を1回ずつ通る経路」→ ✗  オイラー回路はすべての「辺」を1回ずつ。すべての頂点を1回ずつはハミルトン回路。

「ダイクストラ法は負の重みがあっても最短経路を正しく求められる」→ ✗  ダイクストラ法は重みが負でないことが前提。

「最小全域木は2点間の最短経路を求めるためのもの」→ ✗  最小全域木は全頂点を最小コストでつなぐもの。最短経路はダイクストラ法。


試験での出題パターン

実際の問題でたしかめてみよう。

オリジナル問題1(最短経路)

📝 オリジナル問題 1 ダイクストラ法

重み付きグラフで2地点間の最短経路を求めるアルゴリズムとして、正しいものはどれか。

  1. 辺の重みが負でないときに、最短経路を求められるダイクストラ法を用いる
  2. 全頂点を最小コストでつなぐ最小全域木を作るクラスカル法を用いて求める
  3. すべての辺を1回ずつ通れるかどうかを判定する、オイラー回路の理論を使う
  4. すべての頂点をちょうど1回ずつ通るハミルトン回路を求めることで解決する
シーピードラ
シーピードラ 解答・解説

解答は 1 だぜ。

2地点間の最短経路を求めるのはダイクストラ法。カーナビの最短ルート探索そのものだ。ただし辺の重みが負でないことが前提だぜ。

選択肢2の最小全域木は「全部を最小コストでつなぐ」別の問題。選択肢3のオイラー回路は一筆書きの判定。選択肢4のハミルトン回路は全頂点を巡る難問で、どれも最短経路の道具ではないぜ。

選択肢判定理由
1最短経路はダイクストラ法で正しい
2最小全域木は全頂点をつなぐ問題
3オイラー回路は一筆書きの判定
4ハミルトン回路は全頂点を巡る問題

オリジナル問題2(オイラー回路)

📝 オリジナル問題 2 オイラー回路

オイラー回路に関する次の記述のうち、正しいものはどれか。

  1. オイラー回路はすべての頂点をちょうど1回ずつ通る経路のことを指している
  2. オイラー回路は2地点間の最短距離を求めるためのアルゴリズムのことである
  3. オイラー回路はすべての辺を1回ずつ通る経路で、いわゆる一筆書きにあたる
  4. オイラー回路は全頂点を最小コストでつなぐ木を作る方法のことを指している
シーピードラ
シーピードラ 解答・解説

解答は 3 だぜ。

オイラー回路はすべての辺を1回ずつ通る経路、つまり一筆書きだ。「すべての頂点の次数が偶数(かつ連結)」なら描ける、という分かりやすい条件があるんだ。

選択肢1は「すべての頂点を1回ずつ」でハミルトン回路の説明。選択肢2は最短経路、選択肢4は最小全域木で、どれも別物だぜ。

選択肢判定理由
1全頂点1回ずつはハミルトン回路
2最短経路はダイクストラ法
3全辺を1回ずつの一筆書きで正しい
4全頂点をつなぐのは最小全域木

オリジナル問題3(最小全域木)

📝 オリジナル問題 3 最小全域木

最小全域木に関する次の記述のうち、正しいものはどれか。

  1. 最小全域木は2地点間の最短経路だけを求めるためのアルゴリズムである
  2. 最小全域木はすべての頂点を1回ずつ通る経路を求める方法のことである
  3. 最小全域木はすべての辺を1回ずつ通れるかどうかを判定するものである
  4. 最小全域木は全頂点を最小コストでつなぐ木で、クラスカル法などで作る
シーピードラ
シーピードラ 解答・解説

解答は 4 だぜ。

最小全域木は全頂点を最小コストでつなぐ木で、クラスカル法(重みの小さい辺から足す)やプリム法(頂点を順に取り込む)で作る。全部の家を最短の電線でつなぐイメージだ。

選択肢1の最短経路はダイクストラ法。選択肢2はハミルトン回路、選択肢3はオイラー回路の説明で、いずれも別物だぜ。

選択肢判定理由
1最短経路はダイクストラ法
2全頂点1回ずつはハミルトン回路
3全辺の一筆書きはオイラー回路
4全頂点を最小コストでつなぐ木で正しい

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る