网络流之最大流

流网络

流网络 G=(V,E) 是一个。对于图中的每条边 (u,v)E 有一个的容量(值)c(u,v)0。并且,若边集合 E 中有边 (u,v),则流网络中一定不存在其反向边 (v,u)。此外,流网络中可议有环,但不允许有自环。特殊的,若图中有反向边,则可以化为如下形式(1 号边拆为 2,3 号边)。

在流网络中,我们分辨出两个特殊的节点:源节点 s 和 汇点 t。对于 vV,都存在从 sv,再到 t 的路径(流网络是连通的)。并且,在流网络中,除了源节点外,每个节点都至少有一条入边。


 

可行流

对于一个流网络 G=(V,E),其容量函数为 c。则 G 的一个可行流(实值函数 f)需要满足以下两个条件。

1.容量限制。u,vV,有 0f(u,v)c(u,v)

2.流量守恒。u,vV{s,t},有 vVf(v,u)=vVf(u,v)

对于一个可行流 f,其流量的定义为 |f|=vVf(s,v)vVf(v,s)。通常,第二项为 0(残余网络不是)。此外,由定义易得一个流网络可能有无限个可行流。其中,流量最大的一个可行流被称为最大可行流(最大流)。


残余网络

对于一个流网络 G 和该流网络的一个可行流 f,有与该可行流相对应的残余网络 Gf

该残存网络的点集与原流网络的点集相同。而构成该残存网络的边不仅有原流网络中的边,还有原流网络中边的反向边。对于残余网络 Gf,其残存容量 cf(u,v) 的定义为:

cf(u,v)={c(u,v)f(u.v)(u,v)Ef(v,u)(v,u)E0else

例如,对于如下流网络和其的一个可行流:

它的残余网络为:

 1: 

fGf 的一个可行流,则 ff 也是 G 的一个可行流,且该可行流的流量 |ff|=|f|+|f|。其中 ff 是流 f 对流 f 的递增,(ff)(u,v)=f(u,v)+f(u,v)f(v,u) ((u,v)E)。 

 证明:

   首先证明其满足容量限制。因为 f(v,u)cf(v,u)=f(u,v),所以有

(ff)(u,v)=f(u,v)+f(u,v)f(v,u)

f(u,v)+f(u,v)f(u,v)

=f(u,v)0

   同时,还有

(ff)(u,v)=f(u,v)+f(u,v)f(v,u)

f(u,v)+f(u,v)

f(u,v)+cf(u,v)

=f(u,v)+c(u,v)f(u,v)

=c(u,v)

   故满足容量限制。其次证明流量守恒。因为 f,f遵守流量守恒性质,因此

vV(ff)(u,v)=vV(f(u,v)+f(u,v)f(v,u))

=vVf(u,v)+vVf(u,v)vVf(v,u)

=vVf(v,u)+vVf(v,u)vVf(u,v)

=vV(f(v,u)+f(v,u)f(u,v))

=vV(ff)(v,u)

   其增加流后的流量证明略。


增广路径

对于一个流网络 G 和其的一个可行流 f,增广路径 p 是残余网络 Gf 中一条从源点到汇点的

对于一条增广路径 p,能为每条边加上的最大流量为路径 p 的残余容量。其表达式为 cf(p)=min{cf(u,v)[(u,v)p]}


流网络的切割(割)

附:网络流之最小割 常见模型。

流网络 G=(V,E) 的一个割 (S,T) 把点集 V 分为了 ST=VS 两个集合,使得 sS,tT。定义某个割 (S,T) 的流量(净流量)为 f(S,T)=uSvTf(u,v)uSvTf(v,u)。定义割的容量 c(S,T)=uSvTc(u,v)。需要注意的是,割的容量只算 ST 的部分,而割的流量则还要算 TS 的部分(其定义的不对称性)。此外,最小割指最小切割容量。

 2: 

f 是流网络 G 的一个可行流,(S,T)G 的一个(任意)切割,则 f(S,T)=|f|

证明:

   为方便证明,我们定义如下函数:X,Y 是两个点集且并集为空,表达式f(X,Y)=uXvYf(u,v)uXvYf(v,u)。那么我们有:

   1.f(X,Y)=f(Y,X)

   2.f(X,X)=f(Y,Y)=0

   3.若还有一个点集 Zf(Z,XY)=f(Z,X)+f(Z,Y)

   因此,我们有

   f(S,T)+f(S,S)=f(S,ST)=f(S,V)

f(S,T)=f(S,V)f(S,S)

f(S,T)=f(S,V)

f(S,T)=f({s},V)+f(S{s},V)

   因为s,tS{s},故这些节点满足流量守恒,故后面一项为 0。因此,有

f(S,T)=f({s},V)=|f||f| 的定义式)

   证毕。

 3: 

流网络 G 中最大流的流量不超过 G 的任意割的容量。

证明:

   |f|=f(S,T)=uSvTf(u,v)uSvTf(v,u)

uSvTf(u,v)

uSvTc(u,v)

=c(S,T)c(S,T) 的定义式)

 

posted @   Code_quantum  阅读(71)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示