二分图匹配,最小点覆盖,最小边覆盖

定义:对于无向图G=(V,E),若M是E的一个子集,且对于任意V中顶点v,M中最多只能有一条边以v为端点,称M是图G的一个匹配。若顶点v与G的某个匹配M中的某条边相连,则称v由M所匹配,否则称v未被M匹配。

定义:称M是G的一个最大匹配,当且仅当对于G中的任意匹配T,有|M|>=|T|。

定义:对于无向图G=(V,E),V可以切分为两个无交集的子集L和R,使得E中所有边的两端都跨越L和R,则称图G为二分图

  在二分图中寻找最大匹配实际上可以归结为整值最大流问题,即相当于在一个整值网络中寻找最大流。事实上我们可以向图中加入两个顶点s和t,并对于任意L中顶点u,添加边(s,u),而对于任意R中顶点v,添加边(v,t)。同时令所有边的容量为1,此时二分图中的最大匹配,等值于以s为源点,t为汇点的网络中的最大流。因为我们可以利用任意已知的最大流算法来解决这类问题。如果需要这部分详细的证明,可以参阅算法导论。此时|M|=|f|,其中f是最大流。

定义:若对于二分图G(V,E),若能找到最小的V的子集S,使得任意E中的边必然与S中的某个顶点相连,则称S为G的最小顶点覆盖

命题:最小顶点覆盖问题实际上等价于最大匹配问题。且若M是二分图G的最大匹配,而S是G的最小顶点覆盖,则必然有|S|=|M|。

证明:===================================================================================================================

  由于要覆盖M中的任意一条边,必须保证S中包含其至少一个端点,而每条边的端点都各不相同,因此|S|>=|M|。

  对于任意V中点u,v,若边(u,v)属于M,则称u与v是对称点,u的对称点为v,而v的对称点为u。

  若在E中存在边e,则其两个端点a,b称为相连的。

  我们建立一个空集S和一个集合A,A中包含所有V中被M所匹配的顶点。称V\(S+A)中的点为外点,若(A+S)中的某个点与外点相连,则称其为接口,而接口的对称点称为内点。

  我们所需要做的就是每次从A中移除一对对称的接口和内点,并将其中的接口加入到S中;如果A中不再包含任意一个接口,则从A中移除任取一对对称点,并将其中之一加入S中。重复这个过程直到A为空集,此时|S|=|A|/2=|M|。

  可以证明在上述过程中S中的任意内点v都可以被释放,换言之,我们可以找到另外一个最大匹配K,使得v不为K所匹配,且(A+S)\{v}中所有顶点依旧被K所匹配。由于v是内点,那么v的对称点v1则为接口,而v1为接口其必定连接了一个外部点v2,v2或者未被M所匹配,或者是从S中移除的一个内点,如果为后者,则继续寻找其对称点v3,以及v3连接的外部点,重复这个流程。最终我们得到了若干个点v0,v1,v2,v3,...,vt,其中v0=v,vt未被M所匹配,t为偶数,而v0,v2,v4,...,v[t-2]均曾为内点,v1,v3,v5...,v[t-1]曾为接口。我们从M中移除边(v0,v1),(v2,v3),(v4,v5)...,同时加入(v1,v2),(v3,v4),...,(v[t-1],vt),这时候M的基数不变,但是v0不再被M所匹配了,而取而代之的是vt被M所匹配。

  我们利用归纳法证明两个约束始终在过程中被满足:1.内点不可能是接口。2.内点之间互不相连。3.(A+S)覆盖了所有边。显然在一开始的时候这两条约束都是满足的。假设我们在流程的某一步之前满足了这条性质,那么我们从A中取出了一对接口和内点u与v。下面需要先说明利用这约束1可以导出一个更强的性质:

  对于A中任意两个内点a和b,若a属于L,且b属于R,则我们可以同时释放a和b。与上面的流程类似,可以分别为a和b找到一组顶点序列a0,a1,...,at,以及b0,b1,...,bk。不妨设k>=t,由于at属于R而bk属于L,因此at不是bk。由于若ai与bj同属于L,则ai从S中以内点的身份被移除,而bj从S中以内点的身份被移除,因此ai不可能是bj,因此我们发现两个序列实际上是没有交集的。由此可知我们在从陪你过M中移除边(a0,a1),...,(a[t-2],a[t-1]),(b0,b1),...,(b[k-2],b[k-1]),同时加入(a1,a2),...,(a[t-1],at),(b1,b2),...,(b[k-1],bk)后,M依旧是最大覆盖,但是a0和b0都从中被移除了出去。

  好的,现在回去证明两个约束。我们A中移除了v并将u加入到S中后,若第一条约束被破坏,则意味着某个A中的内点变为了接口,即该内点与v相连,这与约束2相悖,因此是必定满足的。而对于约束2,如果在这之后被破坏,则意味着某个A中与内点相连的点在之后变成了内点,即存在一对对称点x,y,和接口内点对z,w,其中y与w相连,x与v相连。先说明这种情况是不可能的,因为在之后我们可以同时释放y与w,这时候M的基数不变,且与y和w均不匹配,之后我们将边(y,w)加入M中即可得到更大的最大匹配。(注意这里两个分属于L,R的内点可以同时释放仅依赖于约束1,此时约束1已经得到了证明)因此通过反证,我们可以得到约束2也是成立的。而对于约束3,当我们从A中取出的是接口和内点对时,由于内点只与其余(A+S)中的点相连,因此移除该内点不会破坏性质3。若我们从A中取出的是两个普通的对称点,可以任取一个点,由于其只与其余(A+S)中点相连,因此可以被移除。故约束3也始终成立。最后利用归纳法可以证明当A为空集时,S是一个顶点覆盖,且由于|S|=|M|时,S为最小顶点覆盖。

=======================================================================================================================

定义边覆盖是指E的一个子集X,使得对于V中每个顶点v,都能在X中找到某条边x满足v是x的一个端点。而最小边覆盖是指所有满足上述条件的边集中基数最小的一个。

命题:若X是二分图G(V,E)的最小边覆盖,M是G(V,E)的最大匹配,则|X|=|V|-|M|。

证明:=======================================================================================================================

  这个证明相对简单。记S为所有被M所匹配的顶点组成的点集,我们直接令X初始为M,之后对于每一个V\S中的顶点,向X中加入一条覆盖它的边,最终|X|正好等于|V|-|M|。当然我们还需要证明没有更小的覆盖方案了。设X是一个边集且符合边覆盖的性质,我们可以发现X中的边都至少独立覆盖了一个顶点(即这个顶点不被X中其它边所覆盖),将Y初始化为X,我们不断从Y中移除仅独立覆盖一个顶点的边,直到Y中所有剩余的边都独立覆盖了V中两个顶点才结束流程,我们假设共从Y中移除了k条边,此时V中还有|V|-k个顶点被Y所覆盖,因此有下列等式成立:$$ 2\left(X-k\right)=V-k\Rightarrow 2X=V+k $$此时不难发现Y是一个二分图的一个匹配,因此有$$ X-k\le M $$,代入第一条式子可以得到$$ 2X=V+k\geqslant V+X-M\Rightarrow X\geqslant V-M $$因此最小边覆盖的基数不可能少于|V|-|M|,结合前面我们给出的基数为|V|-|M|的边覆盖X,可以得知X为最小边覆盖。

===========================================================================================================================

  

转载于:https://www.cnblogs.com/dalt/p/7955839.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值