首页 > 代码库 > 最小路径覆盖
最小路径覆盖
本文证明如下:最小路径覆盖=|G|-二分图的最大匹配。
参考链接:http://baike.baidu.com/view/2444809.htm
(1)什么是有向图G的最小路径覆盖?首先,图G必须是有向无环的。路径覆盖就是在图G中找出一些路径,每条路径从起点走到终点并且标记中间经过的点。最后,每个点只被标记一次。选出的这些路径组成路径覆盖。如果找出最少的路径成为一个路径覆盖,则称为最小路径覆盖。
在上图中,以下两个均是路径覆盖:
a、<1,2> <4,6> <3> <5>
b、<1,2,4,6> <3> <5>
但是<1,2,4,6> <3,2,4,6>则不是一个路径覆盖,因为2,4被标记两次。在上面两个覆盖中b为最小覆盖,|b|=3,而|a|=4。(注意一个单独的节点也是一个路径)
(2)由原图G构造对应的二分图S,将原图G中的每个点i拆成两个点i1和i2,i1和i2属于S。i1组成二分图的X集合,i2组成Y集合。若原图G中有边<i,j>,则在S中有边<i1,j2>,则上面的图可以得到如下二分图:
(3)定理证明:如果匹配数为零,那么P中不存在有向边,于是显然有最小路径覆盖=|G|-最大匹配数=|G|。在匹配数为0的基础上,即S中一条边没有,如果在S中增加一条匹配边(i1,j2),那么在图G的路径覆盖中就存在一条由i连接j的边,也就是说i与j 在一条路径上,于是路径覆盖数就可以减少一个;如此继续增加匹配边,每增加一条,路径覆盖数就减少一条;直到匹配边不能继续增加时,路径覆盖数也不能再减少了;但是这里只 是说明了每条匹配边对应于路径覆盖中的一条路径上的一条连接两个点之间的有向边;下面来说明一个路径覆盖中的每条连接两个顶点之间的有向边对应于一条匹配 边。与前面类似,对于路径覆盖中的每条连接两个顶点之间的每条有向边<i,j>,我们可以在匹配图中对应作一条连接i1与j2的边, 显然这样做出来二分图中的边均为匹配,即连接的X和Y中的两个点之前都未匹配过,否则匹配过的那个点对应原图时就被覆盖两次,与路径覆盖矛盾。这就说明匹配边与路径覆盖图中连接两顶点之间边的一一对应关系,那么也就说明了前面的公式成立,即S中每增加一条匹配边,路径覆盖数减少1.
最小路径覆盖