zoukankan      html  css  js  c++  java
  • 注解 二分图点覆盖数就是二分图最大匹配数的证明过程

    二分图点覆盖数就是二分图最大匹配数的证明过程的原文地址如下:

    http://www.matrix67.com/blog/archives/116

    然后为了便于注解,将原文复制在下面:

       “ König定理是一个二分图中很重要的定理,它的意思是,一个二分图中的最大匹配数等于这个图中的最小点覆盖数。如果你还不知道什么是最小点覆盖,我也在这里说一下:假如选了一个点就相当于覆盖了以它为端点的所有边,你需要选择最少的点来覆盖所有的边。比如,下面这个图中的最大匹配和最小点覆盖已分别用蓝色和红色标注。它们都等于3。这个定理相信大多数人都知道,但是网络上给出的证明并不多见。有一些网上常见的“证明”明显是错误的。因此,我在这里写一下这个定理的证明,希望对大家有所帮助。”



        “假如我们已经通过匈牙利算法求出了最大匹配(假设它等于M),下面给出的方法可以告诉我们,选哪M个点可以覆盖所有的边。
        匈牙利算法需要我们从右边的某个没有匹配的点,走出一条使得“一条没被匹配、一条已经匹配过,再下一条又没匹配这样交替地出现”的路(交错轨,增广路)。但是,现在我们已经找到了最大匹配,已经不存在这样的路了。换句话说,我们能寻找到很多可能的增广路,但最后都以找不到“终点是还没有匹配过的点”而失败。我们给所有这样的点打上记号:从右边的所有没有匹配过的点出发,按照增广路的“交替出现”的要求可以走到的所有点(最后走出的路径是很多条不完整的增广路)。那么这些点组成了最小覆盖点集:右边所有没有打上记号的点,加上左边已经有记号的点。看图,右图中展示了两条这样的路径,标记了一共6个点(用 “√”表示)。那么,用红色圈起来的三个点就是我们的最小覆盖点集。”

      注解:这里划线部分的意思就是:由于已经找到了最大匹配,因此从一个右边的非匹配点,以第一条非匹配边为起点找交错路径,找到最后的一条边,一定是匹配边,否则,这条交错路径就是新的增广路径,与当前已经是最大匹配矛盾。既然最后一条边是匹配边,第一条边是非匹配边,所以该交错路径长度定是偶数,且最后一条边是左走向右的(因为第一条边是右向左走的),所以整个找寻路径的特征是1,长度是偶数; 2,第一条是非匹配边,3,第奇数条边是非匹配且是右走向左;4,第偶数条边是匹配且是左走向右。


        首先,为什么这样得到的点集点的个数恰好有M个呢?答案很简单,因为每个点都是某个匹配边的其中一个端点。如果右边的哪个点是没有匹配过的,那么它早就当成起点被标记了;如果左边的哪个点是没有匹配过的,那就走不到它那里去(否则就找到了一条完整的增广路)。而一个匹配边又不可能左端点是标记了的,同时右端点是没标记的(不然的话右边的点就可以经过这条边到达了)。因此,最后我们圈起来的点与匹配边一一对应。

      注解:M条匹配边要一些顶点来分别代表,代表一条匹配边的顶点只能是左边或者右边的,如果一个右边的顶点被标记,则右边的顶点就不可以代表一条匹配边,这里要分成两种情况:1,右边的顶点本来就不在匹配边上,当然其不能代表,这里找”失败增广路径“的起点就是这样的右点,所以,标记其不让其代笔匹配边;2,其是在匹配边的右段点,但此时其左端点一定已经标记,该匹配边已经被左端点代表,无须右端点来重复代表,于是这里的右点又是标记了的。这里之所以说左端点已经标记了,是因为:该边是匹配点,该右点是匹配点,所以不可能作为起点,而之所以走到了它,是因为从左边走了一条匹配边过来,所有左端点是标记了的;所以左点标记了的话就意味着其且沿着找寻路径,一定要往右走去标记右点以取消右点的重复代表,最终达到其左点独占试代表了一条匹配表。

    如果一个右边的顶点没有被标记,则右边的顶点就可以代表一条匹配边,这样的右点有这样的特征:1,其当然是匹配点,否则,其可以作为找”失败增广路径“的起点而被标记,这就说明其可以代表一条匹配边,2,其当然没有出现在找”失败增广路径“的找寻路径上,否则其一定被标记,这是废话,所以其代表的左点一定没有标记,这样左点通过”没标记的“方式”不代表“该匹配边,右点就”没标记“方式独占试地代表了该匹配边。这里说左点一定没有标记的原因是:如果左点标记了话,该边又是匹配边,所以走点就会沿着该匹配边走到右点,将右点标记。

    所以右边所有没有打上记号的点,加上左边已经有记号的点能和匹配边一一代表。


        其次,为什么这样得到的点集可以覆盖所有的边呢?答案同样简单。不可能存在某一条边,它的左端点是没有标记的,而右端点是有标记的。原因如下:如果这条边不属于我们的匹配边,那么左端点就可以通过这条边到达(从而得到标记);如果这条边属于我们的匹配边,那么右端点不可能是一条路径的起点,于是它的标记只能是从这条边的左端点过来的(想想匹配的定义),左端点就应该有标记。

      注解:所有的边可以分成4类:

      

      a,左边标记了, 右边没有标记。

      b,左边没有标记,右边没有标记。

      c,左边标记了, 右边有标记。

      d,左边没有标记, 右边有标记。

         从文中划线部分的”不可能存在某一条边,它的左端点是没有标记的,而右端点是有标记的“可知,d是不可能的。而剩下的a c这两种被左边标记了的点覆盖,而b被右边没有标记的点覆盖


        最后,为什么这是最小的点覆盖集呢?这当然是最小的,不可能有比M还小的点覆盖集了,因为要覆盖这M条匹配边至少就需要M个点(再次回到匹配的定义)。
        证完了。
      

  • 相关阅读:
    X 如何理解关系型数据库的常见设计范式?
    X 使用DMV,诊断和调优DB性能。
    X MSSQL-并发控制-2-Isolation msql 的各种隔离级别 sqlserver
    X SQL Server AG集群启动不起来的临时自救大招
    X 搭建非域AlwaysOn win2016+SQL2016
    X 从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)
    X 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)
    X 从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)
    Python Cookie Session和分页
    Python django应用之corsheaders[跨域设置]
  • 原文地址:https://www.cnblogs.com/kbyd/p/3081424.html
Copyright © 2011-2022 走看看