两个例子
- 某公司有员工 x 1 , x 2 , ⋯ , x m x_1,x_2,\cdots,x_m x1,x2,⋯,xm,有一些工作 y 1 , y 2 , ⋯ , y n y_1,y_2,\cdots,y_n y1,y2,⋯,yn需要分配给这些员工。每个人只做一份工作,每一份工作也只能一个人来做。给出一个合理的工作分配方案
- 设有一个残缺的 m ∗ n m*n m∗n键盘,我们用 1 ∗ 2 1*2 1∗2的多米诺骨牌来覆盖,要求:骨牌不能覆盖残缺位置;骨牌间不能有重叠。问:能否将所有非残缺的位置都覆盖到?若不能,最多能覆盖多少张牌?
- 它们都基于相同的图论模型————匹配
匹配的定义
- 匹配:设 M M M是图 G G G的边子集,且 M M M的任意两条边在 G G G中都不相邻,则称 M M M是 G G G的一个匹配
- 相配/许配: M M M中同一条边的两个端点称为在 M M M中相配, M M M中的端点称为被 M M M许配
- 完备匹配:若 G G G中所有的顶点都被 M M M许配,则称 M M M是 G G G的完备匹配
- 最大匹配: G G G中边数最多的匹配称为 G G G的最大匹配
- 匹配数:若 M M M是 G G G的最大匹配,则称 M M M中的边数 ∣ M ∣ |M| ∣M∣为 G G G的匹配数,记为 α ( G ) \alpha(G) α(G)
- 交错轨道:设 M M M是 G G G的匹配, P = v 0 e 1 v 1 e 2 ⋯ e k v k P=v_0e_1v_1e_2\cdots e_kv_k P=v0e1v1e2⋯ekvk是 G G G中的一条轨道,若 e 1 , e 2 , ⋯ , e k e_1,e_2,\cdots,e_k e1,e2,⋯,ek在 M M M与 E ( G ) − M E(G)-M E(G)−M中交替出现,则称 P P P是 G G G中关于 M M M的交错轨道
- 可增广轨道:设 P = v 0 e 1 v 1 e 2 ⋯ e 2 k + 1 v 2 k + 1 P=v_0e_1v_1e_2\cdots e_{2k+1}v_{2k+1} P=v0e1v1e2⋯e2k+1v2k+1是 G G G中关于 M M M的交错轨道,若 e 1 , e 3 , ⋯ , e 2 k + 1 ∉ M , e 2 , ⋯ , e 2 k ∈ M e_1,e_3,\cdots,e_{2k+1}\notin M,e_2,\cdots,e_{2k}\in M e1,e3,⋯,e2k+1∈/M,e2,⋯,e2k∈M,且 v 0 v_0 v0月 v 2 k + 1 没 有 被 v_{2k+1}没有被 v2k+1没有被M 许 配 , 则 称 许配,则称 许配,则称P 是 是 是G 中 关 于 中关于 中关于M$的可增广轨道
- 引理: M M M是 G G G的最大匹配,当且仅当 G G G中没有关于 M M M的可增广轨道
二分图中的匹配
- Hall定理:设
G
G
G是二分图,其定点集合划分为
V
(
G
)
=
X
∪
Y
,
X
∩
Y
=
∅
V(G)=X\cup Y,X\cap Y =\varnothing
V(G)=X∪Y,X∩Y=∅,则
G
G
G中存在将
X
X
X中顶点都许配的匹配,当且仅当任给
S
⊆
X
S\subseteq X
S⊆X,都有
∣
N
(
S
)
∣
≥
∣
S
∣
|N(S)|\geq|S|
∣N(S)∣≥∣S∣,其中,
N
(
S
)
N(S)
N(S)是与
S
S
S中顶点相邻的顶点构成的集合
- 推论:对于正整数 k > 0 k>0 k>0, k k k次正则二分图 G G G有完备匹配
- 覆盖:设 G G G是一个图, C C C是其顶点集合的子集,即 C ⊆ V ( G ) C\subseteq V(G) C⊆V(G),若 G G G中任意一条边都有一个端点属于 C C C,则称 C C C是 G G G的一个覆盖
- 极小覆盖:若 C C C是 G G G的覆盖,但 C C C的任何真子集都不是 G G G的覆盖,则称 C C C是 G G G的极小覆盖
- 最小覆盖:若 C ∗ C^* C∗是 G G G的覆盖,且不存在 G G G的覆盖 C C C,使得 ∣ C ∣ < ∣ C ∗ ∣ |C|< |C^*| ∣C∣<∣C∗∣,则称 C ∗ C^* C∗是 G G G的最小覆盖,且称 ∣ C ∗ ∣ |C^*| ∣C∗∣是 G G G的覆盖数,记作 β ( G ) \beta(G) β(G)
- 引理:假设 C C C是图 G G G的覆盖, M M M是图 G G G的匹配,则 ∣ C ∣ ≥ ∣ M ∣ |C|\geq|M| ∣C∣≥∣M∣
- 引理:若图 G G G存在覆盖 C C C和匹配 M M M,使得 ∣ C ∣ = ∣ M ∣ |C|=|M| ∣C∣=∣M∣,则 C C C是最小覆盖, M M M是最大匹配
- Konig-Egervary定理:设 G G G是二分图,则 G G G的匹配数等于其覆盖数,即 α ( G ) = β ( G ) \alpha(G)=\beta(G) α(G)=β(G)
- 本节证明二分图相关内容常用:设 U U U是 X X X中没有被 M M M许配的顶点集合,令 Z = { v ∣ v ∈ V ( G ) , 且 v 与 U 中 某 个 顶 点 之 间 存 在 交 错 轨 道 } , S = X ∩ Z , T = Y ∩ Z Z=\{v|v\in V(G),且v与U中某个顶点之间存在交错轨道\},S=X\cap Z,T=Y\cap Z Z={v∣v∈V(G),且v与U中某个顶点之间存在交错轨道},S=X∩Z,T=Y∩Z
任意图的完备匹配
- 奇片/偶片:设 G ′ G' G′是 G G G的连通片,若 v ( G ′ ) v(G') v(G′)是奇数,则称 G ′ G' G′是 G G G的奇片,否则称之为偶片。用 o ( G ) o(G) o(G)表示 G G G中奇片的个数
- Tutte定理: G G G有完备匹配,当且仅当任给 S ⊆ V ( G ) S\subseteq V(G) S⊆V(G),都有 o ( G − S ) ≤ ∣ S ∣ o(G-S)\leq|S| o(G−S)≤∣S∣
- Petersen定理:无桥的三次正则图有完备匹配
最大匹配算法
- u-交错树:假设 G G G是一个图, M M M是 G G G的一个匹配, u u u是 G G G的一个没有被 M M M许配的顶点。对于 G G G的子图 T T T,如果 T T T是树, u ∈ V ( T ) u\in V(T) u∈V(T),且满足任给 v ∈ V ( T ) v\in V(T) v∈V(T), T T T中从 u u u到 v v v的轨道是交错轨道,则称 T T T是 G G G中关于 M M M的u-交错树。若除了 u u u之外,其余顶点被M许配,则称 T T T为被M许配的u-交错树
- 交错树算法
- 输入:二分图 G = ( X , E , Y ) G=(X,E,Y) G=(X,E,Y), G G G的匹配 M M M, G G G中没有被 M M M许配的顶点 u u u,不妨假设 u ∈ X u\in X u∈X
- 输出: G G G中关于 M M M的u-交错树 T u = ( U , E ′ , V ) T_u=(U,E',V) Tu=(U,E′,V)
- 初始化: U = { u } , E ′ = ∅ , V = ∅ , l p r e ( u ) = ∗ , v ≠ u , l p r e ( v ) = n u l l , l v i s i t e d ( v ) = 0 U=\{u\},E'=\varnothing,V=\varnothing,l_{pre}(u)=*,v\neq u,l_{pre}(v)=null,l_{visited}(v)=0 U={u},E′=∅,V=∅,lpre(u)=∗,v=u,lpre(v)=null,lvisited(v)=0
- 找可增长轨道:若存在 x ∈ X , l p r e ( x ) ≠ n u l l , l v i s i t e d ( x ) = 0 x\in X,l_{pre}(x)\neq null,l_{visited}(x)=0 x∈X,lpre(x)=null,lvisited(x)=0,则对 Y Y Y中所有满足 x y ∈ E − M xy\in E-M xy∈E−M且 l p r e ( y ) = n u l l l_{pre}(y)=null lpre(y)=null的顶点 y y y,令 l p r e ( y ) = x ; E ′ ← E ′ ∪ x y ; V ← V ∪ { y } l_{pre}(y)=x;E'\leftarrow E'\cup{xy};V\leftarrow V\cup\{y\} lpre(y)=x;E′←E′∪xy;V←V∪{y},最后令 l v i s i t e d ( x ) = 1 l_{visited}(x)=1 lvisited(x)=1
- 构造交错树:若存在 y ∈ Y , l p r e ( y ) ≠ n u l l , l v i s i t e d ( y ) = 0 y\in Y,l_{pre}(y)\neq null,l_{visited}(y)=0 y∈Y,lpre(y)=null,lvisited(y)=0,则对 X X X中所有满足 x y ∈ M xy\in M xy∈M且 l p r e ( x ) = n u l l l_{pre}(x)=null lpre(x)=null的顶点 x x x,令 l p r e ( x ) = y ; E ′ ← E ′ ∪ x y ; U ← V ∪ { x } l_{pre}(x)=y;E'\leftarrow E'\cup{xy};U\leftarrow V\cup\{x\} lpre(x)=y;E′←E′∪xy;U←V∪{x},最后令 l v i s i t e d ( y ) = 1 l_{visited}(y)=1 lvisited(y)=1
- 算法结束:找到可增长轨道立马结束,或没有新顶点加入U
- 引理:设 M M M是二分图 G G G的一个匹配, u u u是 G G G中的一个匹配, u u u是 G G G中一个未被 M M M许配的顶点,按照交错树算法得到的一个u-交错树 T u = ( u , E ′ , Y ) T_u=(u,E',Y) Tu=(u,E′,Y)。若 T T T中仅有一个顶点 u u u未被 M M M许配,在 G G G中不存在含 T T T中任何顶点的可增长轨道。
- 匈牙利算法:
- 输入:二分图 G = ( X , E , Y ) G=(X,E,Y) G=(X,E,Y)
- 输出: G G G的最大匹配 M M M
- 初始化:取 G G G的一个初始匹配 M M M,如 M = ∅ , G ′ ← G M=\varnothing,G'\leftarrow G M=∅,G′←G
- 找交错树:取 G G G中没有被 M M M许配的顶点 u u u,搜索u-交错树 T u T_u Tu,若找到可增长轨道,设为 P P P,令 M ← M ⊕ E ( P ) M\leftarrow M\oplus E(P) M←M⊕E(P),否则 G ′ ← G ′ − V ( T u ) G'\leftarrow G'-V(T_u) G′←G′−V(Tu)
- 算法结束: G ′ G' G′为空,或 G ′ G' G′中顶点都被 M M M许配,否则循环上一步
- 定理:匈牙利算法得到的 M M M是 G G G的最大匹配
最佳匹配算法
- 最佳匹配: M M M是 G G G的一个匹配, M M M的权定义为 w ( M ) = ∑ x , y ∈ M w ( x i y j ) w(M)=\sum_{x,y\in M}w(x_iy_j) w(M)=∑x,y∈Mw(xiyj), G G G中权值最大的匹配,称之为最佳匹配
- 可行顶标:给定边权二分图 G = ( X , Δ , Y ) G=(X,\Delta,Y) G=(X,Δ,Y),带有权值 w : Δ → R w:\Delta\rightarrow R w:Δ→R,定义 V ( G ) = X ∪ Y V(G)=X\cup Y V(G)=X∪Y上的函数 l : X ∪ Y → R l:X\cup Y\rightarrow R l:X∪Y→R。若 l l l满足:任给 x ∈ X , y ∈ Y x\in X,y\in Y x∈X,y∈Y,都有 l ( x ) + l ( y ) ≥ w ( x y ) l(x)+l(y)\geq w(xy) l(x)+l(y)≥w(xy),则称 l l l为一个可行顶标
- 相等子图:给定边权二分图
G
=
(
X
,
Δ
,
Y
)
G=(X,\Delta,Y)
G=(X,Δ,Y),带有权值
w
:
Δ
→
R
w:\Delta\rightarrow R
w:Δ→R,以及可行顶标
l
:
X
∪
Y
→
R
l:X\cup Y\rightarrow R
l:X∪Y→R。定义
G
G
G关于
l
l
l的相等子图
G
l
G_l
Gl为
- V ( G l ) = V ( G ) V(G_l)=V(G) V(Gl)=V(G)
- E ( G l ) = { x i y j ∣ l ( x i ) + l ( y j ) = w ( x i y j ) } E(G_l)=\{x_iy_j|l(x_i)+l(y_j)=w(x_iy_j)\} E(Gl)={xiyj∣l(xi)+l(yj)=w(xiyj)}
- 定理:给定边权二分图 G = ( X , Δ , Y ) G=(X,\Delta,Y) G=(X,Δ,Y),带有权值 w : Δ → R w:\Delta\rightarrow R w:Δ→R,以及可行顶标 l l l。若相等子图 G l G_l Gl有完备匹配,设为 M M M,则 M M M是 G G G的最佳匹配。
- Kuhn-Munkreas算法:
- 输入:二分图 G = ( X , Δ , Y ) , ∣ X ∣ = ∣ Y ∣ G=(X,\Delta,Y),|X|=|Y| G=(X,Δ,Y),∣X∣=∣Y∣,边权函数 w : Δ → R w:\Delta\rightarrow R w:Δ→R
- 输出: G G G的最佳匹配 M M M
- 初始化:任选 G G G的一个可行顶标 l l l,构造相等子图 G l G_l Gl
- 找最大匹配:用匈牙利算法求 G l G_l Gl的最大匹配,设为 M M M,若 M M M是 G l G_l Gl的完备匹配, M M M是 G G G的最佳匹配,退出。否则,下一步
- 构造新的可行顶标:设 u u u是 G l G_l Gl中未被 M M M许配的顶点,不妨设 u ∈ X u\in X u∈X。令 Z = { v ∣ v ∈ V ( G l ) , 且 u , v 之 间 存 在 交 错 轨 道 } , S = X ∩ Z , T = Y ∩ Z Z=\{v|v\in V(G_l),且u,v之间存在交错轨道\},S=X\cap Z,T=Y\cap Z Z={v∣v∈V(Gl),且u,v之间存在交错轨道},S=X∩Z,T=Y∩Z,计算 α ( l ) = min x i ∈ S , y j ∉ T { l ( x i ) + l ( y j ) − w ( x i y j ) } \alpha(l)=\min_{x_i\in S,y_j\notin T}\{l(x_i)+l(y_j)-w(x_iy_j)\} α(l)=minxi∈S,yj∈/T{l(xi)+l(yj)−w(xiyj)}, l ‾ = { l ( v ) − α l , v ∈ S l ( v ) + α l , v ∈ T l ( v ) 其他 \overline{l}=\begin{cases} l(v)-\alpha_{l},& \text v\in S \\ l(v)+\alpha_{l},& \text v\in T \\ l(v) & \text{其他} \end{cases} l=⎩⎪⎨⎪⎧l(v)−αl,l(v)+αl,l(v)v∈Sv∈T其他