King 定理

来源:互联网 发布:launchpad软件 编辑:程序博客网 时间:2024/04/30 00:05

Knig定理

König定理

  是一个二分图中很重要定理的意思是,一个二分图中的最大匹配数等于这个图中的最小点覆盖数。假如选了一个点就相当于覆盖了以它为端点的所有边,你需要选择最少的点来覆盖所有的边。

证明

  假如我们已经通过匈牙利算法求出了最大匹配(假设它等于M),下面给出的方法可以告诉我们,选哪M个点可以覆盖所有的边。
  匈牙利算法需要我们从右边的某个没有匹配的点,走出一条使得“一条没被匹配、一条已经匹配过,再下一条又没匹配这样交替地出现”的路(交错轨,增广路)。但是,现在我们已经找到了最大匹配,已经不存在这样的路了。换句话说,我们能寻找到很多可能的增广路,但最后都以找不到“终点是还没有匹配过的点”而失败。我们给所有这样的点打上记号:从右边的所有没有匹配过的点出发,按照增广路的“交替出现”的要求可以走到的所有点(最后走出的路径是很多条不完整的增广路)。那么这些点组成了最小覆盖点集。
  首先,为什么这样得到的点集点的个数恰好有M个呢?答案很简单,因为每个点都是某个匹配边的其中一个端点。如果右边的哪个点是没有匹配过的,那么它早就当成起点被标记了;如果左边的哪个点是没有匹配过的,那就走不到它那里去(否则就找到了一条完整的增广路)。而一个匹配边又不可能左端点是标记了的,同时右端点是没标记的(不然的话右边的点就可以经过这条边到达了)。因此,最后我们圈起来的点与匹配边一一对应。
  其次,为什么这样得到的点集可以覆盖所有的边呢?答案同样简单。不可能存在某一条边,它的左端点是没有标记的,而右端点是有标记的。原因如下:如果这条边不属于我们的匹配边,那么左端点就可以通过这条边到达(从而得到标记);如果这条边属于我们的匹配边,那么右端点不可能是一条路径的起点,于是它的标记只能是从这条边的左端点过来的(想想匹配的定义),左端点就应该有标记。
  最后,为什么这是最小的点覆盖集呢?这当然是最小的,不可能有比M还小的点覆盖集了,因为要覆盖这M条匹配边至少就需要M个点(再次回到匹配的定义)。
  对两侧添加源汇点后可以从最小割最大流的角度理解。
  在原图上对所有的边的左结点和右结点连一条容量无穷大的流(从左结点到右结点),然后再添加源汇顶点,对源点到每个左顶点添加容量为1的流,对每个右顶点到汇点添加容量为1的流。
  易知,最大流即为最大匹配数。
  我们来研究所有的割,我们将所有左顶点划为A1,A2两部分,右顶点划为B1,B2两部分,并研究从S并A1并B2到T并A2并B1这个割的最小取法(这个划分方式包含了所有可能的割),如若左顶点P到右顶点Q有边,那么最小割中显然不会有“P属于A1且Q属于B1”成立(否则就这一条边割出来就是无穷大,肯定不是最小割),于是最小割中所有的边PQ必满足“P属于A2或Q属于B2”,换句话说,A2,B2中所有顶点组成这个二分图的一个点集覆盖。
  下面观察,我们易知,再最小割中,总的割必然等于S到A2的+B2到T的(这些是最小割中所有可能的边了)。而S到A2+B2到T就是A2,B2中所有顶点的个数总和,所以最小割就是满足题意(A2并B2构成最小点集覆盖)的A2并B2中顶点最少的情况,亦即最小点集覆盖,于是乎:
  最大匹配数=最大流=最小割=最小点集覆盖
原创粉丝点击