这篇文章为上篇文章的下叙,主要介绍基数顶点覆盖问题。这个问题也是出自文章《Approximation Algorithms》。
现在我们就来解决上一篇文章中我们提到的''Is the size of the minimum vertex cover in G at most k? ''这个问题
首先我们介绍一下什么是基数顶点覆盖问题,也就是基数顶点覆盖的定义:
定义:假如选定了一个点就相当于覆盖了以它为端点的所有边。最小顶点覆盖就是用最少的点来覆盖所有的边。
我们所使用的方法为:最小顶点覆盖等于二分图的最大匹配。
我们用二分题来构造最小顶点覆盖:如下图所示。
这部分的具体计算:
在图中我们可以将这个点的集合分为两个部分,X,Y。其中X:1,2,3,4。 Y:5,6,7,8。我们令M为已经给出的所匹配好的边。M={(1,7)(2,5)(4,8)}而1,2,4,5,7,8为匹配过的点,(4,8)(1,7)(2,5)为匹配过的边。我们以一边为例,Y中未匹配的点:6,9。以9为开始的顶点可得:9-4-8-2-5。我们可以得到一条9-5的交替路。(以匹配的边结尾)。左边已标记的点和右边未标记的点为S, 以下证明S即为所求的最小顶点集。S={2,4,7}。(左侧2,4为匹配边经过的点,右侧7为未经过的点)
性质:
1、| S | == M
显然,左边标记的点全都为匹配边的顶点,右边未标记的点也为匹配边的顶点。因此,我们得到的点与匹配边一一对应
2、S 能覆盖 G 中所有的边。
S 中点所得到的边有以下几种情况:
( 1 )左右均标记;
( 2 )左右均无标记;
( 3 )左边标记,右边未标记;
若存在一条边 e 不属于 S 所覆盖的边集,则 e 左边未标记右边标记。
如果 e 不属于匹配边,那么左端点就可以通过这条边到达(从而得到标记);如果 e 属于匹配边,那么右端点不可能是一条路径的起点,于是它的标记只能是从这条边的左端点过来的左端点就应该有标记。(观点引用博客https://blog.csdn.net/josunna/article/details/6535699 这个观点描述的很确切,是一个非常好的解释)
3、二分图中最小边覆盖=顶点数-最小顶点覆盖(最大匹配)
最小边覆盖:实质是个边集,这个集合里的边能覆盖所有的顶点,最小边覆盖是满足这个要求中边数最少的一个。
Pr:设最大匹配数为m,总的顶点数为n。为了使边最少,又因为每条边所连接了两个顶点,所以一个边干掉两个顶点。所以这种有匹配的边走的越多越好,所以我们就用最大匹配数目干掉绝大多数点。剩下的解决没有被匹配的点,就只能一条边干掉一个顶点,设这些数目为a。显然2m+a=n,而最小边覆盖=m+a可以得到:最小边覆盖=m+n-2m=n-m
4、二分图中最大独立集+最小顶点覆盖(最大匹配)=顶点数。
Pr:最小顶点覆盖=最大匹配。剩下的则是相互独立的点,相互独立的点+最小顶点覆盖的点=总顶点。
最大独立集:实质是个点集,这个集合中的点无论怎样都亮亮连不到一起,满足这个要求的点数最少的一个。
补充拓展:
但是在文章《Approximation Algorithms》中出现,如果不是二分图呢,最大匹配与最小顶点个数之间的关系呢?文中提出What if G is not restricted to be bipartite?
我们可以在文中得到答案:
In this case, a maximum matching may be strictly smaller than a minimum vertex cover。在这种情况下,最大匹配数必定小于最小顶点覆盖。
在理论上来说:if G is simply an odd length cycle on 2p + 1 vertices, then the size of a maximum matching is p, whereas the size of a minimum vertex cover is p + 1.也就是说如果是一个奇数循环又2p+1个顶点,那么它的最大匹配为p,最小顶点覆盖为p+1。文中还提到了This may happen even for graphs having a perfect matching。举例如下可以看出上图的边为15条边,完美匹配为5,最小顶点覆盖为6。通过观察,我们没有发现大小为5的顶点覆盖,任何顶点覆盖必须选择在2p+1个基数顶点中选择最少p+1个顶点。
具体的内容在文中有说明,我也正看到这里,如果有读过这本书或者正在读这本书的读者可以和我留言,我们相互交流~