# 匹配

# 匹配基础概念

匹配 MM —— 如果 MM 是图 GG 的边子集 (不含环),且 MM 中的任意两条边没有共同顶点,则称 MMGG 的一个匹配,或对集,或边独立集。

如果 GG 中顶点是 GG 的匹配 MM 中某条边的端点,称它为 MM 饱和点,否则为 MM 非饱和点

最大匹配 MM (无向图定义) —— 如果 MM 是图 GG 的包含边数最多的匹配,称 MMGG 的一个最大匹配。

特别是,若最大匹配饱和了 GG 的所有顶点,称它为 GG 的一个完美匹配

MM 交错路 —— 如果 MM 是图 GG 的匹配, GG 中一条由 MM 中的边和非 MM 中的边交错形成的路,称为 GG 中的一条 MM 交错路。

特别地,若 MM 交错路的起点与终点都是 MM 非饱和点,称这种 MM 交错路为 MM 可扩路

# 贝尔热定理

Berge

GG 的匹配 MM 是最大匹配,当且仅当 GG 不包含 MM 可扩路。

# HALL 定理

完美匹配的充要条件,将 XX 视为需求,YY 视为供给,可以理解为供给必须满足需求。

G=(X,Y)G=(X,Y) 是偶图,则 GG 存在饱和 XX 每个顶点的完美匹配的充要条件是:

SX,N(S)S\forall S\subseteq X,\ \ |N(S)|\geq|S|

其中 N(S)N(S) 表示 SS 的邻集(图 GG 中所有与 SS 相邻接顶点的集合),N(S)N(S) 一定是 YY 的子集。

G=(X,Y)G=(X,Y) 存在饱和 XX 每个顶点的匹配也常说成存在由 XXYY 的匹配 。

⭐️推论:若 GGk(k>0)k(k\gt0) 正则偶图,则 GG 存在完美匹配。

# 典例

# 例 1

证明每个 kk 方体都是 kk 正则偶图。

事实上,由 kk 方体的构造: kk 方体有 2k2k 个顶点,每个顶点可以用长度为 kk 的二进制码来表示,两个顶点连线当且仅当代表两个顶点的二进制码只有一位坐标不同。

如果我们划分 kk 方体的 2k2k 个顶点,把坐标之和为偶数的顶点归入 XX,否则归入 YY 。显然,XX 中顶点互不邻接,YY 中顶点也如此。所以 kk 方体是偶图。

又不难知道 kk 方体的每个顶点度数为 kk , 所以 kk 方体是 kk 正则偶图。

由推论: kk 方体存在完美匹配。

直接在 k 方体中找出完美匹配。

kk 方体顶点二进制码为 x1,x2,,xkx_1,x_2,\cdots,x_k , 我们取 x1,x2,,xk1,0x_1,x_2,\cdots,x_{k-1},0 , 和

(x1,x2,,xk1,1)(x-1,x_2,\cdots,x_{k-1},1) 之间的全体边所成之集为 MM

显然,MM 中的边均不相邻接,所以作成 kk 方体的匹配,又容易知道:M=2k1|M|=2^{k-1},所以 MM 是完美匹配。

# 例 2

𝐾2𝑛𝐾_{2𝑛}𝐾𝑛,𝑛𝐾_{𝑛,𝑛} 中不同的完美匹配的个数

𝐾2𝑛𝐾_{2𝑛} 的任意一个顶点有 2𝑛12𝑛-1 种不同的方法被匹配。所以 𝐾2𝑛𝐾_{2𝑛} 的不同完美匹配个数等于 (2𝑛1)𝐾2𝑛2(2𝑛-1)𝐾_{2𝑛-2} , 如此推下去,可以归纳出 𝐾2𝑛𝐾_{2𝑛} 的不同完美匹配个数为:(2𝑛1)!!(2𝑛-1)!!

同样的推导方法可归纳出 𝐾𝑛,𝑛𝐾_{𝑛,𝑛} 的不同完美匹配个数为:𝑛!𝑛!

# 例 3

证明树至多存在一个完美匹配。

证明:若不然,设 𝑀1𝑀_1𝑀2𝑀_2 是树 TT 的两个不同的完美匹配,那么 𝑀1Δ𝑀2𝑀_1\Delta𝑀_2≠\varnothing, 容易知道:𝑇[𝑀1Δ𝑀2]𝑇[𝑀_1\Delta 𝑀_2] 每个非空部分顶点度数为 2 ,即它存在圈,于是推出 TT 中有圈,矛盾。

# 图的点覆盖

GG 的一个顶点子集 KK 称为 GG 的一个点覆盖,如果 GG 的每条边都至少有一个端点在 KK 中。GG 的一个包含点数最少的点覆盖称为 GG 的最小点覆盖,其包含的点数称为 GG 的覆盖数,记为 α(G)\alpha(G)

⭐️设 MMGG 的匹配,KKGG 的覆盖,若 M=K|M|=|K| , 则 MM 是最大匹配,而 KK 是最小覆盖。

# 哥尼定理

偶图的点覆盖与偶图匹配间的关系

在偶图中,最大匹配的边数等于最小覆盖的顶点数。

# 托特定理

GG 有完美匹配当且仅当对 VV 的任意非空真子集 SS , 有:

o(GS)So(G-S)\leq|S|

o(GS)o(G-S) 表示奇分支数目(有奇数个顶点的分支)

# 彼得森定理

哥尼定理的推论,是完美匹配的充分条件而不是必要条件⚠️

没有割边的 3 正则图存在完美匹配

# 匈牙利算法

可以解决问题:

  • 在无权偶图中寻找完美匹配
  • 在有权偶图中寻找最优匹配
    • 在有权偶图中寻找最小匹配(权值和最小)
    • 在有权偶图中寻找最大匹配(权值和最大,通过所有权值取反转化为最小匹配问题)。

G=(X,Y)G=(X,Y),匈牙利算法需要满足约束:X=Y|X|=|Y|

基本思想

从任意初始匹配 M0M_0 出发,通过寻求一条 M0M_0 可扩路 PP ,令 M1=M0ΔE(P)M_1=M_0\Delta E(P) ,得到比 M0M_0 更大的匹配 M1M_1

1965 年,Edmonds 首先提出:用扎根于 MM 非饱和点 uuMM 交错树的生长来求 MM 可扩路。

# 无权偶图完美匹配

# M 交错树

定义 设 G=(X,Y)G=(X,Y)MMGG 的匹配,uuMM 非饱和点。称树 HHGG 的扎根于点 uuMM 交错树,如果:

  • uV(H)u\in V(H)
  • 对任意 vV(H)v\in V(H)(u,v)(u,v) 路是 MM 交错路;

扎根于 MM 非饱和点 uuMM 交错树 HH 有两种情形:

  • 情形 1: 除点 uu 外,HH 中所有点为 MM 饱和点,且在 MM 上配对;
  • 情形 2: HH 包含除 uu 外的 MM 非饱和点。

# 匈牙利算法

MM 是初始匹配。HH 是扎根于 MM 非饱和点 uu 的交错树。令:S=V(H)XS=V(H)\cap XT=V(H)YT=V(H)\cap Y

  • (a)
    • MM 饱和 XX 所有顶点,停止;
    • 否则,设 uuXXMM 非饱和顶点,置 S={u}S=\{u\}T=T=\varnothing
  • (b)
    • N(S)=TN(S)=T,则 GG 中不存在完美匹配;
    • 否则设 yN(S)Ty\in N(S)-T
  • (c)
    • yyMM 饱和点,且 yzMyz\in M,置 S=S{z}S=S\cup\{z\}T=T{y}T=T\cup \{y\},转(b);
    • 否则,设 PPMM 可扩路,置 M=MΔE(P)M=M\Delta E(P),转(a)

# 有权图最优匹配

# 可行顶点标号

G=(X,Y)G=(X,Y) ,若对 xX,yY\forall x\in X,\forall y\in Y,有:

l(x)+l(y)w(xy)l(x)+l(y)\geq w(xy)

则称 ll 是赋权完全偶图 GG可行顶点标号

一个简单常用的可行顶点标号:

{l(x)=maxyYw(xy),xXl(y)=0,yY\begin{cases} l(x)=\max_{y\in Y}w(xy),&x\in X\\ l(y)=0,&y\in Y \end{cases}

# 相等子图

ll 是赋权完全偶图 G=(X,Y)G=(X,Y) 的可行顶点标号,令:

El={xyE(G)l(x)+l(y)=w(xy)}E_l=\{xy\in E(G)|l(x)+l(y)=w(xy)\}

Gl=G[El]G_l=G[E_l]GG 的对应于 ll相等子图

# Kuhn 算法

Kuhn 采用顶点标号修改策略,找到了求最优匹配好算法如下

⚠️ 求的是权值和最大的匹配⚠️

给一初始顶点标号 ll ,在相等子图 GlG_l 中任选一个匹配 MM

(1)

  • XXMM 饱和的,则 MM 是最优匹配;
  • 否则,令 uu 是一个 MM 非饱和点,置 S={u}S=\{u\}T=T=\varnothing

(2)

  • TNGl(S)T\sub N_{G_l}(S),转(3);
  • 否则,计算:

αl=minxS,yT{l(x)+l(y)w(xy)}\alpha_l=\min_{x\in S,y\notin T}\{l(x)+l(y)-w(xy)\}

修改 ll 如下:

l={l(v)αl,vSl(v)+αl,vTl(v),othersl=\begin{cases} l(v)-\alpha_l,&v\in S\\ l(v)+\alpha_l,&v\in T\\ l(v),&\text{others}\\ \end{cases}

给出新的可行顶点标号,在新标号下重新开始。

(3)在 NGl(S)\TN_{G_l}(S)\backslash T 中选择点 yy

  • yyMM 饱和的,yzMyz\in M,则置 S=S{z}S=S\cup\{z\}T=T{y}T=T\cup\{y\},转(2);
  • 否则,设 PPGlG_lMM 可扩路,置 M=MΔE(P)M=M\Delta E(P),转(1)

该算法把上面原来的匈牙利算法用于其中,主要是用来判定和求完美匹配。