南师大算法笔记-网络流(上)

定义1-网络

一个流网络(flow network),简称网络,是一个简单的加权的简单有向图 G=(V,E,C),边(u,v ) ∈ E \in E E,的权值c(u,v)>0,并称为这条边的容量。当且仅当c(u,v)=0时,(u,v) ∉ E \not\in E E。此外,图中有两个点分别是源点和汇点,记为s和t。
在这里插入图片描述

定义2-流

网络G=(V,E,C)上的一个流f,就是给G中的每一个边(u,v)赋一个实数f(u,v)并满足:

  1. 每个边的流不能超过他的容量,即 0 ≤ f ( u , v ) ≤ c ( u , v ) 0\leq f(u,v)\leq c(u,v) 0f(u,v)c(u,v)
  2. 除了源点S和汇点T外,其他节点的出流量等于入流量,也就是 U ∈ V − { S , T } U\in V-\{S,T\} UV{S,T}
    ∑ u ∈ U f ( u , v ) = ∑ u ∈ U f ( v , u ) \sum_{u\in U}f(u,v)=\sum_{u\in U}f(v,u) uUf(u,v)=uUf(v,u)
流网络、流、网络流之间的区别

流网络、流、网络流,看起来极为相似,很多资料中也互相混用,但三者还是有所区别。网络流是指所有容量都是正数的st-网;流代表个体,特指某一条边上的流量;网络流代表整体,表示流网络上所有流的集合。此外,网络流还有另一个含义,指用流网络的模型找出解决问题的方法。网络流的含义究竟是集合还是方法,需要根据具体的上下文而定。通常来讲,这些概念在实际问题中非常直白,不必太过纠结。

定义3-净出流

源点的流出流量-源点的流入流量并且将其标注为 ∣ f ∣ |f| f
∣ f ∣ = ∑ v ∈ V f ( s , v ) − ∑ v ∈ V f ( v , s ) |f|=\sum_{v\in V }f(s,v)-\sum_{v\in V }f(v,s) f=vVf(s,v)vVf(v,s)

定义4-规范流

如果边(u,v)和(v,u)上都有非零的流,这样也就是说,这个节点有流入的流,也有流出的流,我们把这样的流称之为非规范流。我们可以将一个方向的流量化为零,也就是说这个节点只有流入的或者流出的流,我们把这个过程称之为规范化,并将这个节点上的流称之为规范流

定义5-相对流

边(u,v)上的相对流定义如下:
ϕ ( u , v ) = f ( u , v ) − f ( v , u ) \phi(u,v)=f(u,v)-f(v,u) ϕ(u,v)=f(u,v)f(v,u)
G中所有边的相对流组成一个相对流 ϕ \phi ϕ
来几个说明:

  1. 相对流的引入是为了数学推导的方便,就如代数上引入正负一样。
  2. ϕ ( u , v ) \phi(u,v) ϕ(u,v)为从u,v的净流量,可正可负,但是 ϕ ( u , v ) = − ϕ ( v , u ) \phi(u,v)=-\phi(v,u) ϕ(u,v)=ϕ(v,u)
  3. ∑ v ∈ V ϕ ( v , u ) = 0 \sum_{v\in V}\phi(v,u)=0 vVϕ(v,u)=0 流量守恒,一个节点的所有的相对流之和为0。
  4. 净出流 ∣ f ∣ |f| f的值可以表示为 ∣ f ∣ = ∑ v ∈ V ϕ ( s , v ) |f|=\sum_{v\in V}\phi(s,v) f=vVϕ(s,v)
规范流和相对流的关系

特别提醒,本段的f(u,v) 表示规范流f。

  1. 如果规范流f(u,v)>0,那么 ϕ ( u , v ) = f ( u , v ) \phi(u,v)=f(u,v) ϕ(u,v)=f(u,v),否则, ϕ ( u , v ) = − f ( u , v ) \phi(u,v)=-f(u,v) ϕ(u,v)=f(u,v)
  2. ϕ \phi ϕ计算f , f ( u , v ) = m a x { 0 , ϕ ( u , v ) } f(u,v)=max\{0,\phi(u,v)\} f(u,v)=max{0,ϕ(u,v)}(就是说,相对流是负的,那么在规范流中一定是被化为0的边)

定义6 -最大流

网络最大流问题是在给定的一个网络流G=(V,E,C),找出最大值的f 或者相对流的问题

定义7-集合间的流量

假设X和Y分别是网络G=(V,E,C)的两个顶点的集合,而f是G上的一个流。
从集合X到Y的流量定义为f(X,Y)= ∑ x ∈ X ∑ y ∈ Y f ( x , y ) \sum_{x\in X}\sum_{y\in Y}f(x,y) xXyYf(x,y)
从集合X到Y的相对流量定义为 ϕ ( X , Y ) = ∑ x ∈ X ∑ y ∈ Y ϕ ( x , y ) \phi(X,Y)=\sum_{x\in X}\sum_{y\in Y}\phi(x,y) ϕ(X,Y)=xXyYϕ(x,y)

引理1

设f是网络G=(V,E,C)上的一个流。而 ϕ \phi ϕ是对应的相对流,又设X,Y,Z 分别是网络中三个顶点的集合,则如下等式成立。
ϕ ( X , X ) = 0 \phi(X,X)=0 ϕ(X,X)=0

ϕ ( X , Y ) = − ϕ ( Y , X ) \phi(X,Y)=-\phi(Y,X) ϕ(X,Y)=ϕ(Y,X)
此外,如果 X ∪ Y = ∅ X\cup Y=\varnothing XY=,又如下公式:
ϕ ( X ∪ Y , Z ) = ϕ ( X , Z ) + ϕ ( Y , Z ) \phi(X\cup Y,Z)=\phi(X,Z)+\phi(Y,Z) ϕ(XY,Z)=ϕ(X,Z)+ϕ(Y,Z)
ϕ ( Z , X ∪ Y ) = ϕ ( Z , X ) + ϕ ( Z , Y ) \phi(Z,X\cup Y)=\phi(Z,X)+\phi(Z,Y) ϕ(Z,XY)=ϕ(Z,X)+ϕ(Z,Y)

割及其容量(cut)

网络中的一个割(S,T)就是将顶点集合划分为两个不相交的子集S和T,使得 s ∈ S , t ∈ T s\in S,t \in T sS,tT。从S中的点到T中的顶点的边,称其为**穿越边(cross edge)**割(S,T)的容量就是所有穿越边的容量之和。即
c ( S , T ) = ∑ u ∈ S ∑ v ∈ T c ( u , v ) c(S,T)=\sum_{u\in S}\sum_{v\in T} c(u,v) c(S,T)=uSvTc(u,v)
来举个例子吧!如下图所示,求割(S,T)的容量:
在这里插入图片描述c(S,T)=5+3=8 (只包含从集合S到集合T的边)

在这里插入图片描述

引理2 源点的净出流和任意割的相对流相等

设f是网络G=(V,E,C)上的一个流, ϕ \phi ϕ是对应的相对流,(S,T)是任意一个割,那么 ∣ f ∣ = ϕ ( S , T ) |f|=\phi(S,T) f=ϕ(S,T)
【注】这里说的流是不是指的这个网络中的所有流的总和?如果是一个单一的流,又怎么会和任意的割产生关系呢? 这是值得思考的。 这里只是用两个符号f和 ϕ \phi ϕ代替一个操作符,不指向任何具体的边。
证明(prove):
从穿过这个割的相对流量来推导。(相对就是正减负嘛)
ϕ ( S , T ) = ϕ ( S , T ) + ϕ ( S , S ) = ϕ ( S , T ∪ S ) = ϕ ( S , V ) ( V 是 所 有 顶 点 的 集 合 ) = ϕ ( { S − s } ∪ { s } , V ) ( s 指 网 络 G 的 源 点 ) = ϕ ( S − s , V ) + ϕ ( s , V ) ( 由 于 V 中 包 含 所 有 节 点 , 所 以 首 项 为 0 ) = ϕ ( s , V ) ( 相 对 流 的 定 义 , 流 出 − 流 入 , 正 好 是 净 流 量 ) = ∣ f ∣ \begin{aligned} \phi(S,T) & =\phi(S,T)+\phi(S,S) \\ & =\phi(S,T \cup S) \\ & =\phi(S,V) (V是所有顶点的集合)\\ & =\phi(\{S-s\} \cup \{s\} ,V) (s指网络G的源点)\\ & =\phi(S-s,V)+ \phi(s,V)(由于V中包含所有节点,所以首项为0)\\ & =\phi(s,V)(相对流的定义,流出-流入,正好是净流量) \\ &=|f| \end{aligned} ϕ(S,T)=ϕ(S,T)+ϕ(S,S)=ϕ(S,TS)=ϕ(S,V)(V)=ϕ({Ss}{s},V)(sG)=ϕ(Ss,V)+ϕ(s,V)(V0)=ϕ(s,V)()=f

引理3 汇点的净入流和任意割的相对流相等

证明方法和引理2类似,我们只要把T分解就可以了
ϕ ( S , T ) = ϕ ( S , T ) + ϕ ( T , T ) = ϕ ( S ∪ T , T ) = ϕ ( V , T ) ( V 是 所 有 顶 点 的 集 合 ) = ϕ ( V , { T − t } ∪ { t } ) ( s 指 网 络 G 的 源 点 ) = ϕ ( V , T − t ) + ϕ ( V , t ) ( 由 于 V 中 包 含 所 有 节 点 , 所 以 首 项 为 0 ) = ϕ ( V , t ) ( 相 对 流 的 定 义 , 流 出 − 流 入 , 正 好 是 净 流 量 ) = ∣ f ∣ \begin{aligned} \phi(S,T) & =\phi(S,T)+\phi(T,T) \\ & =\phi(S \cup T,T) \\ & =\phi(V,T) (V是所有顶点的集合)\\ & =\phi(V,\{T-t\} \cup \{t\} ) (s指网络G的源点)\\ & =\phi(V,T-t)+ \phi(V,t)(由于V中包含所有节点,所以首项为0)\\ & =\phi(V,t)(相对流的定义,流出-流入,正好是净流量) \\ &=|f| \end{aligned} ϕ(S,T)=ϕ(S,T)+ϕ(T,T)=ϕ(ST,T)=ϕ(V,T)(V)=ϕ(V,{Tt}{t})(sG)=ϕ(V,Tt)+ϕ(V,t)(V0)=ϕ(V,t)()=f

引理4 源点净出流或者汇点净入流恒小于等于任意割的容量

设f是网络G=(V,E,C)上的一个流, ϕ \phi ϕ是对应的相对流,(S,T)是任意一个割,那么 ∣ f ∣ ≤ c ( S , T ) |f|\leq c(S,T) fc(S,T)
证明(prove):
由引理2 可得,
∣ f ∣ = ϕ ( S , T ) = ∑ u ∈ S , v ∈ T ϕ ( u , v ) = ∑ u ∈ S , v ∈ T [ f ( u , v ) − f ( v , u ) ] ≤ ∑ u ∈ S , v ∈ T f ( u , v ) ( 当 f 是 规 范 流 时 , 等 号 成 立 ) ≤ ∑ u ∈ S , v ∈ T c ( u , v ) ( 当 f 流 充 满 容 量 时 , 等 号 成 立 ) \begin{aligned} |f|&=\phi(S,T)\\ &=\sum_{u\in S,v\in T} \phi(u,v)\\ &=\sum_{u\in S,v\in T} [f(u,v)-f(v,u)]\\ &\leq\sum_{u\in S,v\in T} f(u,v) (当f是规范流时,等号成立)\\ &\leq \sum_{u\in S,v\in T} c(u,v)(当f流充满容量时,等号成立) \end{aligned} f=ϕ(S,T)=uS,vTϕ(u,v)=uS,vT[f(u,v)f(v,u)]uS,vTf(u,v)(f)uS,vTc(u,v)(f)
综上,源不等式的以证明。

定义8 剩余网络

设f是网络G=(V,E,C)上的一个流, ϕ \phi ϕ是对应的相对流,对应于f的剩余网络 G f = ( V , E f , C f ) G_f=(V,E_f,C_f) Gf=(V,Ef,Cf)定义为如下的一个流网络:

  1. 与原网络G有相同的顶点集合V,相同的源点s和汇点t。
  2. 对于边(u,v),它的剩余容量定义如下 C f ( u , v ) = c ( u , v ) − ϕ ( u , v ) C_f(u,v)=c(u,v)-\phi(u,v) Cf(u,v)=c(u,v)ϕ(u,v)
  3. E f E_f Ef包括所有剩余容量大于零的边,即 E f = { ( u , v ) ∣ C f ( u , v ) > 0 } E_f=\{(u,v)|C_f(u,v)>0\} Ef={(u,v)Cf(u,v)>0}

下面我们计算下剩余网络:
在这里插入图片描述
ϕ ( s , v 1 ) = 10 − 0 = 10 \phi(s,v1)=10-0=10 ϕ(s,v1)=100=10
ϕ ( s , v 2 ) = 4 − 0 = 4 \phi(s,v2)=4-0=4 ϕ(s,v2)=40=4
ϕ ( v 1 , v 2 ) = 5 − 0 = 5 \phi(v1,v2)=5-0=5 ϕ(v1,v2)=50=5
ϕ ( v 1 , v 3 ) = 5 − 0 = 5 \phi(v1,v3)=5-0=5 ϕ(v1,v3)=50=5
ϕ ( v 2 , v 3 ) = 4 − 0 = 4 \phi(v2,v3)=4-0=4 ϕ(v2,v3)=40=4
ϕ ( v 2 , v 4 ) = 5 − 0 = 5 \phi(v2,v4)=5-0=5 ϕ(v2,v4)=50=5
ϕ ( v 3 , v 4 ) = 0 − 0 = 0 \phi(v3,v4)=0-0=0 ϕ(v3,v4)=00=0
ϕ ( v 3 , v 5 ) = 9 − 0 = 9 \phi(v3,v5)=9-0=9 ϕ(v3,v5)=90=9
ϕ ( v 4 , v 5 ) = 5 − 0 = 5 \phi(v4,v5)=5-0=5 ϕ(v4,v5)=50=5


C f ( s , v 1 ) = 15 − 10 = 5 C_f(s,v1)=15-10=5 Cf(s,v1)=1510=5
C f ( v 1 , s ) = 0 − ( − 10 ) = 10 C_f(v1,s)=0-(-10)=10 Cf(v1,s)=0(10)=10

C f ( s , v 2 ) = 4 − 4 = 0 C_f(s,v2)=4-4=0 Cf(s,v2)=44=0
C f ( v 2 , s ) = 0 − ( − 4 ) = 4 C_f(v2,s)=0-(-4)=4 Cf(v2,s)=0(4)=4

C f ( v 1 , v 2 ) = 8 − 5 = 3 C_f(v1,v2)=8-5=3 Cf(v1,v2)=85=3
C f ( v 2 , v 1 ) = 3 − ( − 5 ) = 8 C_f(v2,v1)=3-(-5)=8 Cf(v2,v1)=3(5)=8

C f ( v 1 , v 3 ) = 12 − 5 = 7 C_f(v1,v3)=12-5=7 Cf(v1,v3)=125=7
C f ( v 3 , v 1 ) = 0 − ( − 5 ) = 5 C_f(v3,v1)=0-(-5)=5 Cf(v3,v1)=0(5)=5

C f ( v 2 , v 3 ) = 7 − 4 = 3 C_f(v2,v3)=7-4=3 Cf(v2,v3)=74=3
C f ( v 3 , v 2 ) = 9 − ( − 4 ) = 13 C_f(v3,v2)=9-(-4)=13 Cf(v3,v2)=9(4)=13

C f ( v 2 , v 4 ) = 6 − 5 = 1 C_f(v2,v4)=6-5=1 Cf(v2,v4)=65=1
C f ( v 4 , v 2 ) = 0 − ( − 5 ) = 5 C_f(v4,v2)=0-(-5)=5 Cf(v4,v2)=0(5)=5

C f ( v 3 , v 4 ) = 0 − 0 = 0 C_f(v3,v4)=0-0=0 Cf(v3,v4)=00=0
C f ( v 4 , v 3 ) = 2 − 0 = 2 C_f(v4,v3)=2-0=2 Cf(v4,v3)=20=2

C f ( v 3 , v 5 ) = 16 − 9 = 7 C_f(v3,v5)=16-9=7 Cf(v3,v5)=169=7
C f ( v 5 , v 3 ) = 0 − ( − 9 ) = 9 C_f(v5,v3)=0-(-9)=9 Cf(v5,v3)=0(9)=9

C f ( v 4 , v 5 ) = 5 − 5 = 0 C_f(v4,v5)=5-5=0 Cf(v4,v5)=55=0
C f ( v 5 , v 4 ) = 0 − ( − 5 ) = 5 C_f(v5,v4)=0-(-5)=5 Cf(v5,v4)=0(5)=5

选择 C f C_f Cf大于零的项,从重新绘制剩余网络图:
在这里插入图片描述

边的剩余流量的分析说明:

C f ( u , v ) = c ( u , v ) − ϕ ( u , v ) = c ( u , v ) − [ f ( u , v ) − f ( v , u ) ] = [ c ( u , v ) − f ( u , v ) ] + f ( v , u ) \begin{aligned}C_f(u,v)&=c(u,v)-\phi(u,v)\\ &=c(u,v)-[f(u,v)-f(v,u)]\\ &=[c(u,v)-f(u,v)]+f(v,u) \end{aligned} Cf(u,v)=c(u,v)ϕ(u,v)=c(u,v)[f(u,v)f(v,u)]=[c(u,v)f(u,v)]+f(v,u)
上式表明,剩余容量有两部分组成:

  1. (边的容量-流)之后的剩余容量
  2. 将流f(v,u)从u 推回到v去 产生的相对容量

【注】如果 ( u , v ) ∈ E f (u,v)\in E_f (u,v)Ef,必有 ( u , v ) ∈ E (u,v)\in E (u,v)E或者 ( v , u ) ∈ E (v,u)\in E (v,u)E 可见 ∣ E f ∣ ≤ 2 ∣ E ∣ |E_f|\leq 2|E| Ef2E,这里的绝对值可以看作边数,也就是剩余网络的边数小于等于原网络的边数,则构造剩余网络的时间复杂度时 O ( ∣ V ∣ + ∣ E ∣ ) O(|V|+|E|) O(V+E) ,此处不懂怎末计算的时间复杂度,先存档。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值