最大权闭合图

转载自:http://www.cnblogs.com/wuyiqi/archive/2012/03/12/2391960.html


首先我们由一道题来引入,见 [线性规划与网络流24题 2] 太空飞行计划问题 

这道题中,实验依赖于仪器,而实验和仪器都有权值,且仪器为负,实验为正。

这里闭合图的概念就很好引出了。在一个图中,我们选取一些点构成集合,记为V,且集合中的出边(即集合中的点的向外连出的弧),所指向的终点(弧头)也在V中,则我们称V为闭合图。最大权闭合图即在所有闭合图中,集合中点的权值之和最大的V,我们称V为最大权闭合图。

 

 


上图中闭合图有

     {5}、{2,5}、{4,5}

     {2,4,5}、{3,4,5}

     {1,2,3,4,5}、{1,2,4,5}

最大权闭合图为{3,4,5}。

 

 

针对本题而言,我们将实验与仪器间连一条有向边,实验为起点(弧尾),仪器为终点(弧头)。则如果我们选择一个闭合图,那么这个闭合图中包含的实验所需要的仪器也最这个闭合图里。而最大权闭合图即为题目的解。

了解了最大权闭合图的概念,接下来我们就需要知道如何求最大权闭合图。

首先我们将其转化为一个网络(现在不要问为什么,接下来会证明用网络可以求解)。构造一个源点S,汇点T。我们将S与所有权值为正的点连一条容量为其权值的边,将所有权值为负的点与T连一条容量为其权值的绝对值的边,原来的边将其容量定为正无穷。

 

上图即被转化为如左图网络。

 

 

 

 

首先引入结论,最小割所产生的两个集合中,其源点S所在集合(除去S)为最大权闭合图,接下来我们来说明一些结论。

  • 证明:最小割为简单割。

        引入一下简单割的概念:割集的每条边都与S或T关联。(请下面阅读时一定分清最小割与简单割,容易混淆)

        那么为什么最小割是简单割呢?因为除S和T之外的点间的边的容量是正无穷,最小割的容量不可能为正无穷。所以,得证。

  • 证明网络中的简单割与原图中闭合图存在一一对应的关系。(即所有闭合图都是简单割,简单割也必定是一个闭合图)。

        证明闭合图是简单割:如果闭合图不是简单割(反证法)。那么说明有一条边是容量为正无穷的边,则说明闭合图中有一条出边的终点不在闭合图中,矛盾。

        证明简单割是闭合图:因为简单割不含正无穷的边,所以不含有连向另一个集合(除T)的点,所以其出边的终点都在简单割中,满足闭合图定义。得正。

  • 证明最小割所产生的两个集合中,其源点S所在集合(除去S)为最大权闭合图。

        首先我们记一个简单割的容量为C,且S所在集合为N,T所在集合为M。

        则C=M中所有权值为正的点的权值(即S与M中点相连的边的容量)+N中所有权值为负的点权值的绝对值(即N中点与T中点相连边的容量)。记(C=x1+y1);(很好理解,不理解画一个图或想象一下就明白了)。

        我们记N这个闭合图的权值和为W。

        则W=N中权值为正的点的权值-N中权值为负的点的权值的绝对值。记(W=x2-y2);

        则W+C=x1+y1+x2-y2。

        因为明显y1=y2,所以W+C=x1+x2;

        x1为M中所有权值为正的点的权值,x2为N中权值为正的点的权值。

        所以x1+x2=所有权值为正的点的权值之和(记为TOT).

        所以我们得到W+C=TOT.整理一下W=TOT-C.

        到这里我们就得到了闭合图的权值与简单割的容量的关系。

        因为TOT为定值,所以我们欲使W最大,即C最小,即此时这个简单割为最小割,此时闭合图为其源点S所在集合(除去S)。得正。

 

至此,我们就将最大权闭合图问题转化为了求最小割的问题。求最小割用最小割容量=最大流,即可将问题转化为求最大流的问题。


在胡伯涛的《最小割模型》论文中还介绍了一种更好的构图模式,大大提高了效率,而且更简洁.

构图:

(1)同样设置一个源点,一个汇点.

(2)源点向原图的所有点建立一条边,容量为足够大的值U(之后解释这个U).

(3)所有点向汇点建立一条边,容量为U+2*pv-dv.

(4)最后把原图中的边原样添加到新图中.


对于原图我们是使得这样一个式子取得最大值: w(E')-w(V') =[w(e:e∈E')] - [w(v:v∈V')]即选出边的权值减去与其相连的点的权值.

我们不妨[w(e:e∈E')] 看作:[w(e:e∈E)] - [w(e:e∈~E')] 

其中 E:和V'中的点相关联的所有边 , ~E':表示E'相对于E的补集.

则原式可写为:w(E')-w(V') = [w(e:e∈E)] - [w(e:e∈~E')] - [w(v:v∈V')]

其实我们可以知道其中sum[w(e:e∈~E')]就是我们所勾出的图的最小割(它使得V'与~V'不相连).

所以我们可以把[w(e:e∈~E')] = c(S,T)

所以原式又可写为:w(E')-w(V') = [w(e:e∈E)]-[w(v:v∈V')] - c(V',~V').

接下来为了方便起见设dv是与v关联的所有边的权值和,pv为v的权值.(dv,pv的含义和构图中的一样)

则原式化为:w(E')-w(V') = ∑(dv) /2∑(pv) -  c(V',~V'). (除2是因为,是无向图,u-->v会计算,同样v-->u也会计算.)

我们不妨把这个式子取反:w(V')-w(E') =  ∑(pv) - ∑(dv) /2  c(V',~V')

                                =  ∑(pv-dv/2)  c(V',~V')

两边同时乘2 得2*[w(V')-w(E')] = ∑(2*pv-dv)  c(V',~V')

到此,我们就可以这样认为,选了点v(v∈V')就要花费代价(2*pv-dv).

这边就要引入U(足够大的数),因为(2*pv-dv)可能为负,但是边的容量不能为负,所以加个U使得容量非负.

这个U其实只要等于所有边权之和即可,这样就能保证U+2*pv-dv非负.


证明:

其中|E'|-g|V'|=w(E')-w(V'),g=pv



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值