给定一组端点S = s1,s2,…,sk⊆V,多向切割是一组边集,将这组边移除会断开端点彼此的连接,也就是变成不连通图。 多向切割要求边权值最小。
与上面所定义的割相比,从原图中去掉多向切割的割边,原图会形成多个连通分支,而上面所定义的割是形成两个连通分支。并且注意,多向切割是最小割。
移除掉割边之后,形成了k个连通分支,就是k-割。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就不连通了。
对于每一个
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的独立割计算出来之后,丢掉最重的,剩下的就是根据分别计算独立割可以得到的最小的多路切割。
下图是一个k=3的割,可以看到,把e1-e5移除掉之后,S1,S2,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=1∑kw(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=1∑kω(ci)−max(ci)≤(1−k1)i=1∑kω(ci)≤(1−k1)i=1∑kw(Ai)=2(1−k1)ω(A)
c就是丢弃k个最小割之中最重的,
(
1
−
1
k
)
(1-\frac{1}{k})
(1−k1)是减掉k个最小割的和的1/k,也就是K个最小割加起来求一个平均值,那么最终的最小割一定会大于这个平均值,所以有c的权值小于等于
c
i
c_i
ci中的权值之和乘
(
1
−
1
k
)
(1-\frac{1}{k})
(1−k1)。上一段的翻译中提到,
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)
(1−k1)∑i=1kω(ci)≤(1−k1)∑i=1kω(Ai)。最后的等于号的成立在于4.4.1的公式
根据这个式子,左边的 ω ( C ) \omega(C) ω(C)就是根据这个基于贪心和独立割的算法来得到的近似解,右边的 ω ( A ) \omega(A) ω(A)就是这个问题的最优解。那么,根据上式的推导就可以得到他们之间的比值是 2 ( 1 − 1 k ) 2(1-\cfrac1k) 2(1−k1)
该算法的一个紧密示例由以下图表给出:2k个顶点,包括一个k圈和圈中一个分别连接到每个顶点的相异终点(也就是圈中的一个点会连接圈外的一个点,而圈外的那个点和圈中的其他点是没有边相连的)。 圈的边的权重为1,边连接到圈的终点的权重为2-ε,其中小参数ε> 0,意思应该是ε趋向0。
而实际的最优解是割掉中间那个环,也就是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
(6−3ϵ)/4=1.5−0.75ϵ<2(1−1/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=A1∪⋅⋅⋅∪Ak,并且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=1∑kw(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
(k−1)(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 − ε),生成的连通分支为
因篇幅问题不能全部显示,请点此查看更多更全内容