最小全域木(minimum spanning tree)とは、辺に実数の重みが与えられた連結なグラフの全域木のうち、辺の重みの和が最小のもののことである。全域木が最小全域木であることは、木にないループでない各辺がその基本閉路の中で最も重いこと、また木の各辺がその基本切断の中で最も軽いことと同値である。この特徴づけから、軽い辺から順に閉路ができない限り採用する Kruskal 法と、1 点から始めて今の木と外を結ぶ最も軽い辺を加える Prim 法が最小全域木を与えること、重みが相異なれば最小全域木はただ 1 つであることが従う。
いくつかの町を道路で結ぶとき、各区間の工事費がわかっていれば、どの町からどの町へも行けるようにする最も安い工事の選び方は何か。工事費を辺の重みとするグラフで考えると、選ぶ道路は輪を含まない方が安いので、答えは全域木のうち重みの和が最小のものになる。これを最小全域木(minimum spanning tree)という。
最小全域木は「軽い辺から順に、輪ができない限り採用する」(Kruskal 法)、あるいは「1 点から始めて、今の木と外を結ぶ最も軽い辺を加える」(Prim 法)という、そのつど最善に見える選択を繰り返すだけで得られる。このような貪欲な手順がうまくいく理由は、最小全域木が「木にない辺は、木に加えてできる閉路の中で最も重い」「木の辺は、木から除いてできる切断の中で最も軽い」という局所的な条件で特徴づけられることにある。
この記事では、最小全域木を定義し、閉路と切断による最適性の条件を証明し、そこから切断の性質・閉路の性質・重みが相異なるときの一意性・Kruskal 法と Prim 法の正しさ・最小全域木の道が「最大の辺の重み」を最小にすることを導く。
この記事のグラフは 全域木 の記事の定義「ループを許す多重グラフと基本用語」のとおり、有限集合 $V\neq\emptyset$、有限集合 $E$、各辺 $e$ に端点の集合 $\partial(e)$($V$ の 1 元または 2 元の部分集合)を対応させる写像 $\partial$ の組 $G=(V,E,\partial)$ とする。ループ(端点が 1 つの辺)と平行辺を許す。$n:=|V|$、$m:=|E|$ とする。全域木は辺集合 $T\subset E$ で表し、$(V,T)$ が木であるとき「$T$ は全域木である」という。全域木はループを含まず、辺をちょうど $n-1$ 本もつ(全域木 の記事の系「全域木の辺の本数」)。
連結なグラフ $G=(V,E,\partial)$ と、各辺に実数を割り当てる写像 $w\colon E\to\mathbb{R}$(重み)を考える。辺の集合 $F\subset E$ の重みを $w(F):=\sum_{e\in F}w(e)$ と定める。$G$ の全域木 $T$ で、$G$ のどの全域木 $T'$ についても $w(T)\le w(T')$ となるものを、$(G,w)$ の最小全域木(minimum spanning tree)という。
連結なグラフは全域木をもち(全域木 の記事の定理「全域木の存在」)、全域木は有限個しかないので、最小全域木は必ず存在する。連結でないグラフには全域木がないので、最小全域木もない。重みは負でもよい。重みの符号を逆にすれば、重みが最大の全域木を求める問題も同じ問題になる。
以下、全域木 $T$ について 2 種類の辺集合を使う。
全域木から辺 $f$ を 1 本除くと、木は 2 つに割れる。割れ目をまたぐ別の辺 $e$ を加えれば、また全域木に戻る。この「1 本抜いて 1 本差す」交換で重みが下がるなら、もとの木は最小ではない。逆に、どの交換でも重みが下がらなければ、その木は最小全域木である(thm-mst-optimality)。
この交換は、加える辺 $e$ の側から見ると「$e$ の基本閉路の上の辺を 1 本抜く」ことであり、抜く辺 $f$ の側から見ると「$f$ の基本切断の辺を 1 本差す」ことである。そこで最小全域木の条件は 2 通りに言える。木にない辺は、その基本閉路の中で最も重い(閉路の条件)。木の辺は、その基本切断の中で最も軽い(切断の条件)。Kruskal 法も Prim 法も、切断の中で最も軽い辺を選び続けることで、この条件を保ちながら木を作っている。
頂点 $a,b,c,d,e$ と辺 $bc$(重み $1$)、$ab$($2$)、$ac$($3$)、$bd$($4$)、$cd$($5$)、$de$($6$)、$ce$($7$)からなるグラフを考える。
三角形(頂点 $a,b,c$)の辺の重みを $w(ab)=w(ac)=1$、$w(bc)=2$ とする。全域木は 2 辺を選ぶ 3 通りで、重みは $\{ab,ac\}$ が $2$、$\{ab,bc\}$ と $\{ac,bc\}$ が $3$ なので、最小全域木は $\{ab,ac\}$ だけである。ところが $w(bc)=1$ に替えて 3 辺の重みをすべて $1$ にすると、3 つの全域木はどれも重み $2$ で、すべてが最小全域木になる。満たす性質:最小全域木が存在する。満たさない性質:一意である。破る仮定:cor-mst-unique の「重みが相異なる」。
三角形(頂点 $a,b,c$)の辺の重みを $w(ab)=1$、$w(bc)=w(ca)=2$ とする。全域木は 2 辺からなるので、どの全域木も重み $2$ の辺を少なくとも 1 本含み、全域木の辺の重みの最大値は $2$ より小さくならない。全域木 $\{bc,ca\}$ はこの最大値 $2$ を達成するが、重みは $4$ で、最小全域木 $\{ab,bc\}$、$\{ab,ca\}$ の重み $3$ より大きい。満たす性質:辺の重みの最大値が全域木の中で最小である。満たさない性質:重みの和が最小である。破る含意:「辺の重みの最大値が最小の全域木 ⇒ 最小全域木」は成り立たない。最小全域木を特徴づけるには、木全体の最大値ではなく、すべての 2 頂点を結ぶ木の道ごとの最大値を見る必要がある(thm-mst-bottleneck)。
以下、$G=(V,E,\partial)$ を連結なグラフ、$w$ を重みとする。
$T$ を $G$ の全域木、$e\notin T$ をループでない辺、$f\in T$ とする。次の 3 条件は同値である。
$(V,T\setminus\{f\})$ の 2 つの連結成分の頂点集合を $X,Y$ とする。
1 ⇔ 2:$(V,T\setminus\{f\})$ は閉路をもたない。全域木 の記事の補題「辺を加えても閉路ができない条件」により、$e$ を加えたものが閉路をもたないことと、$e$ の端点が $X$ と $Y$ に分かれること($e\in D_T(f)$)は同値であり、そのとき 2 つの成分は 1 つにまとまるので、$(T\setminus\{f\})\cup\{e\}$ は連結で閉路をもたない、すなわち全域木である。$e$ の端点が同じ成分にあれば閉路ができるので全域木でない。
2 ⇔ 3:$e$ の端点を $x,y$ とし、$x$ と $y$ を結ぶ $T$ の道を $P$ とする。$f\notin P$ なら $P$ は $T\setminus\{f\}$ の道なので、$x,y$ は同じ成分にあり、$e\notin D_T(f)$ である。$f\in P$ なら、$x,y$ は異なる成分にある。同じ成分にあれば $T\setminus\{f\}$ の中に $x$ と $y$ を結ぶ道があり、それは $f$ を含まないので $P$ と異なる $T$ の道になり、木の道の一意性に反するからである。よって $f\in C_T(e)$(すなわち $f\in P$)と $e\in D_T(f)$ は同値である。$\square$
$T$ を $G$ の全域木とする。次の 3 条件は同値である。
2 ⇔ 3:$e=f$ の組は両辺が等しい。$D_T(f)$ はループを含まず、$f$ 以外の元は $T$ に属さない。$C_T(e)$ の $e$ 以外の元は $T$ に属する。したがって 2 も 3 も「ループでない $e\notin T$ と $f\in T$ の組で $e\in D_T(f)$、すなわち(lem-mst-exchange により)$f\in C_T(e)$ となるものすべてについて $w(f)\le w(e)$」と同じ主張である。
1 ⇒ 2:ループでない $e\notin T$ と $f\in C_T(e)$ で $w(f)>w(e)$ となるものがあったとする。$f\neq e$ なので $f\in T$ であり、lem-mst-exchange により $T':=(T\setminus\{f\})\cup\{e\}$ は全域木で、$w(T')=w(T)-w(f)+w(e)< w(T)$ となる。これは 1 に反する。
3 ⇒ 1:最小全域木のうち、$T$ と共通の辺の本数 $|T\cap T^*|$ が最大のもの $T^*$ をとる。$T^*=T$ を示せばよい。$T^*\neq T$ とすると、どちらも辺は $n-1$ 本なので $f\in T\setminus T^*$ がある。$f$ の端点 $x,y$ は $(V,T\setminus\{f\})$ の異なる成分 $X\ni x$、$Y\ni y$ に属する。$T^*$ の中の $x$ から $y$ への道は $X$ から $Y$ へ移るので、一方の端点が $X$ に、他方が $Y$ にある辺 $e$ を含む。$e\in D_T(f)$ であり、$e\in T^*$、$f\notin T^*$ なので $e\neq f$、したがって $e\notin T$ である。
$f$ はループでなく $f\notin T^*$ で、$e$ は $T^*$ における $f$ の基本閉路 $C_{T^*}(f)$ に属する。lem-mst-exchange を $T^*$ に当てると、$T'':=(T^*\setminus\{e\})\cup\{f\}$ は全域木である。3 により $w(f)\le w(e)$ なので $w(T'')\le w(T^*)$ であり、$T''$ も最小全域木である。ところが $f\in T$、$e\notin T$ なので $|T\cap T''|=|T\cap T^*|+1$ となり、$T^*$ の選び方に反する。$\square$
この定理から、最小全域木であるかどうかは重みの大小関係だけで決まり、重みの値にはよらない。すなわち、$\varphi\colon\mathbb{R}\to\mathbb{R}$ が狭義単調増加なら、$(G,w)$ の最小全域木と $(G,\varphi\circ w)$ の最小全域木は同じである(条件 2 は $w(f)\le w(e)$ という比較だけからなるので)。たとえば重みをすべて 2 乗しても(重みが正なら)最小全域木は変わらない。
$\emptyset\neq S\subsetneq V$ とし、$e$ を $S$ を横切る辺のうち重みが最小のものとする。
1:$F\subset T_0$ となる最小全域木 $T_0$ をとる。$e\in T_0$ なら $T_0$ が求めるものである。$e\notin T_0$ とする。$e$ は $S$ を横切るのでループでなく、端点 $x\in S$、$y\notin S$ を結ぶ $T_0$ の道は、$S$ を横切る辺 $f$ を含む。$f\in C_{T_0}(e)$ で $f\neq e$ であり、$F$ の辺は $S$ を横切らないので $f\notin F$ である。lem-mst-exchange により $T_1:=(T_0\setminus\{f\})\cup\{e\}$ は全域木で、$e$ の最小性から $w(e)\le w(f)$ なので $w(T_1)\le w(T_0)$ であり、$T_1$ は $F\cup\{e\}$ を含む最小全域木である。
2:$e$ を含まない最小全域木 $T_0$ があったとして、1 と同じく $f$ をとると、$f\neq e$ は $S$ を横切るので $w(e)< w(f)$ であり、$w(T_1)< w(T_0)$ となって矛盾する。$\square$
辺 $e$ が $G$ のある閉路 $Z$ に含まれ、$Z$ の $e$ 以外のどの辺 $f$ についても $w(f)< w(e)$ であるとする。このとき $e$ はどの最小全域木にも含まれない。
$e$ がループなら、全域木はループを含まないので主張は正しい。$e$ がループでなく、ある最小全域木 $T$ が $e$ を含むとする。$e$ の端点は $(V,T\setminus\{e\})$ の異なる成分に属する。$Z$ から $e$ を除いた部分は一方の端点から他方の端点への歩道なので、2 つの成分を結ぶ辺 $f\neq e$ を含み、$f\in D_T(e)$ である。thm-mst-optimality の 3 により $w(e)\le w(f)$ となるが、これは $w(f)< w(e)$ に反する。$\square$
辺の重みがすべて相異なるなら、最小全域木はただ 1 つである。
$T\neq T'$ を最小全域木とし、$g\in T\setminus T'$ をとる。thm-mst-optimality の 3 ⇒ 1 の証明と同じく、$g$ の端点を結ぶ $T'$ の道の上に、$g\neq e\in D_T(g)\cap T'$ となる辺 $e$ がある。$T$ の切断の条件から $w(g)\le w(e)$ である。一方、$g\notin T'$ はループでなく、$e\in C_{T'}(g)$ なので、$T'$ の閉路の条件から $w(e)\le w(g)$ である。よって $w(e)=w(g)$ となり、重みが相異なることに反する。$\square$
重みに等しいものがあっても、重みの等しい辺の間に順序を決めて「重みが等しければ順序の早い方を軽いとみなす」ことにすれば、比較はすべて真の大小になる。Eri19 §7.1(pp. 257–259)は、この比較の規則のもとで最小全域木がただ 1 つに決まることを使って、以後の議論で重みが相異なると仮定している。
重みが相異なるとき、各頂点 $v$ について $v$ を端点にもつループでない辺のうち最も軽いものを選ぶと、選んだ辺はすべてただ 1 つの最小全域木に含まれる($S=\{v\}$ として cor-mst-cut の 2 を使う)。したがって選んだ辺は閉路を作らない。これを、すでに選んだ辺でつながった頂点のまとまりごとに繰り返すのが Borůvka の算法である(Eri19 §7.3、pp. 261–263)。重みが等しい辺があると、この選び方は閉路を作りうる。3 辺の重みがすべて $1$ の三角形(頂点 $a,b,c$)で、$a$ が $ab$、$b$ が $bc$、$c$ が $ca$ を選ぶと、選んだ 3 辺は閉路になる。
$G$ の辺を重みの小さい順(重みの等しい辺の順は任意)に $e_1,\dots,e_m$ と並べる。$F_0:=\emptyset$ とし、$k=1,\dots,m$ について、$e_k$ がループでなく、その 2 つの端点が $(V,F_{k-1})$ の異なる連結成分に属するとき $F_k:=F_{k-1}\cup\{e_k\}$、そうでないとき $F_k:=F_{k-1}$ と定める。$F_m$ を出力する手順を Kruskal 法という。
全域木 の記事の補題「辺を加えても閉路ができない条件」により、採用の条件は「$e_k$ を加えても閉路ができない」と同じである。どの $F_k$ も閉路をもたない。
Kruskal 法の出力 $F_m$ は $(G,w)$ の最小全域木である。
「$F_k$ はある最小全域木に含まれる」を $k$ についての帰納法で示す。$k=0$ は正しい。$F_k=F_{k-1}$ なら明らかなので、$e_k$ を採用した場合を考える。$e_k$ の端点の一方を含む $(V,F_{k-1})$ の連結成分の頂点集合を $S$ とすると、$e_k$ は $S$ を横切り、$F_{k-1}$ の辺は $S$ を横切らない。
$S$ を横切る辺はすべて添字が $k$ 以上であることを示す。$j< k$ とする。$e_j$ を採用したなら $e_j\in F_{k-1}$ なので $S$ を横切らない。$e_j$ を捨てたなら、$e_j$ はループであるか、端点が $(V,F_{j-1})$ の同じ連結成分にあった。$F_{j-1}\subset F_{k-1}$ なので端点は $(V,F_{k-1})$ でも同じ成分にあり、いずれにせよ $S$ を横切らない。辺は重みの小さい順に並んでいるので、$e_k$ は $S$ を横切る辺のうち重みが最小である。cor-mst-cut の 1 により $F_k=F_{k-1}\cup\{e_k\}$ はある最小全域木に含まれる。
最後に $F_m$ が全域木であることを示す。$F_m$ は閉路をもたない。$(V,F_m)$ が連結でないとし、その連結成分の頂点集合 $S\neq V$ をとる。$G$ は連結なので $S$ を横切る辺があり、そのうち添字最小のものを $e_k$ とする。$e_k$ の端点は $(V,F_m)$ の異なる成分にあり、$F_{k-1}\subset F_m$ なので $(V,F_{k-1})$ でも異なる成分にある。よって $e_k$ は採用されて $e_k\in F_m$ となり、$S$ が $(V,F_m)$ の連結成分であることに反する。したがって $F_m$ は全域木である。$F_m$ はある最小全域木 $T_0$ に含まれ、どちらも辺は $n-1$ 本なので $F_m=T_0$ である。$\square$
頂点 $r$ を 1 つ選び、$W_0:=\{r\}$、$T_0:=\emptyset$ とする。$k=0,1,\dots$ について $W_k\neq V$ である間、$W_k$ を横切る辺のうち重みが最小のもの $e$ を 1 つ選び、$e$ の $W_k$ の外の端点を $v$ として $W_{k+1}:=W_k\cup\{v\}$、$T_{k+1}:=T_k\cup\{e\}$ と定める。$W_k=V$ となったときの $T_k$ を出力する手順を Prim 法(Jarník 法とも)という。
$G$ は連結なので、$W_k\neq V$ なら $W_k$ を横切る辺があり、手順は止まらずに進む。$|W_k|=k+1$ なので、ちょうど $n-1$ 段で $W_{n-1}=V$ となる。
Prim 法の出力 $T_{n-1}$ は $(G,w)$ の最小全域木である。
「$(W_k,T_k)$ は木であり、$T_k$ はある最小全域木に含まれる」を $k$ についての帰納法で示す。$k=0$ では $(\{r\},\emptyset)$ は木で、$\emptyset$ はどの最小全域木にも含まれる。$k$ で成り立つとする。$T_k$ の辺は両端点が $W_k$ にあるので $W_k$ を横切らず、$e$ は $W_k$ を横切る辺のうち重みが最小なので、cor-mst-cut の 1 により $T_{k+1}=T_k\cup\{e\}$ はある最小全域木に含まれる。$(W_k,T_k)$ に新しい頂点 $v$ と、$v$ と $W_k$ を結ぶ辺 $e$ を加えたものは、連結で閉路をもたないので木である。
$k=n-1$ で $W_{n-1}=V$ なので、$T_{n-1}$ は全域木で、ある最小全域木 $T_0'$ に含まれる。どちらも辺は $n-1$ 本なので $T_{n-1}=T_0'$ である。$\square$
Kruskal 法の正しさは BM76 §2.5 Theorem 2.10(p. 39)に、Eri19 §7.5(pp. 265–267)にもある。BM76 の証明は、Kruskal 法の出力と最初に食い違う位置が最も遅い最小全域木をとって交換するもので、上の証明とは組み立てが違う。Prim 法は Eri19 §7.4(pp. 263–265)にあり、同書 Lemma 7.2(p. 260)は、重みが相異なるときに切断の性質(cor-mst-cut の 2)を示している。Kruskal 法も Prim 法も、cor-mst-cut の 1 の条件を満たす辺を 1 本ずつ加える同じ枠組みの手順である(Eri19 §7.2、pp. 259–261)。
$u,v\in V$ とし、$u$ と $v$ を結ぶ $G$ の歩道 $Q$ について、$Q$ が通る辺の重みの最大値を $\beta(Q)$ と書く($u=v$ で長さ $0$ の歩道なら $\beta(Q):=-\infty$ とする)。全域木 $T$ の中で $u$ と $v$ を結ぶ道を $P_T(u,v)$ と書く。
$T$ を $G$ の全域木とする。次の 2 条件は同値である。
1 ⇒ 2:$u\neq v$ としてよい($u=v$ なら $P_T(u,v)$ は長さ $0$ で、左辺は $-\infty$)。$P_T(u,v)$ の辺のうち重みが最大のもの $f$ をとる。$f$ は $u$ と $v$ を結ぶ $T$ の道の上にあるので、lem-mst-exchange の証明と同じく、$u$ と $v$ は $(V,T\setminus\{f\})$ の異なる成分にある。$Q$ は $u$ から $v$ へ進むので、2 つの成分を結ぶ辺 $e$、すなわち $e\in D_T(f)$ を通る。thm-mst-optimality の 3 により $\beta(P_T(u,v))=w(f)\le w(e)\le\beta(Q)$ である。
2 ⇒ 1:ループでない $e\notin T$ の端点を $x,y$ とし、$Q$ を $e$ 1 本だけの歩道 $x,e,y$ とすると、2 から $\beta(P_T(x,y))\le w(e)$ である。$C_T(e)$ の $e$ 以外の辺は $P_T(x,y)$ の辺なので、thm-mst-optimality の 2 が成り立ち、$T$ は最小全域木である。$\square$
$\beta(Q)$ は、重みを「通るのに必要な高さ」と考えたとき、歩道 $Q$ で $u$ から $v$ へ行くのに越えなければならない最も高い峠の高さである。定理の 2 は、最小全域木の道が、すべての歩道の中で最高点を最も低く抑えることを述べている。ex-mst-bottleneck-tree は、2 の条件を「全域木全体の最大の辺」だけに弱めると最小全域木を特徴づけられないことを示している。
| 外す条件・替える条件 | 反例 | 成り立たなくなること |
|---|---|---|
| cor-mst-unique の「重みが相異なる」 | 3 辺の重みがすべて $1$ の三角形 | 3 つの全域木がすべて最小全域木 |
| cor-mst-cycle の「真に重い」($w(f)< w(e)$)を「重さが同じ以下」($w(f)\le w(e)$)に弱める | 3 辺の重みがすべて $1$ の三角形の辺 $ab$ | $ab$ は閉路の中で最も重い辺の 1 つだが、最小全域木 $\{ab,ac\}$ に含まれる |
| cor-mst-cut の 2 の「最小のものがただ 1 つ」 | 3 辺の重みがすべて $1$ の三角形と $S=\{a\}$ | $ab$ は $S$ を横切る最小の辺だが、最小全域木 $\{ac,bc\}$ に含まれない |
| def-mst-kruskal の「重みの小さい順」(任意の順に替える) | $w(ab)=w(ac)=1$、$w(bc)=2$ の三角形を $bc,ab,ac$ の順に処理 | 出力 $\{bc,ab\}$ の重みは $3$ で、最小の $2$ でない |
| thm-mst-bottleneck の 2 を「全域木の辺の重みの最大値が最小」に弱める | $w(ab)=1$、$w(bc)=w(ca)=2$ の三角形と $\{bc,ca\}$ | 最大値は最小だが、最小全域木でない |
各行で外した条件が、証明のどこで使われていたかを確かめる。
1 行目:ex-mst-not-unique で確かめた。一意性の証明では、$w(e)=w(g)$ を重みが相異なることで否定している。
2 行目:$ab$ の閉路 $a,b,c,a$ で $w(bc)=w(ca)=1\le w(ab)$ だが、$\{ab,ac\}$ の重み $2$ は最小である。閉路の性質の証明は、切断の条件 $w(e)\le w(f)$ と $w(f)< w(e)$ の矛盾を使っており、等号を許すと矛盾しない。
3 行目:$S=\{a\}$ を横切る辺は $ab,ac$ で、どちらも重み $1$ で最小である。$\{ac,bc\}$ は重み $2$ の最小全域木で $ab$ を含まない。2 の証明は $w(e)< w(f)$ を使っている。
4 行目:$bc$ を採用し、$ab$ も端点が異なる成分にあるので採用すると 2 本で全域木になり、$ac$ は捨てられる。Kruskal 法の正しさの証明では、$e_k$ が $S$ を横切る辺のうち重みが最小であることを、重みの小さい順に並べたことから導いている。
5 行目:ex-mst-bottleneck-tree で確かめた。$\{bc,ca\}$ では $a$ と $b$ を結ぶ木の道 $a,c,b$ の最大値が $2$ で、辺 $ab$ 1 本の歩道の最大値 $1$ より大きく、2 の条件を満たさない。
Mathpediaは寄付と、参考文献の書籍リンク(Amazonアソシエイト)の紹介料で運営されています。 支援について / 寄付する