Gomory-Hu Tree (最小割树)

风格不统一 提交于 2019-12-25 04:08:43

Gomory-Hu Tree (最小割树)

基本定义

割 cut

对于一张带权无向图G=(V,E)G=(V,E),定义一个割 (cut) 为两个集合S,TVS,T\in V,满足ST=,ST=VS\cap T = \emptyset, S\cup T = V。定义一条边为割边 (cut edge) 当且仅当它的两个端点分别在SS集合和TT集合内。定义一个割的容量 (capacity of a cut) 为所有的割边的边权的和。

定义s-t割 (s-t cut) 为满足sS,tTs\in S,t\in T的割。

流 flow

对于一张满足所有的边的容量c(u,v)c(u,v)(即uuvv这条边的边权)非负的带权有向图G=(V,E)G=(V,E),指定一个源点 (source)汇点 (sink),则定义它的一个流网络 (flow network) 为一个映射f:V×VRf:V\times V \to R,满足以下三个性质:

  1. f(u,v)c(u,v)f(u,v)\le c(u,v)
  2. f(u,v)=f(v,u)f(u,v)=-f(v,u)
  3. 对于任意us,utu\not= s, u\not = t,满足xVf(x,u)=xVf(u,x)\sum_{x\in V}f(x,u) = \sum_{x\in V} f(u,x)

最大流问题:找出一个从源点到汇点的可行流,使得该可行流的流量最大。

最大流最小割定理 max-flow min-cut theorem

最大流的流量等于最小割的容量。

符号 & 约定

对于G=(V,E)G=(V,E),令WWVV的一个子集,δ(W)\delta(W)表示所有恰好有一个端点在WW以内的的边构成的集合。

则我们也可以用一个满足sW,t∉Ws\in W, t\not\in Wδ(W)\delta (W)来表示一个sts-t割。我们用c(W)c(W)表示这个割的容量。

下文中均用f(u,v)f(u,v)表示u,vu,v的最大流流量(也是最小割容量)。

一些引理

a)

设对于某一张带权图GG,用f(u,v)f(u,v)表示从uuvv的最大流(也等于最小割),则有:f(u,v)min{f(u,w),f(v,w)}f(u,v) \ge \min \{ f(u,w),f(v,w) \}

b) symmetry

对于任意WVW\subseteq V,有c(W)=c(VW)c(W) = c(\complement_VW)

c) submodularity

对于任意的AV,BA,vVA\subseteq V, B \subseteq A, v\in V,有c(A{v})c(A)c(B{v})c(B)c(A \cup \{ v\}) - c(A) \ge c(B\cup\{v\}) - c(B)

推广:

  1. XVAX \subseteq \complement_V A,则有c(AX)c(A)c(BX)c(B)c(A\cup X) -c(A) \ge c(B\cup X)-c(B)
  2. 对于任意A,BVA,B\subseteq V,有c(A)+c(B)c(AB)+c(AB)c(A) + c(B) \ge c(A\cup B) + c(A\cap B)。证明:移项得到c(A)c(AB)c(AB)c(B)c(A) - c(A\cap B) \ge c(A\cup B)- c(B),令U=AB,V=B,X=AVBU=A\cap B, V=B,X=A\cap \complement_VB,套用推广1可以得证。

d) posimodularity

对于任意AV,BVA\subseteq V,B\subseteq V,有c(A)+c(B)c(AB)+c(BA)c(A) + c(B) \ge c(A - B) +c(B- A),这里的ABA-B定义为A(VB)A \cap ( \complement_V B)

证明:

c(A)+c(B)=c(A)+c(VB)c(AVB)+c(AVB)=c(BVA)+c(AB)=c(BA)+c(AB) c(A) +c(B) \\ = c(A) +c(\complement_V B) \\ \ge c(A\cup \complement_VB) + c(A\cap \complement_VB) \\ = c(B \cap \complement_V A ) + c(A-B) \\ = c(B-A) +c(A-B)

e)

δ(W)\delta (W)为一个s,ts,t的最小割,则对于任意u,vWu,v\in W,存在一个u,vu,v最小割δ(X)\delta (X)满足XWX\subseteq W

证明:

假设δ(X)\delta(X)为一个满足X,WX,W有交且不包含的u,vu,v最小割。下面不失一般性地只考虑sW,sX,uXs\in W,s\in X,u\in X的情况,因为其它情况都可以通过交换u,vu,v或者将XX变成VX\complement_V X的方式变成sW,sX,uXs\in W,s\in X,u\in X的情况。

情况1:t∉Xt\not \in X。则有c(W)+c(X)c(WX)+c(WX)c(W) + c(X) \ge c(W\cup X) + c(W\cap X)。由于uX,uWu\in X,u\in Wv∉Xv\not \in X,所以WXW\cap X是一个u,vu,v割,所以c(WX)c(X)c(W\cap X) \ge c(X)。而由于t∉X,t∉Wt\not\in X,t\not \in W,所以WXW\cup X是一个s,ts,t割,所以c(WX)c(W)c(W\cup X) \ge c(W)。由此可得c(W)+c(X)c(WX)+c(WX)c(W) + c(X) \le c(W\cup X) + c(W\cap X),故而c(W)=c(WX),c(X)=c(WX)c(W) = c(W\cup X),c(X)=c(W\cap X),所以XWX\cap W也是u,vu,v的最小割。

情况2:tXt\in X。则有c(W)+c(X)c(WX)+c(XW)c(W) + c(X) \ge c(W-X) + c(X-W)。因为XWX-W是一个s,ts,t割,所以c(XW)c(W)c(X-W) \ge c(W);又因为WXW-X是一个u,vu,v割,所以c(WX)c(X)c(W-X) \ge c(X)。故而得到c(WX)=c(X),c(XW)=c(W)c(W-X) = c(X),c(X-W) = c(W),所以WXW-X也是u,vu,v的最小割。

证毕。

Gomory-Hu Tree

定义

对于任意一张图GG,它的Gomory-Hu tree是一棵生成树TT,满足TT中每条边(u,v)(u,v),设割掉这条边之后得到的其中一个连通块是PP,则(u,v)(u,v)的边权为c(P)c(P),并且GG(u,v)(u,v)的最小割为δ(P)\delta(P)

构造算法

a)

我们维护VV的一个划分{S1,S2Sm}\{ S_1,S_2\cdots S_m\}和一棵以{S1,S2Sm}\{ S_1,S_2\cdots S_m\}作为点集的生成树TT,并用w(Si,Sj)w'(S_i,S_j)描述TT中连接Si,SjS_i,S_j的边的边权。我们要使TT始终满足:对于任意一条边(Si,Sj)(S_i,S_j),存在aSi,bSja\in S_i,b\in S_j满足f(a,b)=w(Si,Sj)f(a,b) = w'(S_i,S_j),并且所对应的最小割割开了TT上由(Si,Sj)(S_i,S_j)分开的两个子树中的点构成的两个点集。

最初,我们令划分为{V}\{V\}

找出一个Si2|S_i|\ge 2的集合,从这个集合中任取两个点x,yx,y,求出x,yx,y的最小割。考虑这个最小割中包含xx的点集XX与包含yy的点集YY,将SiS_i划分成Six=SiXS_i^x = S_i \cap XSiy=SiYS_i^y = S_i\cap Y,然后考虑原来的TT中与SiS_i相邻的点集SjS_j,如果SjXS_j \subseteq X则让SjS_jSixS_i^x连边,否则若SjYS_j \subseteq Y,就让SjS_jSiyS_i^y连边;根据前面的引理e),一定存在一个最小割使得SjS_j只与X,YX,Y中的一个有交;边的边权为原来的TT中的w(Si,Sj)w'(S_i,S_j)

实现上,求最小割的时候,考虑TT中删掉了SiS_i之后得到的那些子树,把每个子树缩成一个点,对于某个点xx与某个子树,xx与这棵子树缩成的点之间的边权为xx与这棵子树的所有点之间的边权的和,这样就可以得到一个满足SjS_j只与X,YX,Y中的一个有交的最小割。

这样迭代n1n-1次就可以求出Gomory-Hu Tree。

b)

假设现在要求SS这个点集的Gomory-Hu tree。任意选择两个点x,ySx,y\in S,求出x,yx,y的最小割δ(X)\delta(X)。在x,yx,y之间建边权为c(X)c(X)的边,然后将SS分为XXSX\complement_S X,递归下去求解即可。

性质

考虑x,yx,y两个点以及它们在TT上的路径经过的点{p1,p2pk}\{p_1,p_2\cdots p_k\}

由于引理a),我们有f(x,y)min{f(x,p1),f(p1,p2)f(pk1,pk),f(pk,y)}f(x,y) \ge \min \{ f(x,p_1),f(p_1,p_2) \cdots f(p_{k-1},p_k),f(p_k,y)\},也即是说f(x,y)f(x,y)大于等于它们在TT的路径上的边权最小值。

另一方面,根据定义,TT上将TT的点集分成PPVP\complement_V P两部分的那条边,其边权等于c(P)c(P)。所以,xxyy的路径上的每一条边所对应的割都是xyx-y割,所以x,yx,y的最小割可以达到min{f(x,p1),f(p1,p2)f(pk1,pk),f(pk,y)}\min\{ f(x,p_1),f(p_1,p_2) \cdots f(p_{k-1},p_k),f(p_k,y)\}

故而,GG中任意两点的最小割等于它们在TT之间的路径上的边权最小值。

参考资料

1 2

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!