mirror of
https://github.com/krahets/hello-algo.git
synced 2026-11-01 18:55:23 +08:00
* Retranslate the complete Japanese online edition from Chinese * Fit Japanese homepage labels and localize heading permalinks * Point Japanese contribution instructions to the Japanese preview * Replace locale conditionals with multilingual UI tables
3.4 KiB
3.4 KiB
まとめ
要点の振り返り
- グラフは頂点と辺で構成され、頂点の集合と辺の集合をまとめたものとして表せます。
- 線形の関係(連結リスト)や分割統治の関係(木)に比べ、ネットワークの関係(グラフ)は自由度が高く、その分複雑です。
- 有向グラフの辺には向きがあります。連結グラフではどの頂点にも到達でき、重み付きグラフでは各辺に重みの変数があります。
- 隣接行列は行列でグラフを表します。各行(列)が一つの頂点、行列の要素が辺に対応し、
1または0で 2 頂点間に辺があるかどうかを示します。辺の追加・削除・検索・更新は効率的ですが、多くの空間を使います。 - 隣接リストは複数の連結リストでグラフを表します。
i番目の連結リストは頂点iに対応し、その頂点に隣接するすべての頂点を格納します。隣接行列より空間を節約できますが、辺を探すには連結リストを走査する必要があるため、時間効率は低くなります。 - 隣接リスト内の連結リストが長くなりすぎた場合は、赤黒木やハッシュテーブルに変換して探索効率を高められます。
- アルゴリズムの考え方として、隣接行列は「空間を使って時間を節約する」、隣接リストは「時間を使って空間を節約する」方法です。
- グラフは、ソーシャルネットワークや地下鉄の路線など、さまざまな現実のシステムのモデル化に使えます。
- 木はグラフの特殊な場合であり、木の走査もグラフの走査の特殊な場合です。
- グラフの幅優先走査は、近いところから遠いところへ、層ごとに広がる探索方法で、通常はキューを使って実装します。
- グラフの深さ優先走査は、まず進めるところまで進み、進めなくなったら引き返す探索方法で、通常は再帰で実装します。
Q & A
Q:経路は頂点の列ですか、それとも辺の列ですか。
Wikipedia では言語版によって定義が異なります。英語版では「経路は辺の列」、中国語版では「経路は頂点の列」とされています。英語版の原文は次のとおりです。In graph theory, a path in a graph is a finite or infinite sequence of edges which joins a sequence of vertices.
本書では、経路を頂点の列ではなく、辺の列として扱います。2 頂点間を複数の辺が結ぶことがあり、その場合はそれぞれの辺が一つの経路に対応するためです。
Q:非連結グラフには、走査で到達できない頂点がありますか。
非連結グラフでは、ある頂点から出発したとき、到達できない頂点が少なくとも一つあります。すべての連結成分を走査するには、複数の開始点を設定する必要があります。
Q:隣接リストにある「その頂点につながるすべての頂点」の順序には、決まりがありますか。
順序は任意です。ただし、実際の用途では、頂点を追加した順や頂点の値の大小順など、特定の規則に従って並べることがあります。これにより、「何らかの値が最大または最小である頂点」をすばやく探しやすくなります。