1 グラフの表現と歩道の数え上げ
定義 1.1 (隣接リストと隣接行列).V={1,…,n}とする。Gの隣接リスト表現とは、各頂点iに対しその隣接頂点の並びAdj[i]を格納する構造をいう。隣接行列表現とは、
Aij={10{i,j}∈E (有向グラフでは (i,j)∈E)それ以外で定まるn×n行列Aをいう(多重辺を許すときはAijをiからjへの辺の本数とする)。両表現の資源量は次のとおりである。
- 隣接リスト:領域Θ(n+m)。頂点iの全隣接頂点の走査はΘ(degi)、特定の辺{i,j}の存在判定はO(degi)。
- 隣接行列:領域Θ(n2)。特定の辺の存在判定はO(1)、頂点iの全隣接頂点の走査はΘ(n)。
疎なグラフ(m=o(n2))では隣接リストが、密なグラフや辺の即時判定を要する場面では隣接行列が有利である。
無向単純グラフの隣接行列は対称(A=A⊤)で対角成分は0である。この行列の冪は、歩道の数え上げという組合せ的な意味をもつ。
命題 1.2 (隣接行列の冪と歩道数).AをGの隣接行列とする。任意の整数k≥0と頂点i,jに対し、(Ak)ijはiからjへの長さkの歩道の総数に等しい。
証明.kに関する帰納法による。k=0のときA0=Iで(I)ij=δijであり、長さ0の歩道は「頂点iにとどまる」1本がi=jのときにのみ存在するから、主張は成り立つ。
k−1で成り立つと仮定する(k≥1)。行列の積の定義により
(Ak)ij=ℓ=1∑n(Ak−1)iℓAℓj.iからjへの長さkの歩道は、最後の頂点の直前の頂点ℓを選ぶことで、「iからℓへの長さk−1の歩道」と「辺{ℓ,j}」に一意に分解される。逆にこの二つを与えれば長さkの歩道が一意に定まる。帰納法の仮定より前者の本数は(Ak−1)iℓ、後者を付け足せる本数はAℓj(辺の本数)であるから、積(Ak−1)iℓAℓjが「ℓを経由する長さkの歩道」の本数を与える。ℓについて足し合わせれば総数を得る。▨
2 幅優先探索と最短距離
以下、重みを付けない有限グラフを考える。始点sから頂点vへの距離d(s,v)を、s–v歩道に現れる辺の本数の最小値と定め、sからvに到達できないときはd(s,v)=∞とする(辺数最小の歩道は道にとれるので、道に限定しても同じ値である)。
定義 2.1 (幅優先探索(BFS)). 始点sからの幅優先探索とは、次の手続きである。距離見積りdist[⋅]をdist[s]=0、他は∞に初期化し、sを訪問済みとして FIFO キューQに入れる。Qが空でない間、先頭の頂点uを取り出し、その各隣接頂点vのうち未訪問のものについて
dist[v]:=dist[u]+1,parent[v]:=uと定め、vを訪問済みにしてQの末尾に加える。訪問済みになった各v (=s)について辺{parent[v],v}を集めたものを BFS 木という。
BFS の正しさは、キューが「距離のそろった頂点」を層ごとに保持するという不変条件に帰着する。
補題 2.2 (キューの単調性). BFS の実行中、キューに頂点w1,…,wrが先頭から末尾の順に並んでいるとき、
dist[w1]≤dist[w2]≤⋯≤dist[wr]≤dist[w1]+1が常に成り立つ。
証明. キューへの操作回数に関する帰納法で示す。初期状態はキューが[s]の 1 要素で、dist[s]=0ゆえ自明に成り立つ。ある時点で不変条件が成り立つとして、次の操作後も保たれることをいう。
BFS の 1 反復は「先頭u=w1を取り出し、続いてuの未訪問隣接頂点vをいくつか末尾に加える」からなる。取り出し後のキューは[w2,…,wr]で、加える各vはdist[v]=dist[u]+1=dist[w1]+1をもつ。よって操作後のキュー[w2,…,wr,v,…]について、
- 単調非減少性:仮定よりdist[w2]≤⋯≤dist[wr]≤dist[w1]+1=dist[v]であり、加えたvたちは互いに等しいから、全体で非減少である。
- 差の上界:残った先頭はw2(存在すれば)でdist[w2]≥dist[w1]、末尾はdist[w1]+1ゆえ、末尾と先頭の差は≤1。w2が存在せず新しいvだけになる場合は全要素が等しく、やはり成り立つ。
以上より不変条件は保たれる。▨
補題 2.2から直ちに、頂点はdist値の非減少順に取り出され、dist値の割り当ても時間について非減少である。これを用いて主定理を示す。
定理 2.3 (BFS は最短距離を計算する). 有限グラフに対し、始点sからの BFS は終了時にすべての頂点vについてdist[v]=d(s,v)を満たす(到達不能なら両辺∞)。
証明. まず (a) 訪問済みの各vについてdist[v]は実在するs–v歩道の長さである、を反復回数の帰納法で示す。sは長さ0の歩道に対応する。dist[v]がdist[u]+1と定められるとき、uは既に訪問済みで(帰納法の仮定より)長さdist[u]のs–u歩道をもつから、辺{u,v}を継ぎ足せば長さdist[u]+1のs–v歩道を得る。ゆえに訪問済みvではdist[v]≥d(s,v)である。
次に (b)d(s,v)=k<∞なるvは訪問されdist[v]=kとなる、をkに関する帰納法で示す。k=0はv=sでdist[s]=0ゆえ成り立つ。k≥1とし、距離k−1以下の全頂点で主張が成り立つと仮定する。d(s,v)=kとし、長さkの最短s–v道のvの直前の頂点をuとすると、その道のs–u部分は長さk−1の歩道であり、d(s,u)≤k−1。一方d(s,u)≥k−1でもある(もしd(s,u)≤k−2なら、その最短歩道に辺{u,v}を足してd(s,v)≤k−1となり矛盾)。ゆえにd(s,u)=k−1。帰納法の仮定よりuは訪問されdist[u]=k−1、したがってuはキューに入れられ、いつか取り出されて隣接頂点vが調べられる。その時点でvが未訪問ならdist[v]:=dist[u]+1=kと定まる。既に訪問済みなら、vはそれ以前に取り出された頂点u′によってdist[v]=dist[u′]+1と定められている。u′はuより先に取り出されたので、取り出し順の単調性よりdist[u′]≤dist[u]=k−1、ゆえにdist[v]≤k。いずれの場合も (a) のdist[v]≥d(s,v)=kと合わせてdist[v]=kを得る。
最後に、到達不能なvは決して訪問されない(訪問はsの成分内の辺に沿ってのみ伝播し、(a) により訪問済みならs–v歩道が存在する)からdist[v]=∞=d(s,v)。(a)(b) を合わせて、すべてのvでdist[v]=d(s,v)である。▨
隣接リストで実装すると、各頂点は一度だけキューに入り、各辺は端点から定数回調べられるので、BFS はO(n+m)時間で走る。
3 深さ優先探索と辺の分類
定義 3.1 (深さ優先探索(DFS)). 始点sからの深さ優先探索とは、sを訪問し、sの未訪問隣接頂点vがあれば直ちにvへ再帰的に潜り、戻ってから次の隣接頂点を試す手続きである(スタック、または再帰呼び出しで実現する)。大域時計を用い、頂点uを初めて訪問した時刻を行き掛け時刻d[u]、uの探索を終えて戻る時刻を帰り掛け時刻f[u]とする。未訪問頂点vをuから初めて訪問したときの辺{u,v}を集めたものを DFS 木(全体では DFS 森)という。
再帰のスタック規律から、時刻区間には次の入れ子構造がある。
補題 3.2 (括弧性). 相異なる頂点u,vについて、時刻区間[d[u],f[u]]と[d[v],f[v]]は互いに素であるか、一方が他方に含まれるかのいずれかである。さらに[d[v],f[v]]⊂[d[u],f[u]]であることと、vが DFS 森でuの(真の)子孫であることは同値である。
証明.d[u]<d[v]としてよい(対称)。区間[d[u],f[u]]はuの探索がスタック上にある時間帯に対応する。d[v]<f[u]ならばvはuの探索がスタック上にある間に発見されたので、LIFO 規律によりDFS(v)はDFS(u)が戻る前に完了しf[v]<f[u]、よって[d[v],f[v]]⊂[d[u],f[u]]。逆にd[v]>f[u]ならばd[u]<f[u]<d[v]<f[v]で二区間は互いに素である。d[v]=f[u]は時計が相異なる値をとるので起こらない。したがって二区間は「一方が他方を含む」か「互いに素」かのいずれかに限る。
包含と子孫関係の同値を示す。[d[v],f[v]]⊂[d[u],f[u]](u=v)なら、上の議論のとおりvはuの探索がスタック上にある間に発見されており、この間に発見される頂点は再帰の入れ子構造からすべてuの子孫である。逆にvがuの子孫なら、vはuから木辺の列をたどってDFS(u)の実行中に発見・完了するのでd[u]<d[v]かつf[v]<f[u]、すなわち区間は真に含まれる。▨
命題 3.3 (無向グラフの DFS における非木辺は後退辺). 無向グラフの DFS では、DFS 木に属さない各辺{u,v}は必ず後退辺である。すなわち一方の端点が DFS 木でもう一方の(真の)先祖になっている。したがってGが閉路をもつことと、DFS が後退辺(親への辺を除く)に出会うことは同値であり、DFS は閉路検出に使える。
証明. 辺{u,v}をとり、d[u]<d[v]とする(対称なので一般性を失わない)。DFS(u)は戻る前にuの全隣接頂点を走査するので、辺{u,v}はu側から時刻区間[d[u],f[u]]内のある時点で調べられる。その時点でvが未訪問であれば、vはuの子として発見され{u,v}は木辺になる。vが既に訪問済みであれば、vはuの発見後(d[v]>d[u])かつDFS(u)が戻る前(調べた時刻≤f[u])に発見されているのでd[u]<d[v]<f[u]、補題 3.2よりvはuの子孫である。ゆえに{u,v}はu(先祖)とv(子孫)を結ぶ後退辺である。木辺でも後退辺でもない辺(横断辺・前進辺)は生じない。
閉路検出について。DFS 森は森だから辺数はn−c(cは成分数)で、Gが閉路をもつのはm>n−c、すなわち非木辺が存在するとき、かつそのときに限る(§D2.7 定理 3.6)。非木辺はいま示したとおり後退辺であり、後退辺{u,v}(vがuの真の先祖)があれば木のvからuへの道にこの辺を足して閉路が得られる。逆に閉路があれば非木辺すなわち後退辺が存在する。無向グラフでは子から親へ戻る木辺自身がもう一度調べられるが、これは後退辺に数えない。▨
系 3.4 (探索の反復による連結成分の列挙). 未訪問の頂点から探索(BFS または DFS)を繰り返し起動すると、各起動はその始点の連結成分をちょうど発見し、全体でGの連結成分が隣接リスト上Θ(n+m)時間で列挙される。
証明. 始点sからの一度の探索が発見する頂点全体は、sから到達可能な頂点の集合に一致する(探索は辺に沿ってのみ伝播し、到達可能な頂点はすべて発見される)。§D2.7 命題 2.4により到達可能性は同値関係で、その同値類が連結成分だから、この集合はsを含む連結成分そのものである。探索終了後、まだ未訪問の頂点があればそれは別の成分に属するので、そこから起動すれば次の成分が得られる。各頂点は一度だけ発見され、隣接リストでは各辺{u,v}は両端点から一度ずつ計 2 回調べられるので、総計算量はΘ(n+m)である。▨
命題 3.5. 有限無向グラフG=(V,E)に対し、各頂点を「未着色」、色0、色1のいずれかで管理する。未着色の頂点rを選ぶたびにrを色0にし、rから BFS または DFS を行う。辺{u,v}を走査したとき、vが未着色ならvをuと反対の色にして探索へ加え、vが着色済みでuと同色なら「二部グラフでない」と出力して停止する。すべての連結成分を衝突なく走査し終えたら、色0の頂点集合X0と色1の頂点集合X1を出力する。
この手続きはO(∣V∣+∣E∣)時間で停止し、衝突なく停止することとGが二部グラフであることは同値である。衝突がなければV=X0⊔X1は二部分割であり、衝突があればGは奇数長の閉路をもつ(§D2.7 定理 5.3)。
証明. 一つの連結成分の探索中、着色済み頂点の集合と各頂点の色を状態とする。次の不変条件を用いる。対象成分が二部分割A⊔Bをもつなら、必要に応じてA,Bを入れ替えて根rをAに置いたとき、着色済みの各頂点はAに属するなら色0、Bに属するなら色1である。
根を色0にした直後には不変条件が成り立つ。辺{u,v}を通じて未着色のvを着色する段階では、二部分割の定義によりuとvは反対側に属するので、uと反対の色を与えた後にも不変条件が保たれる。着色済みの頂点へ至る辺を走査するだけなら状態は変わらない。したがって、Gが二部グラフなら同色の両端をもつ辺には出会わず、この手続きが誤って拒否することはない。
反対に、すべての辺を衝突なく走査し終えたとする。各頂点はいずれか一方の色をもち、走査済みの各辺の両端は異なる色なので、X0とX1はそれぞれ独立集合であり、V=X0⊔X1は二部分割である。途中で同色の両端をもつ辺に出会った場合にGが二部であると仮定すると、上の不変条件によりその両端は二部分割の反対側に属し、異なる色をもつはずなので矛盾する。よってこの場合はGが二部グラフでなく、§D2.7 定理 5.3により奇数長の閉路をもつ。
各頂点は一度だけ着色され、隣接リストでは各辺を両端から高々一度ずつ調べる。初期化と未着色の根の選択も全頂点を通じて行えるので、総時間はO(∣V∣+∣E∣)であり、手続きは有限回で停止する。▨
4 重み付き最短路:最適部分構造と緩和
この節と次のダイクストラ法の節では、有限有向グラフと有限無向グラフの双方を扱う。有向グラフではE→:=Eとし、無向グラフでは各辺{u,v}∈Eを相反する二つの向き(u,v),(v,u)で通れるものとして
E→:={(u,v),(v,u):{u,v}∈E}
とおく。非負重みw:E→→R≥0を付け、無向グラフではw(u,v)=w(v,u)と仮定する。以下の(u,v)はE→の辺を表す。s–v有向歩道の重みを辺重みの総和とし、距離d(s,v)をそのような歩道の重みの最小値(到達不能なら∞)と定める。非負重みでは、歩道から有向閉路を除いても重みは増えないので、最小値は有向道で達成される。
補題 4.1 (最短路の最適部分構造と三角不等式). 上の意味での非負重み有向グラフまたは無向グラフにおいて、次が成り立つ。
- (最適部分構造)p=(v0,v1,…,vk)が最短v0–vk道ならば、任意の0≤i≤j≤kに対し部分道(vi,…,vj)は最短vi–vj道である。
- (三角不等式) 任意の辺(u,v)(重みw(u,v))に対しd(s,v)≤d(s,u)+w(u,v)。
証明. 1.pの重みはw(p)=w(v0..vi)+w(vi..vj)+w(vj..vk)と分解される。もしvi–vj間により重みの小さい道qがあれば、pの中間部分をqに置き換えてv0–vk歩道が得られ、その重みはw(p)より小さい。非負重みゆえこの歩道は同じか小さい重みの道を含み、w(p)=d(v0,vk)の最小性に反する。ゆえに(vi,…,vj)は最短である。
2.uが到達不能なら右辺は∞で自明。uが到達可能なら、最短s–u道(重みd(s,u))に辺(u,v)を継ぎ足すと重みd(s,u)+w(u,v)のs–v歩道になり、d(s,v)はその最小値以下だからd(s,v)≤d(s,u)+w(u,v)。▨
最短路アルゴリズムの共通部品は緩和である。各頂点に見積りd[v]を持ち、d[s]=0、他を∞に初期化する。辺(u,v)の緩和とは、d[u]+w(u,v)<d[v]ならばd[v]:=d[u]+w(u,v)(およびparent[v]:=u)と更新する操作である。
命題 4.2 (緩和の不変条件). 上の初期化から始めて任意の順序で緩和を行うとき、各頂点vについて次が常に成り立つ。
- d[v]は∞であるか、実在するs–v歩道の重みである。
- d[v]≥d(s,v)(過小評価しない)。
- d[v]は単調非増加である。
証明. 3 は緩和が値を下げるか保つだけなので明らか。1 を緩和回数の帰納法で示す。初期状態ではd[s]=0が長さ0の歩道の重み、他は∞。緩和でd[v]がd[u]+w(u,v)に更新されるとき、帰納法の仮定よりd[u]は実在するs–u歩道の重みだから、辺(u,v)を足せば重みd[u]+w(u,v)のs–v歩道になる。2:1 よりd[v]は∞か実在歩道の重みであり、非負重みでは任意のs–v歩道の重みは(それが含む道の重み以上ゆえ)d(s,v)以上だからd[v]≥d(s,v)。▨
命題 4.2の 2・3 から、いったんd[v]=d(s,v)に達すればそれ以上下がらず、値は確定する。残る問題は「どの順序で緩和すれば確定するか」である。
5 ダイクストラ法
定理 5.1 (ダイクストラ法の正当性). 上の意味での非負重み有向グラフまたは無向グラフにおいて、次のダイクストラ法は各頂点vのd[v]=d(s,v)を正しく計算する。確定集合Sを空に、d[⋅]を上記のとおり初期化する。Sに属さない頂点のうちd[⋅]が最小のものuを選んでSに加え、uから出る各辺(u,v)を緩和する。これを全頂点がSに入るまで繰り返す。頂点uがSに加えられる時点でd[u]=d(s,u)が成り立つ。
証明. 不変条件「Sに加えられる各頂点uについて、その時点でd[u]=d(s,u)」を、Sに加える操作の回数に関する帰納法で示す。最初に加えるのはd最小のs(d[s]=0=d(s,s))で成り立つ。
ある時点でSが不変条件を満たしているとし、次に選ばれる頂点u=argminv∈/Sd[v]を考える。命題 4.22 よりd[u]≥d(s,u)は既に成り立つので、d[u]≤d(s,u)を示せばよい。d(s,u)=∞ならd[u]=∞で等号ゆえ、以下d(s,u)<∞とする。最短s–u道Pをとる。s∈Sかつu∈/Sだから、PはSから外へ出る。P上でSに属さない最初の頂点をy、その直前の頂点をxとする(x∈S)。
xがSに加えられたとき辺(x,y)は緩和されているので、その後d[y]≤d[x]+w(x,y)。帰納法の仮定よりxが加えられた時点でd[x]=d(s,x)、かつ以後d[x]は下がらないが命題 4.22 でd(s,x)未満にはならないのでd[x]=d(s,x)のままである。またPのs–y部分は最短(補題 4.11)でd(s,y)=d(s,x)+w(x,y)。よって
d[y]≤d[x]+w(x,y)=d(s,x)+w(x,y)=d(s,y).命題 4.22 のd[y]≥d(s,y)と合わせd[y]=d(s,y)。さらにyは最短路P上でuより手前(または一致)にあり、非負重みゆえd(s,y)≤d(s,u)。したがって
d[y]=d(s,y)≤d(s,u)≤d[u].ところがuはSの外でd最小として選ばれ、yもSの外にあるからd[u]≤d[y]。両者を合わせるとd[u]=d[y]=d(s,u)、すなわちd[u]≤d(s,u)を得る。ゆえにd[u]=d(s,u)で不変条件が保たれる。
各頂点は一度Sに加えられ、そのときd値がd(s,⋅)に確定し以後不変。全頂点がSに入った終了時、すべてのvでd[v]=d(s,v)である。▨
命題 5.2 (配列実装したダイクストラ法の手数).定理 5.1の入力を、各有向辺(u,v)の終点と重みをAdj[u]に格納する隣接リストで与えるとします。無向辺は両方向の二つの項として格納します。距離見積りと確定状態を長さnの配列に持ち、各反復の最小値選択では未確定の全頂点を線形走査し、一つの辺の緩和をO(1)時間で行うものとします。
この実装では、最小値選択は高々n回で各回に高々n頂点を調べ、隣接リストの項は全実行を通じて有向グラフならm回、無向グラフなら2m回調べます。したがって実行時間はO(n2+m)、入力の隣接リストを除く補助領域はO(n)です。
証明. 距離見積りと確定状態の初期化にはO(n)時間を要します。各頂点は高々一度だけ確定されるので反復は高々n回であり、各反復の線形走査にはO(n)時間を要します。したがって最小値選択の総時間はO(n2)です。
頂点uが確定されたときだけAdj[u]を一度走査するため、各隣接リストの項は全実行を通じて一度だけ調べられます。有向グラフの項数はm、無向グラフの項数は2mであり、一つの項に対する加算・比較・必要な代入はO(1)時間です。したがって緩和の総時間はO(m)です。以上を合わせて実行時間はO(n2+m)となります。距離見積り、親、確定状態の各配列はいずれも長さnなので、入力を除く補助領域はO(n)です。▨
例 5.4 (ダイクストラ法の実行例(数値検算)). 頂点{s,1,2,3,4}、有向辺と重みを
s→1(2), s→2(5), 1→2(1), 1→3(4), 2→3(2), 2→4(7), 3→4(1)とする。ダイクストラ法を走らせると次のように確定していく(かっこ内は確定時のd値)。
- sを確定(0)。緩和でd[1]=2, d[2]=5。
- S外で最小の1を確定(2)。緩和でd[2]=min(5,2+1)=3、d[3]=2+4=6。
- 次に最小の2を確定(3)。緩和でd[3]=min(6,3+2)=5、d[4]=3+7=10。
- 次に3を確定(5)。緩和でd[4]=min(10,5+1)=6。
- 最後に4を確定(6)。
確定順はs(0),1(2),2(3),3(5),4(6)でd値は非減少である。最終結果d=(0,2,3,5,6)は手計算とも一致する:d(s,2)=min(5,2+1)=3、d(s,3)はs→1→2→3=2+1+2=5、d(s,4)はs→1→2→3→4=6(対してs→2→4=3+7=10は劣る)。
6 グラフ不変量
定義 6.1 (グラフ同型とグラフ不変量). 二つのグラフG=(V,E),H=(W,F)が同型(G≅H)であるとは、全単射φ:V→Wで
{u,v}∈E⟺{φ(u),φ(v)}∈Fを満たすものが存在することをいう。グラフに数(または多重集合など)を割り当てる量ϕがグラフ不変量であるとは、G≅H⇒ϕ(G)=ϕ(H)を満たすことをいう。頂点数、辺数、連結成分数、内周(最短閉路長)、次数列(次数を並べた多重集合)、彩色数などは不変量である。逆向きϕ(G)=ϕ(H)⇒G≅Hまで満たす不変量を完全不変量という。
不変量は同型判定の道具である。二つのグラフである不変量の値が異なれば、それだけで非同型と結論できる。しかし単一の不変量で同型を保証できる(完全である)とは限らない。
例 6.2 (次数列は不変量だが完全ではない). 次数列が不変量であることは、同型φが頂点vとその像φ(v)の次数を保つ(隣接を保つ全単射だからdegv=degφ(v))ことによる。しかし完全ではない。6頂点の閉路C6と、二つの三角形の非交和C3⊔C3を比べると、いずれも全頂点の次数が2で、次数列は同じ多重集合(2,2,2,2,2,2)である。ところがC6は連結(成分数1、内周6)でC3⊔C3は非連結(成分数2、内周3)だから、成分数という別の不変量が両者を区別し、C6≅C3⊔C3である。よって同じ次数列をもつ非同型グラフが存在し、次数列は完全不変量ではない。
7 最小全域木とカット性質
連結グラフG=(V,E)に非負とは限らない実重みw:E→Rを与える。Gの全域木(§D2.7 命題 3.9により存在する)のうち辺重みの総和が最小のものを最小全域木(MST)という。全域木は有限個なので最小のものは存在する。Vの分割(S,V∖S)(∅=S⊊V)をカット、片方の端点がS、他方がV∖Sにある辺をこのカットの横断辺という。
定理 7.1 (カット性質). 任意のカット(S,V∖S)に対し、その横断辺のうち重み最小のものeは、ある最小全域木に属する。さらに全辺の重みが相異なるならば、eはすべての最小全域木に属する。
証明.Tを一つの最小全域木とする。e={u,v}∈Tならそのまま結論を得る。e∈/Tとする。木Tに辺eを加えると、T内のu–v道P(§D2.7 定理 3.6により一意)とeからなる閉路Cがちょうど一つでき、他に閉路はできない。eはカット(S,V∖S)を横断するので、閉路CはSとV∖Sの間を必ず偶数回渡り、e以外に少なくとも一つ横断辺e′∈P(e′=e)をもつ。
いまT′=(T∖{e′})∪{e}を考える。e′は閉路C上の辺なので、これを除いてもCの残りの道で連結性は保たれ、T′はn−1本の辺をもつ連結グラフ、すなわち全域木である(§D2.7 定理 3.6)。その重みは
w(T′)=w(T)−w(e′)+w(e)≤w(T)で、最後の不等号はeが横断辺のうち重み最小ゆえw(e)≤w(e′)による。Tは最小だからw(T′)≥w(T)でもあり、w(T′)=w(T)。よってT′も最小全域木で、これはeを含む。ゆえにeはある最小全域木に属する。
全辺の重みが相異なる場合、e′=eならw(e)<w(e′)で上の不等号は狭義となりw(T′)<w(T)。これはTの最小性に反するので、実は最初からe∈Tでなければならない。Tは任意の最小全域木だったから、eはすべての最小全域木に属する。▨
証明. プリム法は、一つの頂点から始め、現在の木の頂点集合SとV∖Sのカットで最小重みの横断辺を繰り返し採用する。クラスカル法は、辺を重みの非減少順に調べ、現在の採用辺に加えても閉路を作らない辺を採用する。いずれについても、採用済み辺の集合をFと書く。
主張 7.2.1. プリム法ではFはSを頂点集合とする木であり、クラスカル法ではFは森である。さらに、いずれの方法でも、初期状態および各辺を採用した直後にFのすべての辺を同時に含む最小全域木Tが存在する。
証明. 初期状態ではF=∅である。プリム法ではSは最初の一頂点だけからなり、FはS上の木である。クラスカル法ではFは空の森である。Gは連結で全域木をもち、全域木は有限個だから最小全域木が存在し、これはFを含む。
プリム法で不変量が成り立っているとし、次に採用する辺をe={u,v}とする。u∈S、v∈/Sとしてよい。FはS上の木だから、F∪{e}はS∪{v}上の木である。不変量の最小全域木Tがeを含めば、TはそのままF∪{e}を含む。e∈/Tならば、Tにeを加えてできる閉路は、SとV∖Sの間をe以外にもう一度横断する辺e′を含む。Fの全辺は両端点がSにあるのでe′∈/Fである。プリム法はこのカットの最小重み辺eを選ぶからw(e)≤w(e′)であり、
T′=(T∖{e′})∪{e}はF∪{e}を含む全域木でw(T′)≤w(T)を満たす。Tの最小性からT′も最小全域木である。したがって不変量は保たれる。
クラスカル法で不変量が成り立っているとし、辺e={u,v}を採用するとする。採用条件よりu,vは森Fの異なる連結成分に属するので、F∪{e}は森である。不変量の最小全域木Tがeを含めば、そのまま結論を得る。e∈/Tならば、T内のuからvへの道は、uを含むFの連結成分SとV∖Sの間を横断する辺e′を含む。このe′はFの異なる連結成分を結ぶのでe′∈/Fである。またe′がeより前に調べられていたなら、その時点でも両端点は異なる連結成分に属していたのでe′は採用されたはずであり、e′∈/Fに反する。したがってe′はeより前には調べられておらず、辺を重みの非減少順に調べることからw(e)≤w(e′)である。よって
T′=(T∖{e′})∪{e}はF∪{e}を含む全域木であり、w(T′)≤w(T)とTの最小性から最小全域木である。したがってクラスカル法でも不変量は保たれる。▨
プリム法では、S=Vである限り連結性によりカット(S,V∖S)の横断辺が存在し、各反復でSの頂点が一つ増える。したがって有限回でS=Vとなり、Fは全域木になる。クラスカル法では、全辺を調べ終えたときFが非連結なら、Gの連結性によりFの異なる二成分を結ぶ辺が存在する。その辺は調べた時点で閉路を作らず採用されるはずだから矛盾する。したがって終了時のFは連結な森、すなわち全域木である。
どちらの方法でも主張 7.2.1により終了時のFを含む最小全域木Tが存在する。FとTは同じ頂点集合上の全域木で、ともに∣V∣−1本の辺をもつからF=Tである。よって出力Fは最小全域木である。▨
命題 7.3 (成分ラベル配列を用いたクラスカル法の手数).系 7.2のクラスカル法の入力を、両端点と重みを持つm本の辺の配列で与えるとします。辺は最悪時間O(mlog(m+1))の比較整列(たとえば§D2.9 定義 2.4)で重みの非減少順に並べます。各頂点の現在の連結成分を長さnのラベル配列で管理し、辺の両端のラベルが異なるときだけ辺を採用します。辺を採用したときは全頂点を一度走査し、二成分の一方のラベルを他方のラベルへ置き換えます。
この実装では、整列後に辺を高々m回調べてラベルを比較し、採用する高々n−1本の辺についてそれぞれ高々n個のラベルを調べます。したがって実行時間はO(mlog(m+1)+n2)です。
証明. 採用した比較整列にはO(mlog(m+1))時間を要します。整列後の走査では各辺を一度だけ調べ、両端のラベルの比較にはO(1)時間を要するので、この部分はO(m)です。
採用条件により、クラスカル法は現在の森の異なる二成分を結ぶ辺だけを採用します。辺を採用するたびに成分数が一つ減るので、採用回数は高々n−1回です。一回の併合では長さnのラベル配列を一度走査するため、併合の総時間はO(n2)です。ラベルの置換後には同じ連結成分の頂点が同じラベルをもち、異なる成分の頂点が異なるラベルをもつので、次の辺の採否は両端のラベル比較だけで正しく判定できます。以上を合わせて実行時間はO(mlog(m+1)+n2)です。▨