很早就看了一些关于二分图的算法,只知道二分图最大匹配=二分图最小点集覆盖,却一直不知道为什么。今天在网上找了些资料,参考了Matrix67的文章,再加上我自己的理解加想象。。。。。

      首先解释一下什么事二分图最小点集覆盖,就是说选中一个点,就把以这个点为端点的所有边都选中了,求最少用几个点把所有的边都覆盖。证明用到了konig定理。过程是这样的,首先从右面点得集合中选出未匹配的点,然后选择“未匹配->匹配->未匹配....”这样的路径寻找。如下图中,细的蓝色的线即为这样的路径。并且把这样的路径经过的

证明二分图最大匹配=二分图最小点集覆盖_最大匹配

点标记。这样后,右面点中被标记的和左面点中未被标记的即为我们所要选择的点,就可以把所有边完全覆盖。假设求出的最大二分匹配为M。

       首先我们证明为什么我们选中的点有M个。首先,我们选择的点肯定都是匹配中的点,用反证法证明。如果选中的右面哪个点是没匹配的,则该点肯定会被标记,矛盾。如果左面中的哪个点是没有匹配的,右面的点也没匹配,则这两个点可以匹配,不符合最大匹配,矛盾。这样就说明,我们所找到的点,每个点都是最大匹配中某条边的一个端点,故我们找到的点有M个。

      其次,我们再证明为什么这M个点可以把所有的边覆盖。首先,我们想一下我们选出来的是什么点,左面选中的点可以把以这些顶点为顶点的所有边覆盖。右面选中的点可以把以这些顶点为顶点的所有边覆盖。假设存在一条没有被覆盖的边,则这条边要满足左端点没被标记,而右端点被标记了。我们证明这样的边是不可能存在的。如果这条边是匹配边,则右端点不可能是一条路径的起点,只能是从左端点过来的,则左端点应该被标记,矛盾。如果这条边不是匹配边,那么就可以从右端点到左端点,则左端点应该被标记,矛盾。

证明完毕。