8.1. マッチングの定義
グラフの独立集合は「共通の辺を持たない」頂点の集合である。つまり、独立集合に属する二頂点を端点に持つ辺は存在しない。
ある意味で、マッチングは独立集合の双対と言える: マッチングは「共通の頂点を持たない」辺の集合を意味する。つまり、マッチングに属する二辺が同じ頂点を含むことはない。形式的な定義は次の通りである:
\(G=\left( V,E,\varphi\right) \) をループレスな多重グラフとする。
-
\(G\) のマッチング (matching) とは、\(E\) の部分集合 \(M\) であって任意の異なる二要素が共通の端点を持たないものを言う。
-
\(G\) のマッチング \(M\) に属する辺を \(M\)-辺 (\(M\)-edge)と呼ぶ。
-
\(G\) のマッチング \(M\) と頂点 \(v \in V\) に対して、\(v\) が何らかの \(M\)-辺の端点であるとき、\(v\) は \(M\) でマッチ済み (matched) と言う。 さらに、\(v\) を端点に持つ \(M\)-辺を \(v\) の \(M\)-辺 (\(M\)-edge of \(v\)) と呼ぶ (\(M\) はマッチングなので、\(v\) の \(M\)-辺は一意に定まる)。\(v\) の \(M\)-辺の \(v\) でない端点を \(v\) の \(M\)-パートナー (\(M\)-partner of \(v\)) と呼ぶ。
-
\(G\) のマッチング \(M\) で \(G\) の全ての頂点がマッチ済みなら、\(M\) を完全マッチング (perfect matching) と呼ぶ。
-
\(A\) を \(V\) の部分集合とする。\(G\) のマッチング \(M\) で \(A\) の全ての頂点がマッチ済みなら、\(M\) を \(A\)-完全マッチング (\(A\)-complete matching) と呼ぶ。
この定義から、多重グラフ \(G=\left( V,E,\varphi\right) \) のマッチング \(M\) が完全なのは \(V\)-完全なとき、かつそのときに限ると分かる。
\(G\) を次の単純グラフとする:
-
集合 \(\left\{ 12,\ 36,\ 47\right\} \) は \(G\) のマッチングである。このマッチングを \(M\) とすれば、\(M\) でマッチ済みの頂点は \(1\), \(2\), \(3\), \(4\), \(6\), \(7\) であり、これらの頂点の \(M\)-パートナーはそれぞれ \(2\), \(1\), \(6\), \(7\), \(3\), \(4\) である。\(M\) は完全でないものの、例えば \(\left\{ 1,3,4\right\} \)-完全あるいは \(\left\{ 1,2,3,4,6,7\right\} \)-完全ではある。
-
集合 \(\left\{ 12,\ 36,\ 67\right\} \) は \(G\) のマッチングでない。二つの異なる要素 \(36\) と \(67\) が共通の端点 \(6\) を持つためである。
-
集合 \(\varnothing\), \(\left\{ 36\right\} \), \(\left\{ 15,\ 29,\ 36,\ 47\right\} \) はどれも \(G\) のマッチングである。
任意のマッチング \(M\) はグラフに存在する辺を使って頂点の「ペア」を作っていると解釈できる。明らかに、\(v\) の \(M\)-パートナーの \(M\)-パートナーは \(v\) 自身である。また、異なる二つの頂点が同じ \(M\)-パートナーを持つことはない (そのような二頂点が存在するとき、それらに対応する二つの \(M\)-辺は共通の端点を持ってしまう)。
ループレスな多重グラフ \(G=\left( V,E,\varphi\right) \) のマッチングは「辺集合 \(E\) の部分集合 \(M\) であって全域部分グラフ \(\left( V,M,\varphi|_{M}\right) \) における全ての頂点の次数が \(1\) 以下であるもの」と特徴付けることもできる。
多くの文献では、ループを持つ多重グラフのマッチングはループを含んではいけないと定義される。このように定めておけば、Remark 8.1.3 はループがある多重グラフに対しても正しくなる。
マッチングに関して次の疑問が自然に思い浮かぶ:
-
グラフ \(G\) が完全なマッチングを持つかどうかを判定できるだろうか?
-
もし \(G\) が完全なマッチングを持たないなら、要素数が最大のマッチングを見つけられるだろうか?
-
\(V\) の部分集合 \(A\) に対する \(A\)-完全マッチングについてはどうか?
マッチングの例をいくつか示す:
\(n\), \(m\) を正整数とする。\(n\) 次の路グラフ \(P_{n}\) と \(m\) 次の路グラフ \(P_{m}\) のデカルト積 \(P_{n}\times P_{m}\) は \( n \times m \) の格子グラフ (grid graph) と呼ばれ、次の形をしている:
-
\(n\) が偶数なら、次の集合は \(P_{n}\times P_{m}\) の完全マッチングである:
\[ \left\{ \left\{ \left( i,j\right) ,\ \left( i+1,j\right) \right\} \mid i \in \left\{1,3,\ldots,n-1\right\} \ \wedge \ j \in \left\{1,2,\ldots,m\right\} \right\} \]例えば \(n=4\), \(\ m=3\) のとき、この集合を次に示す:
実線がマッチングに属する辺を、破線がマッチングに属さない辺を表す。
-
同様に、\(m\) が偶数のとき次の集合は \(P_{n}\times P_{m}\) の完全マッチングである:
\[ \left\{ \left\{ \left( i,j\right) ,\ \left( i,j+1\right) \right\} \mid i \in \left\{1,2,\ldots,n\right\}, \ j \in \left\{1,3,\ldots,m-1 \right\}\right\} \] -
\(n\) と \(m\) が両方とも奇数なら、\(P_{n}\times P_{m}\) は完全マッチングを持たない。一般に、奇数個の頂点を持つ任意のループレスな多重グラフ \(G\) は完全マッチングを持たない。そういったグラフのマッチングは必ず偶数個の頂点を被覆する1ためである。
「二本の角を持った五角形グラフ」 \(C_{5}^{\prime\prime}\) (この用語は標準的ではない。読者が理解できることを願う) は次のグラフである:
\(C_{5}^{\prime\prime}\) は完全マッチングを持たない。これは容易に分かる: \(C_{5}^{\prime\prime}\) はループレスなので、任意の辺は二つの頂点を含む。よって \(C_{5}^{\prime\prime}\) の任意のマッチング \(M\) では \(2\cdot\left\vert M\right\vert \) 個の頂点がマッチ済みとなる。特に、\(C_{5}^{\prime\prime}\) の任意のマッチングでは偶数個の頂点がマッチ済みとなる。\(C_{5}^{\prime\prime}\) は奇数個の頂点を持つから、完全マッチングを持たない。
\(C_{5}^{\prime\prime}\) のマッチングの最大要素数はいくつだろうか? 二要素集合 \(\left\{ 12,\ 34\right\} \) は \(C_{5}^{\prime\prime}\) のマッチングであり、この集合に他の任意の辺を加えるとマッチングでなくなる。ここからマッチングの最大要素数が \(2\) だと考えたくなるかもしれないが、これは正しくない。実際、\(3\) 要素のマッチング \(\left\{ 12,\ 37,\ 45\right\} \) が存在する。このマッチングは本当に要素数最大である。
例 8.1.6 からは、マッチングに加えられる辺を加えていくだけでは要素数最大のマッチングが得られない場合があると分かる。この操作を続けて辺を加えられなくなったとしても、最終的なマッチングが要素数最大とは限らない。ここから、要素数最大のマッチングを見つける問題が要素数最大の独立集合を見つける問題と同様に難しい種類の問題なのかと思うかもしれない ── しかし、これは正しくない: 要素数最大のマッチングは多項式時間アルゴリズムで見つけられる! このアルゴリズムは Edmonds blossom アルゴリズム (Edmonds blossom algorithm) と呼ばれ、\(O ( \left\vert E\right\vert \cdot\left\vert V\right\vert ^{2} ) \) 時間で実行できる。しかし、このアルゴリズムは本講義で扱うには複雑すぎる。一般的なケースと同程度に有用であり、それ自身でも十分に興味深い単純なケースをこれから見ていく。
具体的に言えば、本書が注目するのは二部グラフである。
-
訳注: グラフ \(G\) のマッチング \(M\) で頂点 \(v\) がマッチ済みのとき、\(M\) は \(v\) を被覆する (cover) と言う。 ↩︎