maximum v.s maximal matching
maximal matching: 极大匹配?
maximum match: (also known as maximum-cardinality matching)最大匹配是要找出一个E的子集M,它具有最大数量的不交叠边,即在M中任何两条边没有一个共同顶点。
交替路径:一条由匹配边和未匹配边交替组成的简单路径。
交替路径被称为增广路径,当p中所有的匹配边都在M中并且端点是自由的。
问题定义
寻找二分图的最小顶点覆盖算法:Kőnig’s theorem)
Let’s say you have G = (V, E)
a bipartite graph, separated between X
and Y
.
As you said, first you have to find a maximum matching (which can be achieved with Dinic’s algorithmfor instance). Let’s call M
this maximum matching.
Then to construct your minimum vertex cover顶点覆盖:
- Find
U
the set (possibly empty) of unmatched vertices inX
, ie. not connected to any edge inM
- Build
Z
the set or vertices either inU
, or connected toU
by alternating paths (paths that alternate between edges ofM
and edges not inM
) 通过交替路径与U中顶点相连。 - Then
K = (X \ Z) U (Y ∩ Z)
is your minimum vertex cover
二分图和一般图的匹配算法研究
交替路径树:每一条从根节点到叶子节点的路径均为交替路径
匈牙利树:从自由顶点r开始生长交替路径树,如果树被阻塞,则该被阻塞的树为匈牙利树。
从自由顶点r开始,加上每一条连接r和y顶点y的未匹配边(r, y)。对于y,如果有匹配边(y, z)存在,则将其加入T。重复此过程直到遇到自由的y顶点或被阻塞。
二分图
二分图:不含奇数长度的回路。
网络流方法
匈牙利树方法
- 无向图G的一个匹配M是最大的,当且仅当G不包含关于M的增广路径。
- M为一个匹配,p是关于M的一条增广路径,则M+p可以构造一个更大的匹配。
(匈牙利树的方法利用了匹配的特定性质,这个性质可以帮助我们解决扩大匹配这个问题)
1 | BiMatch2 |
- 算法的时间复杂度?构造交替树$O(m)$,最多构造$O(n)$棵树 => $O(nm) = O(n^3)$
- 为什么匈牙利树可被移除而不影响搜索匹配过程?
- 匈牙利树中无顶点能在增广路径中出现
- 如果($x, y)$为一条边,使得$x$在$T$中而$y$不在$T$中,那么$x$肯定被标记为内部
- 交替路径不经过$T$
- 如果经过$T$,则必然以内部顶点进入、内部顶点穿出,矛盾。
- 匈牙利树中无顶点能在增广路径中出现
一般图
- 匈牙利树
1 | GMATCH |
外层while循环寻找最大匹配,每一次迭代,增广路径被发现并由这条路径匹配扩展集
中层while循环对所有的自由顶点循环,直到发现增广路径为止。
每次迭代中选取一个自由顶点左右交替路径树的根,从这个根出发在内层循环中对图探查,内循环的功能是每次加两条边增长交替路径树。每次迭代中,它取任意一个外部顶点x和相应的边(x,y),如果这样的边存在,有以下几种情况:
- y是内部的
- y是外部的
- y被标记为自由的
- 其他情况下