Edmondsの花アルゴリズム(Edmonds' blossom algorithm)とは、二部とは限らない有限グラフの最大マッチングを、増加道を探して入れ替えることの繰り返しで求める算法である。飽和されない頂点を根とする交互森を育て、同じ木の外側の頂点どうしを結ぶ辺が見つかると、そこにできる奇閉路(花)を 1 点に縮める。花がステムをもつとき、マッチングが最大であることは縮めたグラフで最大であることと同値で、縮めたグラフの増加道は元のグラフの増加道に持ち上がる。頂点数 $n$、辺数 $m$ の孤立点のないグラフで $O(n^2m)$ 時間で実装できる。
前提知識: マッチング(グラフ理論), 木(グラフ), 閉路
Edmonds の花アルゴリズム(Edmonds' blossom algorithm)は、二部とは限らない有限グラフの最大マッチングを多項式時間で求める算法である。Edmonds が 1965 年に与えた(Edm65)。マッチングが最大であることは増加道がないことと同値である(マッチング(グラフ理論) の定理「Berge の定理」)ので、増加道を探して入れ替えることを繰り返せばよい。二部グラフでは、飽和されない頂点から交互道を木の形に広げる探索で増加道が見つかるが、一般のグラフでは奇数長の閉路が探索を惑わせる。Edmonds は、探索の途中で現れる奇閉路(花、blossom)を 1 点に縮めても、マッチングが最大かどうかが変わらないことを示し、縮めたグラフで探索を続けることでこの困難を除いた。
この記事では、交互森と花を定義し、花の縮約で最大性が保たれる補題を証明したうえで、算法が最大マッチングを出力することを示し、頂点数 $n$、辺数 $m$ の孤立点のないグラフで実行時間が $O(n^2m)$ であることを数える。
この記事のグラフは有限の単純無向グラフ $G=(V,E)$ とし、$n:=|V|$、$m:=|E|$ とする。マッチング、飽和、交互道、増加道の用語は マッチング(グラフ理論) に従う。マッチング $M$ で飽和されない頂点を $M$ 露出点 と呼ぶ。グラフ $H$ の頂点集合を $V(H)$、辺集合を $E(H)$ と書く。
$M$ を $G$ のマッチングとする。$G$ の部分グラフ $F$ で 木(グラフ) の非交和(森)であるものが $M$ 交互森 であるとは、次を満たすことをいう。
$M$ 露出点だけからなる辺のない森は $M$ 交互森である。2 により、根から $v$ への道の辺は $M$ に属さない、属する、… の順に並ぶので、根でない外側の頂点の $M$ の辺は親への辺であり、内側の頂点の親への辺は $M$ に属さず、その $M$ の辺はただ 1 つの子への辺である。とくに、$F$ の頂点に接続する $M$ の辺はすべて $F$ に属する。各成分で、内側の頂点とその子(外側の頂点)は $M$ の辺で 1 対 1 に対応し、根でない外側の頂点はどれも内側の頂点の子なので、
$$
(\text{外側の頂点の個数})=(\text{内側の頂点の個数})+(\text{根の個数})
$$
である。この等式は終了時の判定(thm-eb-correct)で使う。
$M$ を $G$ のマッチングとする。長さ $2k+1$($k\ge1$)の閉路 $B$ で、その辺のうちちょうど $k$ 本が $M$ に属するものを $M$ 花(blossom)という。$B$ の頂点のうち $M\cap E(B)$ で飽和されない唯一の頂点 $b$ を花の 基点 という。$M$ 露出点 $r$ から $b$ への偶数長の $M$ 交互道 $P$ で、$P$ と $B$ の共有点が $b$ だけのものを花の ステム という($r=b$ で長さ $0$ も許す)。長さが正のステムの最後の辺は $b$ の $M$ の辺である。
$B$ を $G$ の閉路とする。$G/B$ を、頂点集合 $(V\setminus V(B))\cup\{\beta\}$($\beta$ は新しい頂点)をもち、$B$ の頂点を端点にもたない $G$ の辺と、$B$ のある頂点と隣接する $x\notin V(B)$ についての辺 $x\beta$ をもつ単純グラフとする。マッチング $M$ について、$M/B$ を、$B$ の頂点を端点にもたない $M$ の辺と、$x\notin V(B)$ と $B$ の頂点を結ぶ $M$ の辺があるときの辺 $x\beta$ からなる $G/B$ の辺集合とする。
$B$ が基点 $b$ の $M$ 花なら、$b$ 以外の $B$ の頂点の $M$ の辺は $B$ の上にあるので、$B$ と外を結ぶ $M$ の辺は $b$ の辺の高々 1 本である。よって $M/B$ は $G/B$ のマッチングで、$|M/B|=|M|-k$ である。$\beta$ が $M/B$ 露出点であることと $b$ が $M$ 露出点であることは同値である。
$M$ を $G$ のマッチング、$B$ を基点 $b$ の $M$ 花とする。
$b$ と $v$ を結ぶ $B$ の上の 2 本の道の長さの和は奇数 $2k+1$ なので、ちょうど一方が偶数長であり、$R$ は一意に定まる($v=b$ なら長さ $0$)。
$B$ の頂点を閉路の順に $c_0=b,c_1,\dots,c_{2k}$ と並べる。$M\cap E(B)$ は $b$ を飽和しない $B$ のマッチングで $k$ 本からなるので、$\{c_1c_2,c_3c_4,\dots,c_{2k-1}c_{2k}\}$ である。$v=c_j$ のとき、$j$ が偶数なら $R=c_0,c_1,\dots,c_j$、$j$ が奇数なら $R=c_0,c_{2k},c_{2k-1},\dots,c_j$ であり、どちらも $b$ から $M$ に属さない辺で始まり、長さが正なら $v$ で $M$ の辺で終わる $M$ 交互道である。
1:$Q$ が $\beta$ を通らなければ、$Q$ の辺と頂点は $G$ でも同じで、$M$ 増加道である。$Q$ が $\beta$ を通るとする。$\beta$ が $Q$ の内部の頂点なら、$\beta$ には $Q$ の辺が 2 本接続し、一方は $M/B$ の辺 $z\beta$ で、これは $M$ の辺 $zb$($z\notin V(B)$)から来る。もう一方が $y\beta\notin M/B$ である。$\beta$ が $Q$ の端点なら、$\beta$ は $M/B$ 露出点なので $b$ は $M$ 露出点で、$\beta$ の $Q$ の辺は $y\beta\notin M/B$ だけである。どちらの場合も、$Q$ の $\beta$ を $R$ に置き換えた列(内部なら $\dots,z,b,\dots,v,y,\dots$、端点なら $b,\dots,v,y,\dots$)は $G$ の道で、頂点は相異なる。交互性を確かめる。$b$ では $M$ の辺 $zb$ の後に $R$ の最初の辺($M$ に属さない)が来る。$R$ の最後の辺は $v$ の $M$ の辺で、その後の $vy$ は $M$ に属さない($v\neq b$ なら $v$ の $M$ の辺は $B$ の上にあり、$v=b$ なら $b$ の $M$ の辺は $zb$ で $y\neq z$)。$R$ の長さが $0$ なら、$zb\in M$ の後に $by\notin M$ が来る。端点は $M$ 露出点のままである。よって $M$ 増加道である。
2:1 と マッチング(グラフ理論) の定理「Berge の定理」により、$M$ が最大なら $M/B$ も最大である。逆を示す。
まず $b$ が $M$ 露出点の場合を示す。$M$ が最大でないとすると、$G$ に $M$ 増加道 $Q$ がある。$Q$ が $B$ と交わらなければ、$Q$ は $G/B$ の $M/B$ 増加道である。交わるとする。$Q$ の両端点は $M$ 露出点で相異なり、$B$ の $M$ 露出点は $b$ だけなので、少なくとも一方の端点 $w$ は $B$ の外にある。$Q$ を $w$ からたどって最初に出会う $B$ の頂点を $u$ とし、$w$ から $u$ までの部分を $Q'$ とする。$Q'$ の $u$ に入る辺 $xu$ は $M$ に属さない($u\neq b$ なら $u$ の $M$ の辺は $B$ の上にあり、$u=b$ は露出点)。このとき $x$ の $M$ の辺は(あれば)$Q'$ の手前の辺で、その相手は $B$ の外にあるので、$x\beta\notin M/B$ である。よって $Q'$ の $u$ を $\beta$ に置き換えたものは、$M/B$ 露出点 $w$ と $\beta$ を結ぶ $M/B$ 交互道で、両端の辺は $M/B$ に属さない。これは $G/B$ の $M/B$ 増加道であり、$M/B$ は最大でない。
一般の場合は、ステム $P$($M$ 露出点 $r$ から $b$ へ)で入れ替える。$P$ の長さが $0$ なら $b=r$ は露出点である。長さが正なら、$M':=M\triangle E(P)$ は大きさ $|M|$ のマッチングで、$r$ を飽和し $b$ を飽和しない($P$ は偶数長で両端の辺は $M$ に属さない辺と $M$ に属する辺である)。$P$ と $B$ は辺を共有しないので $M'\cap E(B)=M\cap E(B)$ であり、$B$ は基点 $b$ の $M'$ 花である。$G/B$ では、$P$ の $b$ を $\beta$ に置き換えた道 $P/B$ は $M/B$ 露出点 $r$ から $\beta$ への偶数長の $M/B$ 交互道で、$M'/B=(M/B)\triangle E(P/B)$ は $|M/B|$ と同じ大きさである。$|M'|=|M|$、$|M'/B|=|M/B|$ なので、$M/B$ が最大なら $M'/B$ も最大で、前段により $M'$ も最大、したがって $M$ も最大である。$\square$
この補題は Edmonds による(Edm65 4.12、p. 458。証明は 4.14・4.15、pp. 458–459)。2 のステムの仮定は外せない(ex-eb-counter の 2 行目)。
算法は、マッチング $M$(はじめは空)を増加道で 1 本ずつ大きくする。増加道を 1 本探す手続きを 段 と呼ぶ。
$G_0:=G$、$M_0:=M$ とし、$F$ を $M_0$ 露出点だけからなる $M_0$ 交互森とする。$i:=0$ から始め、外側の頂点 $x$ と、内側の頂点でない $y$ を結ぶ辺 $xy$ が $G_i$ にある限り、次のどれかを行う。
段の各時点で、$M_i$ は $M$ から花を順に縮めて得られ、$M_i$ を変えるのは縮約だけである。外側の頂点どうしを結ぶ辺が同じ成分の中で現れたときに縮約するのが、二部グラフの探索との違いである。
段の途中で $F$ が $G_i$ の $M_i$ 交互森であるとする。
要点:外側の頂点の $M_i$ の辺は親への辺なので、外側の頂点から出る辺 $xy$ は $M_i$ に属さない。内側の頂点は辺を 2 本しかもたないので、2 本の根からの道の分かれ目は外側の頂点である。
根から外側の頂点 $v$ への $F$ の道を $P_v$ と書く。$P_v$ は偶数長で、$M_i$ に属さない辺で始まり、長さが正なら $v$ の $M_i$ の辺で終わる。外側の頂点 $x$ の $M_i$ の辺は親への辺($x$ が根なら辺はない)であり、親は内側の頂点なので、辺 $xy$($y$ は外側か $F$ の外)は $M_i$ に属さない。
1:$P_x$、$xy$、$P_y$ を逆にたどった道をつなぐ。2 つの成分は頂点を共有しないので道であり、辺は交互に並び、両端は根で $M_i$ 露出点である。
2:$P_x$ と $P_y$ は同じ根 $r$ から出る木の道なので、共有部分は $r$ から $b$ への道である。$b$ が内側の頂点だとすると、$b\neq r,x,y$ であり、$b$ には親への辺、$P_x$ の次の辺、$P_y$ の次の辺の相異なる 3 本の辺がある($P_x$ と $P_y$ は $b$ の後で分かれる)。これは内側の頂点の辺が 2 本であることに反する。よって $b$ は外側の頂点である。$b$ から $x$ への部分の道と $b$ から $y$ への部分の道は $b$ だけを共有し、どちらも偶数長で、$M_i$ に属さない辺で始まり $M_i$ の辺で終わる(長さ $0$ も許す)。長さを $2s$、$2t$ とすると、$B_i$ は長さ $2s+2t+1$ の閉路で、$M_i$ の辺を $s+t$ 本含み、$b$ はそれらで飽和されない。よって $B_i$ は基点 $b$ の花であり、$P_b$ は $M_i$ 露出点 $r$ から $b$ への偶数長の交互道で、$B_i$ とは $b$ だけを共有するのでステムである。
3:成長の後、$y$ は根からの距離が奇数で辺 $xy$、$yz$ をもち、$yz\in M_i$ であり、$z$ は距離が偶数で根からの道は $yz$ で終わる交互道である。他の頂点は変わらないので交互森である。
縮約について:$B_i$ の頂点のうち $F$ の辺で結ばれた部分($b$ から $x$ と $y$ への道)は $F$ の連結な部分木 $S$ である。木の外の頂点は $S$ と高々 1 本の $F$ の辺で結ばれるので、$S$ を 1 点 $\beta$ に縮めた $F/B_i$ は森である。$B_i$ の頂点 $u$ と外の頂点 $c$ を結ぶ $F$ の辺は、$u=b$ と親を結ぶ辺か、$u$ の子への辺である。後者で $u$ が内側だとすると、$u$ の唯一の子は $u$ の $M_i$ の相手で $B_i$ の上にあり、$c$ になりえない。よって $u$ は外側であり、$c$ は内側で、辺 $uc$ は $M_i$ に属さない。$B_i$ の外の頂点 $v$ について、根から $v$ への道が $S$ を通るなら、$b$ で入り、外側の頂点 $u$ から出る。$b$ と $u$ の根からの距離はともに偶数なので、$F/B_i$ での根からの距離 $\operatorname{dist}(r,b)+\operatorname{dist}(u,v)$ は $\operatorname{dist}(r,v)$ と偶奇が等しい。よって $B_i$ の外の頂点の区別は変わらず、根から $\beta$ への道は $P_b$ の $b$ を $\beta$ に置き換えた偶数長の道で、$\beta$ は外側の頂点である。交互性は、$M_{i+1}$ の辺が $B_i$ の外では $M_i$ と同じで、$\beta$ の $M_{i+1}$ の辺は $b$ の $M_i$ の辺(親への辺)から来ることから従う。内側の頂点は 2 本の辺を保つ。$M_{i+1}$ 露出点は、$B_i$ の外の $M_i$ 露出点と、$b=r$ のときの $\beta$ であり、どれも根である。$\square$
花アルゴリズムは有限回の操作で停止し、$G$ の最大マッチングを出力する。
停止:1 つの段では、成長は $F$ の外の頂点を 2 個減らし、縮約は $G_i$ の頂点を $2k\ge2$ 個減らす($B_i$ の頂点はすべて $F$ にあり、$F$ の外の頂点の個数は変わらない)。よって成長は $n/2$ 回以下、縮約も $n/2$ 回以下で、段は増加か終了で終わる。増加は $|M|$ を $1$ 増やすので、段は $n/2+1$ 回以下である。
増加の正しさ:lem-eb-steps の 1 により $G_i$ の $M_i$ 増加道が得られ、lem-eb-shrink の 1 を $B_{i-1},\dots,B_0$ について順に当てると $G$ の $M$ 増加道になる($B_j$ は $G_j$ の $M_j$ 花である)。入れ替えた $M\triangle E(Q)$ は大きさ $|M|+1$ のマッチングである(マッチング(グラフ理論) の定理「Berge の定理」の証明)。
出力の最大性:算法が終わるとき、段の最後の $G_t$、$M_t$、$F$ について、外側の頂点の隣接頂点はすべて内側の頂点である。内側の頂点の集合を $I$、外側の頂点の集合を $O$ とする。$G_t-I$ では外側の各頂点が孤立点なので、頂点数が奇数の成分は $|O|$ 個以上ある。$G_t$ の任意のマッチング $N$ について、そのような各成分は $N$ 露出点か $N$ で $I$ と組む頂点を含み、後者は $|I|$ 個以下なので、$N$ 露出点は $|O|-|I|$ 個以上ある(Tutteの定理 の定理「Tutte–Berge の公式」の前半と同じ議論)。一方、$M_t$ 露出点は根だけで、定義の後の等式によりちょうど $|O|-|I|$ 個である。よって $M_t$ は $G_t$ の最大マッチングである。lem-eb-steps の 2 により各 $B_j$ はステムをもつ $M_j$ 花なので、lem-eb-shrink の 2 を $j=t-1,\dots,0$ について順に当てると、$M_0=M$ は $G$ の最大マッチングである。$\square$
終了時の森の内側の頂点はどれも縮めた頂点ではなく $G$ の頂点であり、その集合 $I$ は $G$ でも Tutte–Berge の公式の最小値を与える。実際、外側の各頂点を縮める前の頂点の集合に戻すと、それぞれが $G-I$ の頂点数が奇数の成分になるので、上と同じ議論により $G$ のどのマッチングも $\lvert O\rvert-\lvert I\rvert$ 個以上の頂点を露出させる。一方、縮約は頂点を $2k$ 個、マッチングの辺を $k$ 本減らすので露出点の個数を変えず、出力の $M$ はちょうど $\lvert O\rvert-\lvert I\rvert$ 個を露出させる。Edmonds は森でなく 1 本ずつ木を育て、増加道を含まない木(Hungarian tree)を取り除く形で述べた(Edm65 4.6・4.16–4.17、pp. 456・459–460)。すべての露出点から同時に森を育てる形も同様に働くことは同論文 4.20(p. 460)にある。
頂点数 $n$、辺数 $m$ のグラフで、花アルゴリズムは $O(n^2(n+m))$ 時間で実装できる。とくに孤立点のないグラフ($n\le2m$)では $O(n^2m)$ 時間である。
グラフを隣接リストで持つ。$G_i/B_i$ は、$B_i$ の頂点の名前を $\beta$ に付け替え、$\beta$ の自己ループと重複する辺を印を使って除けば $O(n+m)$ 時間で作れる。このとき $G_{i+1}$ の各辺 $y\beta$ に、それを生んだ $G_i$ の辺 $yv$ を 1 本記録しておく。
1 つの段を、縮約で区切られた部分に分ける。各部分ではグラフが変わらないので、外側の頂点を待ち行列に入れ、各外側の頂点の隣接リストを 1 回ずつ調べる。各辺は高々 2 回調べられ、成長は $O(1)$ 時間、増加の道と縮約の閉路は根への道を印を付けてたどれば $O(n)$ 時間で求まる。よって各部分は $O(n+m)$ 時間で、縮約の後は新しいグラフで外側の頂点をすべて調べ直す。部分は $n/2+1$ 個以下なので、増加道を見つけるまでに $O(n(n+m))$ 時間かかる。持ち上げは、各段階で記録した辺から $v$ を $O(1)$ で取り、道 $R$ を $O(n)$ 時間で挿入するので、$t\le n/2$ 段階で $O(n^2)$ 時間である。よって 1 段は $O(n(n+m))$ 時間で、段は $n/2+1$ 回以下なので、全体で $O(n^2(n+m))$ 時間である。$n\le2m$ なら $n+m\le3m$ である。$\square$
Edmonds 自身は、実行時間の上界の位数を $n^4$ と見積もっている(Edm65 §2、p. 451)。$m\le n(n-1)/2$ なので、上の評価もつねに $O(n^4)$ である。
頂点 $r,a,b,c,d,e$ と辺 $ra$、$ab$、$bc$、$bd$、$cd$、$de$ のグラフ $G$ で、$M=\{ab,cd\}$ とする。露出点は $r$ と $e$ で、$r,a,b,c,d,e$ は $M$ 増加道である。
手順 3 で縮約をせずに辺 $bc$ を無視すると、$c$ の隣接頂点は $b$(外側)と $d$(内側)だけ、$e$ の隣接頂点は $d$(内側)だけなので、外側の頂点から出る辺は内側の頂点への辺と無視した辺 $bc$ だけになり、探索が止まる。そのとき $M=\{ab,cd\}$ は最大でない。奇閉路 $b,d,c$ を、$b$ から $d$ へ直接進む向きにしか通らないことが原因であり、花の縮約は両方の向きを一度に扱う。
次の表は、各行で仮定を 1 つだけ外したときに結論が成り立たなくなる例である。
| 外す条件 | 反例 | 成り立たなくなること |
|---|---|---|
| 縮約する閉路が花であること | 三角形 $pqs$ に辺 $px$、$qy$ を付けたグラフと $M=\{px,qy\}$ | $M/B$ が $G/B$ のマッチングであること |
| lem-eb-shrink の 2 の「花がステムをもつ」 | 下のグラフ $G_2$ と $M=\{cd,bz\}$ | $M/B$ が最大なら $M$ も最大であること |
| 同じ成分の外側の頂点を結ぶ辺で縮約すること | ex-eb-run のグラフ(縮約せずに $bc$ を無視) | 停止したときの $M$ が最大であること |
1 行目:$B=pqs$ は $M$ の辺を含まず(花なら $1$ 本)、$M/B$ は $\beta$ に接続する 2 辺 $x\beta$、$y\beta$ を含むのでマッチングでない。
2 行目:$G_2$ は頂点 $b,c,d,z,u,w$ と辺 $bc$、$bd$、$cd$、$bz$、$uc$、$dw$ をもつとする。$B=bcd$ は $M$ の辺 $cd$ を 1 本含む基点 $b$ の花である。$z$ の隣接頂点は $b$ だけなので、露出点 $u,w$ から $b$ への偶数長の交互道(最後の辺は $zb$)はなく、ステムはない。$G_2/B$ は $\beta$ を中心とし $u,w,z$ を葉とする星で、マッチング数は $1$ なので $M/B=\{\beta z\}$ は最大である。しかし $u,c,d,w$ は $M$ 増加道で、$M$ は最大でない。
3 行目は ex-eb-run の後の段落のとおりである。
Mathpediaは寄付と、参考文献の書籍リンク(Amazonアソシエイト)の紹介料で運営されています。 支援について / 寄付する