zoukankan      html  css  js  c++  java
  • 二分图中的对偶问题

    在二分图中,最大匹配数 = 最大流 = 最小割 = 最小点集覆盖 = 总点数 - 最大独立集

    Knig定理的证明:(还是matrix67讲得清楚:http://www.matrix67.com/blog/archives/116)

          假如我们已经通过匈牙利算法求出了最大匹配(假设它等于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中顶点最少的情况,亦即最小点集覆盖。
          即 最小割 = 最小点集覆盖
     
         由 最大流最小割定理 可得 最大流 = 最小割
     
          覆盖集:对于每条边,至少有一个点要被选中
          独立集:对于每条边,至少有一个点不被选中
          则覆盖集和独立集互补,把覆盖集中的“已选点”和“为选点”互换,即可得到独立集,反之亦然。每一个覆盖集唯一对应一个独立集,反之亦然。
          则 结点总数 = 最小覆盖集 + 最大独立集(在这个定理中,带权的点也是适用的,即 总数权 = 最小覆盖集的权和 + 最大独立集的权和)
  • 相关阅读:
    GNU make manual 翻译(九十九)
    GNU make manual 翻译( 九十五)
    Shell的 for 循环小例子
    makefile中对目录遍历的小例子
    GNU make manual 翻译(九十三)
    GNU make manual 翻译( 一百)
    GNU make manual 翻译( 九十七)
    GNU make manual 翻译( 九十八)
    mapserver4.8.3 的readme.win32的中文翻译文件
    遥控器编程
  • 原文地址:https://www.cnblogs.com/oyking/p/3116629.html
Copyright © 2011-2022 走看看