木と森 ― 最小限の連結構造
木の同値条件を証明し,$|E|=|V|-1$,根付き木,Cayleyの公式,全域木,最小全域木(Kruskal/Primのアルゴリズム)を扱う.
1 木の定義と同値条件
定義 1 (木と森).
連結で閉路を持たないグラフを木(tree)という.閉路を持たないグラフ(連結とは限らない)を森(forest)という.すなわち森とは各連結成分が木であるグラフである.
定理 2 (木の同値条件).
頂点のグラフ について,以下は同値である:
は木(連結かつ閉路なし).
の任意の2頂点間にちょうど1本の道が存在する.
は連結で .
は閉路を持たず .
は連結であり,任意の辺を除去すると非連結になる(すべての辺が橋).
は閉路を持たないが,任意の非辺 を追加すると閉路が生じる.
証明.
:連結なので任意の2頂点間に道が存在する.道が2本以上あれば,それらを合わせて閉路が得られ矛盾.:道の存在より連結.辺数について に関する帰納法で示す. なら . とする.次数 の頂点(葉)が存在する.実際,もしすべての頂点の次数が ならば,任意の頂点から出発し未訪問の辺を辿り続ければ閉歩道が得られ,閉路の存在が従い(2)に矛盾する.葉 とそれに接続する辺を除くと条件(2)を満たす 頂点のグラフとなり,帰納法の仮定より辺数は .辺を1本戻して .: を保ったまま閉路が存在すると仮定して矛盾を導く.閉路の辺を1つ除去しても連結性は保たれ, 頂点 辺の連結グラフが得られるが,連結グラフは を満たすので矛盾.: の連結成分を とし, の頂点数を とする.各 は木なので より .. より ,すなわち は連結.:木のすべての辺は橋である.辺 がある閉路に含まれるならば矛盾.:連結は仮定.辺 が閉路に含まれるならば でも - 間に道があり橋でないので矛盾.:閉路がないことは仮定.非辺 を追加すると,元の - 道と合わせて閉路が生じる.:閉路がないことは仮定.非連結と仮定すると,異なる成分の頂点 に対し を追加しても閉路は生じず矛盾. □
2 根付き木
定義 3 (根付き木).
木 の特定の頂点 を根(root)として指定したものを根付き木(rooted tree)という.根 から各頂点への唯一の道によって親子関係が定まる:- 間の道において が に近い側にあるとき は の親, は の子である.子を持たない頂点を葉(leaf)という.
3 Cayley の公式
定理 4 (Cayley の公式).
個のラベル付き頂点 上のラベル付き木の総数は である.
証明.
Prü 頂点のラベル付き木と長さ の列 ()の間に全単射を構成する.木から列への写像:木 に対し,以下を 回繰り返す.最小のラベルを持つ葉 を選び, の隣接頂点を として記録し, を除去する.列から木への写像:列 から木を復元する. とする. に対し, の元のうち列 に現れない最小のものを とし,辺 を追加して から を除く.最後に に残った2頂点を辺で結ぶ.この2つの写像が互いに逆であることが確認でき,全単射が得られる.列は 通りあるので結論が従う. □
例 5.
のとき .3頂点のラベル付き木は辺集合が ,, の3種類で一致する.
4 全域木と最小全域木
定義 6 (全域木).
連結グラフ の全域木(spanning tree)とは, の全頂点を含む部分グラフであって木であるものをいう.
定理 7.
連結グラフは必ず全域木を持つ.
証明.
が連結で閉路を持てば木である.そうでなければ閉路の辺を1つ除去しても連結性は保たれる.辺数は有限なのでこの操作を繰り返せば木が得られる. □
定義 8 (最小全域木).
辺に重み が付いた連結グラフ に対して,全域木 のうち を最小にするものを最小全域木(MST: minimum spanning tree)という.
定理 9 (カット性質).
辺重みが相異なるとき,任意のカット( の2分割 を跨ぐ辺の集合)の中で最小重みの辺は MST に含まれる.
証明.
最小重み辺 (,)が MST に含まれないと仮定する. における - 道はカットを奇数回横切るので, 以外のカット辺 を含む. は全域木であり より となって最小性に矛盾. □
注意 10 (Kruskal のアルゴリズム).
辺を重みの小さい順にソートし,閉路を作らない限り辺を追加する.Union-Find を用いると時間計算量 で MST が得られる.
アルゴリズム 1: Kruskal のアルゴリズム
Input:
連結グラフ ,重み関数 Output:
最小全域木の辺集合 の辺を重み の昇順にソート:
for all
MakeSet()
// Union-Find 初期化
end for
for to
とする
if
Union()
end if
end for
return
注意 11 (Prim のアルゴリズム).
1頂点から開始し,現在の木に隣接するカット辺のうち最小重みの辺を繰り返し追加する.優先度付きキューを用いると時間計算量 で MST が得られる.
アルゴリズム 2: Prim のアルゴリズム
Input:
連結グラフ ,重み関数 ,開始頂点 Output:
最小全域木の辺集合 ,
for all
end for
優先度付きキュー に全頂点を 値で挿入
while
if
end if
for all with
if
DecreaseKey()
end if
end for
end while
return