二分图定义
定义:对于一个图 G = ( V , E ) G=(V,E) G=(V,E),若能将其点集分为两个互不相交的两个子集 X 、 Y X、Y X、Y,使得 X ∩ Y = ∅ X∩Y=∅ X∩Y=∅,且对于 G G G的边集 V V V,若其所有边的顶点全部一侧属于 X X X,一侧属于 Y Y Y,则称图 G G G为一个二分图。
定理:当且仅当无向图G的回路个数为偶数时,图G为一个二分图。无回路的图也是二分图。
二分图判定:在二分图G中,任选一个点V,使用BFS算出其他点相对于V的距离(边权为1) 对于每一条边E,枚举它的两个端点,若其两个端点的值,一个为奇数,一个为偶数,则图G为一个二分图。
匹配:对于一个二分图G的子图M,若M的边集E的的任意两条边都不连接同一个顶点, 则称M为G的一个匹配。对于二分图G的一个子图M,若M为其边数最多的子图,则称M为G的最大匹配。
独立集定义
最大独立集为N P-复杂问题,但在二分图中存在多项式复杂度的解法。
一个点集中的任意点之间没有关系这个点集就是独立集,点数最多的独立集就是最大独立集。
最小点覆盖:在二分图中,求最少的点集,使得每一条边至少都有端点在这个点集中。二分图中最小覆盖点等于最大匹配。
最大独立集 =点的总数 - 最小点覆盖
因为每条边都有端点在最小点覆盖中,所以去除最小点覆盖候后,图中就不存在边了,而剩下的点之间都是没有关系相互独立的。这时就可以转化为二分图最大匹配问题求解了。
求解最大匹配问题可以使用匈牙利算法和Hopcroft-Karp (HK)算法。
增广路
增广路径的定义如下:
若P是图G中一条联通两个未匹配顶点的路径,且属于M的边和不属于M的边在P上交替出现,则称P为相对于M的一条增广路径。
由增广路的定义我们可以推出下述三个结论:
- P的路径长度必定为奇数,第一条边和最后一条边都不属于M。
- 经过取反操作可以得到一个更大的匹配M’,边数为M的边数+1。
- M为G的最大匹配当且仅当不存在相对于M的增广路径。
下图中已匹配的集合为M,用黑色的线表示。
此时
3
−
1
′
−
1
−
3
′
−
4
−
4
′
3-1^{'}-1-3^{'}-4-4^{'}
3−1′−1−3′−4−4′为一条增广路。
将M变为蓝线表示的边,M的数量增加了1,而求最大匹配就是不断寻找增广路的过程。