对于任意一张有n个节点的图,有:
- 1.最小边覆盖 + 最大匹配 = n
- 2.最大独立集 + 最小点覆盖 = n
比如下面这张图
-
最小边覆盖{e1,e3,e4} 大小为3
-
最大匹配{e1,e3} 大小为2
-
最大独立集{v2,v4,v5} 大小为3
-
最小点覆盖{v1,v3} 大小为2
由此看来上面的两个结论确实是正确的,那么如何证明呢?
对于定理 1 :
假设最大匹配数为y,那么这y条边连接了2*y 个点。
又因为是一个匹配,所以这些点都不同,所以覆盖了2*y个点
又因为这是一个最大的匹配,所以剩下的点中任意两点没有边相连
所以如果我们要覆盖剩下的点,我们肯定要再用(n-2*y)条边,因为没有一条边可以覆盖两个点
所以最大边覆盖 = y + (n-2*y) = n - y
得证
对于定理2:
我们把所有点的状态全部取反,原来在最小覆盖点集中的点不选,选不在最小覆盖点集当中的点
这样得到新的点集大小就是 n - 最小覆盖点集大小
这样我们只要证明新的点集是一个独立集即可
假设新的点集不是一个独立集,那么一定有选择了的两个点有一条公共边
而新的点集中的点都不是最小覆盖点集中的点,那么这两个点也不是最小覆盖点集中的点
而这两个点却有一条边相连,那是不是说明我们原来的点集不是一个覆盖的点集?矛盾
所以:点覆盖与独立集是一一对应的
所以 最大独立集 = n - 最小点覆盖
得证
而在二分图中,我们有一个更强力的性质:
- 最大匹配数 = 最小点覆盖
比如下面这张二分图:
最大匹配显然为2
选择 x2,y2 两点构成点覆盖显然是最小的
由此看来,这个性质确实正确,那么证明?
假设我们求得的最大匹配为: x2-y1,x3-y2
这样,二分图中的所有边其实分为了4类.把匹配点记为P,未匹配点记为NP,可表示成下面的形式:
- P - P
- P - NP
- NP - P
- NP - NP
显然,第四种边其实是不存在的,因为我们已经求得了一个最大匹配,如果存在第四种边,那么这两个未匹配点显然可以相互匹配使匹配数 +1 ,矛盾。
我们先选择左边所有的匹配点作为初始的点集。显然,第一类和第二类边已经被覆盖了,还没有被覆盖的边只有第三类
对于这类边,我们设右边的未选择的匹配点为y,与y相匹配的左边的点记为x,x是被选择了的,我们只需要把y和x的状态反转,即把y记为选择,x记为未选择即可。
这样做为什么是对的呢?我们考虑这样做的影响是什么。 第一类边肯定仍然被覆盖,因为我们选择的是所有的匹配点(不管他是左边还是右边)
然鹅我们把一个左边的匹配点标记为不匹配了,是否会形成第二类边没被覆盖的情况呢?
不会。
比如下面这张图:
我们按照上述方法操作:
1. 选择所有的左侧匹配点 :x2,x3
2. 发现一条第三类边: x1-y2
3. 把x1置为未选择,y2置为已选择
突然,我们惊奇地发现出现了一条2类边 x3-y4 未被覆盖!! 是我们的方法出错了吗?
不是。too naive。
上面这张图最大匹配并不是 2!!! x1-y2,x2-y1,x3-y4
最大匹配应该是3
由此看来,当我们把x,y 集合中的点状态反转过后,并不会出现未匹配的第二类边。
为什么呢?因为如果我们发现了一条第二类边,那么这条边,匹配边,和原来的第二类边就形成了一条增广路!!!而我们已经求得了最大匹配,所以这是不可能出现的。
至此,我们证得了 :二分图中,最大匹配数 = 最小点覆盖。
得出求最小点覆盖集的方法:从左边所有没有匹配的点出发求增广路。最终左边没有访问过的点和右边访问过的点组成最小点覆盖。