🌟
【データ構造】木とは?隣接行列、隣接リストについて
はじめに
paizaで隣接行列に関する問題 と隣接リストに関する問題が出てきたので気になって調べました。
まずは、木を学んだあとに隣接行列、隣接リストについて解説します。
木とは?
木(Tree)は、以下の性質を持つグラフ構造です:
-
連結性:
- すべての頂点が連結しており、任意の2つの頂点間に経路が存在します。
-
サイクルがない:
- 辺の数が
(頂点数 - 1)であり、閉路(サイクル)が存在しません。N - 1
- 辺の数が
基本的な用語
- ルート木(根付き木): 特定の頂点を根(ルート)とした木。
- 子と親: 各頂点が他の頂点の親または子として関係します。
- 高さ: 木のルートから最も遠い頂点までの深さ。
- 葉(リーフ): 子を持たない頂点。
隣接行列とは?
隣接行列(Adjacency Matrix)は、頂点間の接続を2次元配列(行列)で表現する方法です。
-
構造:
の行列N \times N によって、頂点g[i][j] とi の関係を表します。j -
: 頂点g[i][j] = 1 とi が接続されている。j -
: 頂点g[i][j] = 0 とi が接続されていない。j
-
-
例(無向グラフの場合(グラフには有向グラフと無向グラフがあります)):
頂点 1, 2, 3 が以下のように接続されているとします:1 - 2 | 3
隣接行列:
0 1 1 1 0 0 1 0 0
-
利点:
- 接続確認(頂点
とi が繋がっているか)をj で行える。O(1)
- 接続確認(頂点
-
欠点:
- スペース効率が悪い(辺の数が少ない疎グラフの場合に特に)。
隣接リストとは?
隣接リスト(Adjacency List)は、頂点ごとに接続先のリストを保持するデータ構造です。
-
構造:
頂点 の隣接する頂点をリストで表します。i -
例(上記のグラフと同じ):
1: [2, 3] 2: [1] 3: [1]
-
利点:
- スペース効率が良い(辺の数が少ない疎グラフで特に効果的)。
-
欠点:
- 接続確認に
かかる。O(\text{隣接頂点の数})
- 接続確認に
隣接行列と隣接リストの比較
特徴 | 隣接行列 | 隣接リスト |
---|---|---|
構造 | 2次元配列 | 配列+リスト |
スペース効率 | ||
辺の存在確認 | ||
辺の列挙 | ||
疎グラフへの適用 | 不向き | 向いている |
実装の手軽さ | 比較的簡単 | やや複雑 |
おすすめ・参考書籍
問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書)
Discussion