最小割和K割问题


首先来介绍一下割的概念。
给定一个连通无向图G=(V,E),边的权重为w,定义一个割,割是一组边的集合,当图中去掉这组边之后,图就分为了两个互不连通的连通分支。割中的每一条割边,都分别连接着这两个连通分支。如果我们设定两个端点s,t,分别属于两个连通分支,那么,这个割就称为s-t割。我们可以用最大流算法去求这个s-t割的最小割边权重和。

多向切割(Multiwaycut)

定义

多向切割

给定一组端点S = s1,s2,…,sk⊆V,多向切割是一组边集,将这组边移除会断开端点彼此的连接,也就是变成不连通图。 多向切割要求边权值最小。
与上面所定义的割相比,从原图中去掉多向切割的割边,原图会形成多个连通分支,而上面所定义的割是形成两个连通分支。并且注意,多向切割是最小割。

k-割

移除掉割边之后,形成了k个连通分支,就是k-割。k-割也是最小割。
2-cut与3-cut,去掉红色的割边之后形成了2/3个连通分支
当k>=3的时候,找多路切割的最小割就是一个np难问题,k=2的时候恰好为s-t割问题,可以用最大流算法解决。np难问题是没有办法在多项式时间内解决的,因此,下面将提出近似比为2-2/k的近似算法。

基于贪心和独立割的近似算法

独立割

独立割:定义 s i s_i si是一个割,移除掉了这个割之后, s i s_i si和剩余的端点就不联通了。
也就是说,U是边的全集, s i s_i si是U的子集, s i s_i si的并集得到U,对这个 s i s_i si定义一个独立割,这个割是边的集合,去掉了割中的这些边之后, s i s_i si和其他的 s j s_j sj就不连通了。
 独立割
可以看到,上图中,左边是s2的一个独立割,让包含s2的连通分支和其他的点都不在连通。右边则是s2的一个最小独立割。最小独立割的割边是最少的。

算法

对于每一个 s i s_i si,i从1到k,都计算一个最小独立割,称为 C i C_i Ci。丢弃掉这些割里最重的割,然后把剩余的割组成一个割集,称为 C C C
丢弃最重割的原因在于,当把前k-1个 s i s_i si独立出去之后,最后一个也就自然独立了。可以参考下图,两条边分别把S1和S2独立出去,最后一个S3也自然独立。由于我们要求是最小独立割,因此把全部的 s i s_i si的独立割计算出来之后,丢掉最重的,剩下的就是根据分别计算独立割可以得到的最小的多路切割。
在这里插入图片描述
我们在计算每个 s i s_i si的最小独立割的时候,可以把非 s i s_i si的其他部分看作是一个部分,这样,就可以将多路切割的np难问题降为s-t割问题,就可以采用最大流算法来求到每个 s i s_i si的最小独立割。
右边部分可以看作是k=2的s-t割
令A为G中的最小多路割,我们可以把A看作是K-割的并集如下:把A从G中移除会导致生成k个联通部分,定义一个 A i A_i Ai A i A_i Ai是把剩余的图中包含 s i s_i si的联通部分分离出来的割。然后就有
A = ⋃ i = 1 k A i \bigcup^{k}_{i=1} A_i i=1kAi.(A是 A 1 − > A k 中 元 素 的 并 集 A_1->A_k中元素的并集 A1>Ak

下图是一个k=3的割,可以看到,把e1-e5移除掉之后,S1,S2,S3都成为了独立的连通分支

割A1是把S1独立于其他端点的割,A3是把S3独立于其他端点的割,对于e1来说,e1既属于A1,也属于A3,所以说,A的每个割边都会出现在两个不同的 A i A_i Ai中,所以计数的时候,就有 A i A_i Ai的权重之和为A的权重的二倍。
在这里插入图片描述
关于此图,首先A={e1,e2}是最小割,然后A1,A2,A3是S1,S2,S3的独立割,三个红圈分别表示包含S1到S3的连通分量。我们可以看到每个割边出现在了两个集合中,因为它连接着两个连通分量,因此在这两个联通分量的独立割中都会有他。

计数的直接例子:如上图
e1和e2的权重为w1.w2,w(A1)=w1,w(A2)=w2,w(A3)=w1+w2.
A为{e1,e2},那么 ∑ i = 1 k w ( A i ) \sum_{i=1}^k w(A_i) i=1kw(Ai)=w1+w2+w1+w2;
w(A)=W1+W2,所以就有下面这个公式。
∑ i = 1 k w ( A i ) = 2 w ( A ) ( 4.4.1 ) \sum_{i=1}^k w(A_i)=2w(A)\quad (4.4.1) i=1kw(Ai)=2w(A)(4.4.1)
显然, A i A_i Ai就是使得 s i s_i si独立于其他顶点的割,因为 C i C_i Ci S i S_i Si的最小独立割,所以有w( C i C_i Ci) ≤ w( A i A_i Ai)。注意这里已经根据k-割的并集 C i C_i Ci给了一个因素两种算法[或者译成已经给出来近似比的两种算法]。最后,因为C是由抛弃最重的割所获得的,因此有下面这个公式:
ω ( c ) = ∑ i = 1 k ω ( c i ) − m a x ( c i ) ≤ ( 1 − 1 k ) ∑ i = 1 k ω ( c i ) ≤ ( 1 − 1 k ) ∑ i = 1 k w ( A i ) = 2 ( 1 − 1 k ) ω ( A ) \omega(c)=\sum_{i=1}^k\omega(c_i)-max(c_i)\quad\leq (1-\cfrac1k)\sum_{i=1}^k\omega(c_i)\quad\leq (1-\cfrac1k)\sum_{i=1}^kw(A_i)\quad=2(1-\cfrac1k)\omega(A) ω(c)=i=1kω(ci)max(ci)(1k1)i=1kω(ci)(1k1)i=1kw(Ai)=2(1k1)ω(A)
c就是丢弃k个最小割之中最重的, ( 1 − 1 k ) (1-\frac{1}{k}) (1k1)是减掉k个最小割的和的1/k,也就是K个最小割加起来求一个平均值,那么最终的最小割一定会大于这个平均值,所以有c的权值小于等于 c i c_i ci中的权值之和乘 ( 1 − 1 k ) (1-\frac{1}{k}) (1k1)。上一段的翻译中提到, A i A_i Ai s i s_i si独立出来的割,因为 C i C_i Ci是把 S i S_i Si独立出来的最小割,所以有w( C i C_i Ci) ≤ w( A i A_i Ai),因此得到了 ( 1 − 1 k ) ∑ i = 1 k ω ( c i ) ≤ ( 1 − 1 k ) ∑ i = 1 k ω ( A i ) (1-\frac{1}{k})\sum^{k}_{i=1}\omega(c_i)\leq(1-\frac{1}{k})\sum^{k}_{i=1}\omega(A_i) (1k1)i=1kω(ci)(1k1)i=1kω(Ai)。最后的等于号的成立在于4.4.1的公式

根据这个式子,左边的 ω ( C ) \omega(C) ω(C)就是根据这个基于贪心和独立割的算法来得到的近似解,右边的 ω ( A ) \omega(A) ω(A)就是这个问题的最优解。那么,根据上式的推导就可以得到他们之间的比值是 2 ( 1 − 1 k ) 2(1-\cfrac1k) 2(1k1)

实例

该算法的一个紧密示例由以下图表给出:2k个顶点,包括一个k圈和圈中一个分别连接到每个顶点的相异终点(也就是圈中的一个点会连接圈外的一个点,而圈外的那个点和圈中的其他点是没有边相连的)。 圈的边的权重为1,边连接到圈的终点的权重为2-ε,其中小参数ε> 0,意思应该是ε趋向0。
在这里插入图片描述
对于每个 s i s_i si来说,最小隔离割就是那条2-ε的边,这个算法得到的w©,就是(k − 1)(2 −ε)=3(2 −ε),但是实际上的最优解应该是去掉4条权值为1的边,w(c)=4,那么最优解和近似解的比值就是0.75(2 −ε),小于(2 −ε)
2-ε的那条边,是连接着 s i s_i si的最小隔离割,如果割掉1的那条边,生成的不是 s i s_i si的最小隔离割,但是对于整个图来说,割掉1的边,是形成4个连通分支的最优解,这就是近似解和最优解的差别。
在此图中每个端点的最小独立割就是和它相邻的那条边,因此贪心算法求得的割边集合C的权重为 ( k − 1 ) ( 2 − ϵ ) (k-1)(2-\epsilon) (k1)(2ϵ)因为这里k=4,也就是 6 − 3 ϵ 6-3\epsilon 63ϵ

而实际的最优解是割掉中间那个环,也就是OPT=4,所以近似比:
( 6 − 3 ϵ ) / 4 = 1.5 − 0.75 ϵ < 2 ( 1 − 1 / 4 ) = 1.5 (6-3\epsilon)/4=1.5-0.75\epsilon\quad<\quad2(1-1/4)=1.5 (63ϵ)/4=1.50.75ϵ<2(11/4)=1.5
可见符合我们上面的公式
在这里插入图片描述

基于最小割树的近似算法

最小割树

在这里插入图片描述
在这里插入图片描述
流程总结:刚开始随机选择一个源点a,一个目的节点b,然后用最大流算法算出一个包含a的割和一个包含b的割,然后在包含a的割里,再选择一个源点a1和目的节点a2,形成包含a1的割和包含a2的割,对b也是如此,一直做下去,直到可以把每一个节点都单独独立出来,形成最小割树。(树的边的权值就是两个点之间的最小割值,如0和2是8,0和4就应该是8+6)括号里这部分是我不确定的。
【原本是参考某位博主的流程,所以具体细节就不放上来了】
注意,在构造最小割树的时候,每两个点之间对应的割边是需要保存的,因为后面会用到。
当我们得到最小割树之后,最小割树称为T。
现在T是最小割树,T有l条边,T原本的图称G,把T中的l条边都删掉,留下l+1个连通分支(其实可以说是点),图G中去掉这些S,也会形成l+1个连通分支。要注意,S是割的并集,也就是说,G删S删掉的不仅仅是对应T中的那些边。

算法

1.为图G计算一个最小割树T
2.输出与图G中与T的边相关的n-1个割中最小的k-1个割的并集,并集设为C

把C从G中移走至少导致k个连通分支[因为是k-1个割的并],如果超过k个连通分支被创建,那么就少移动一些边,使得生成k个连通分支。

A是G的最小割,根据4,4定理中,我们可以看到A是K个割的并集,令
V 1 , V 2 , . . . , V k V_1, V_2,...,V_k V1,V2,...,Vk为A从G中移走之后生成的K的连通分支。【生成k个而不是k+1个是因为,最后一个连通分支因为移走前面的k-1个割自然独立,但是它的独立割的割边已经被去掉了】让 A i A_i Ai V i V_i Vi的独立割,那么 A = A 1 ∪ ⋅ ⋅ ⋅ ∪ A k A = A_1 ∪···∪ A_k A=A1Ak,并且A的每条边都连接着两个连通分支。
∑ i = 1 k w ( A i ) = 2 w ( A ) ( 4.4.1 ) \sum_{i=1}^k w(A_i)=2w(A)\quad (4.4.1) i=1kw(Ai)=2w(A)(4.4.1)
在不失一般性的前提下,假设Ak是这些割中最重的。 这个想法后面的其余证明是表明定义了k − 1个割由T的边决定[T的边决定了生成的k-1个割],其边主要由割A1,A2,…,Ak-1的重量决定[重量决定了,原图中要去掉的是哪些边]。 由该算法选择了T来定义的最轻的k -1割,定理如下。
k-1个割是由如下的方式识别的: 令B为T的边集连接两个集合V1,V2,…,Vk(v1-vk是最小割树T中去掉所有的割边剩下来的点)。 考虑顶点集上的图V和边集B,并将每个集V1,V2,…,Vk缩小到单个顶点。该缩小图必须是连通的(因为T是连通的)。 抛弃一些边直到剩下一棵树。 令B’⊆B为剩余边集,| B ’| = k − 1。边集B‘定义了所需的k − 1切口。

[这里由几个可能会疑惑的点,首先是前面有说过,如果移走T中所有的边之后生成的连通分支大于k个,就少移掉一些边,使得生成k个连通分支。然后就会有一些 v i v_i vi不是单个点。所以上面表示的意思就是把这部分少移掉的边在保证连通的前提下去掉。B’就是那些连接k个顶点的边]

假设边(u,v)∈B’以此方式对应于集合 V i V_i Vi。 图G中的最小u–v割的权值为w’(u,v)。 由于 A i A_i Ai是G的u–v割,也就是对于 s i s_i si来说,割 A i A_i Ai是最小割。所以对于单个点来说,有如下公式成立
ω ( A i ) ≤ ω ’ ( u , v ) \omega(A_i)\leq\omega’(u,v) ω(Ai)ω(u,v)
在这里插入图片描述4大于5是之前所提过的,3大于4需要说说。
4也许要转换成这个形式更利于理解 ( k − 1 ) ( 1 k ) ∑ i = 1 k w ( A i ) (k-1)(\cfrac1k)\sum_{i=1}^kw(A_i)\quad (k1)(k1)i=1kw(Ai).
这表明, A i A_i Ai的权值之和求一个平均数,然后乘以k-1,也就是去掉的是一个平均大小的权值。
对于3来说,默认第k个权值为割权值最大的权值,所以这里直接没有算上第k个割的权值,所以会比去掉平均数的更小。
2比3小的原因更复杂,下面是我的猜测,我们用这个图来看。设每条边的权值都为1,对于3来说, w ( A 1 ) 3 , w ( A 2 ) = 3 , W ( A 3 ) = 4 w(A_1)3,w(A_2)=3,W(A_3)=4 w(A1)3,w(A2)=3,W(A3)=4,因此被舍去的肯定是W( A 3 A_3 A3).那么公式3的值为6.对于公式2,根据前提保证连通的情况下舍去一些边,可以知道剩下的边为e1-e5,所以值就为5,所以就小了。
但是2还不是最优的,情况由实例中给出。所以2大于1
在这里插入图片描述

实例

在这里插入图片描述

最小割树中的最轻的k-1个边,每条边的权值为2 − ε ,对应从G中挑选出权值为2 − ε 的边,所以,根据算法返回k割的权值为(k − 1)(2 − ε)。另一个方面,最优k割挑选的所有边,权值为1,权重为k。

上图为原图G,下图为对应的最小割树T,此时的T中是有n-1条边的,因为我们这里的k割k=4,所以要收缩节点,变成下面这样、在这里插入图片描述
那么,k割算法得到的最小割的值就是3(2 − ε),生成的连通分支为
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值