网络流算法总结1——网络流最大流概述

网络流中的一些概念

  1. 边(弧):在网络流问题中基本上所有的边都为有向边,所以在不加说明的情况下,文中出现的所有边都为有向边,有向边也成为弧,记为有序对 ( a , b ) (a,b) (a,b)
  2. 图:一堆点加上一堆边就是一张图,也就是说,图是边集加上点集,用 G = ⟨ V , E ⟩ G=\langle V,E\rangle G=V,E
  3. 路径:图中的一条路径就是一串相连的点,一条路径 v 1 , v 2 , ⋯ ⋯   , v n v_1,v_2,\cdots\cdots,v_n v1,v2,,vn满足 ∀ i ∈ [ 1 , n ] , v i ∈ V \forall i\in [1,n],v_i\in V i[1,n],viV ∀ i ∈ [ 1 , n ) , ( v i , v i + 1 ) ∈ E \forall i\in [1,n),(v_i,v_{i+1})\in E i[1,n),(vi,vi+1)E ( v i + 1 , v i ) ∈ E (v_{i+1},v_i)\in E (vi+1,vi)E
  4. 前向弧:一条路径 v 1 , v 2 , ⋯ ⋯   , v n v_1,v_2,\cdots\cdots,v_n v1,v2,,vn中,如果 ( v i , v i + 1 ) ∈ E (v_i,v_{i+1})\in E (vi,vi+1)E,则称 ( v i , v i + 1 ) (v_i,v_{i+1}) (vi,vi+1)为前向弧
  5. 后向弧:一条路径 v 1 , v 2 , ⋯ ⋯   , v n v_1,v_2,\cdots\cdots,v_n v1,v2,,vn中,如果 ( v i + 1 , v i ) ∈ E (v_{i+1},v_i)\in E (vi+1,vi)E,则称 ( v i , v i + 1 ) (v_i,v_{i+1}) (vi,vi+1)为后向弧
  6. 割:一个图中如果存在一个边集 E ′ E' E,使得删除 E ′ E' E中的边后,原图分为两个集合,且这两个集合没有任何连边,那么 E ′ E' E就称为图 G G G的一个割
  7. 边的容量:一条边所能承受的流量上界称为容量, ( u , v ) (u,v) (u,v)的容量用 C ( u , v ) C(u,v) C(u,v)表示,类似于水管的截面面积,水管的截面面积就是它所能承受的水流流量上界
  8. 割的容量:把图 G G G分为两个集合 S S S T T T的割中的所有边的流量之和记为 C ( S , T ) C(S,T) C(S,T),即 C ( S , T ) = ∑ u ∈ S , v ∈ T , ( u , v ) ∈ E C ( u , v ) C(S,T)=\sum\limits_{u\in S,v\in T,(u,v)\in E} C(u,v) C(S,T)=uS,vT,(u,v)EC(u,v)
  9. 流量:类似于容量,用 F ( u , v ) F(u,v) F(u,v)表示一条边的流量, F ( S , T ) F(S,T) F(S,T)表示一个割的流量
  10. 增广路: 一条路径,满足前向弧的流量严格小于容量,后向弧的流量大于 0 0 0
  11. 可行流:从源点出发,到汇点结束,所有边的流量未超过容量且除源点和汇点外,流入任意一点的流量等于流出这一点的流量(如果你学过高中物理中的电学,你可以把这个理解为基尔霍夫第一定律)
  12. 最大流:可行流中流量最大的流
  13. 最小割:把源点和汇点分成两个集合,容量最小的割
  14. 残余网络:对于任意的流 f f f,建立新图 G f G_f Gf满足连边方式相同,边的容量等于原边的容量减去流量(当然,如果新的边的容量为 0 0 0,去掉这条边也无所谓)

性质&定理证明

性质1

可行流的流量等于它的一个割的流量
证明:假设割将源点( V S V_S VS)和汇点( V T V_T VT)分为两个集合 S S S T T T,可行流流量为 F F F
∴ \therefore T = { V T } T=\{V_T\} T={VT}时, F ( S , T ) = ∑ ( x , V T ) ∈ E F ( x , V T ) = F F(S,T)=\sum\limits_{(x,V_T)\in E} F(x,V_T)=F F(S,T)=(x,VT)EF(x,VT)=F
∴ \therefore 假设当 T ⊊ T ′ T\subsetneq T' TT时成立
∴ \therefore T = T ′ T=T' T=T时,设 V P ∈ T V_P\in T VPT
       ∴   F ( S , T ) = F ( S ∪ { V P } , T ∖ V P ) − ∑ ( V P , x ) ∈ E , x ∈ T F ( V P , x ) + ∑ ( V P , x ) ∈ E , x ∈ S F ( V P , x ) = F ( S ∪ { V P } , T ∖ V P ) = F \therefore~F(S,T)=F(S\cup\{V_P\},T\setminus {V_P})-\sum\limits_{(V_P,x)\in E,x\in T} F(V_P,x)+\sum\limits_{(V_P,x)\in E,x\in S} F(V_P,x)=F(S\cup\{V_P\},T\setminus {V_P})=F  F(S,T)=F(S{VP},TVP)(VP,x)E,xTF(VP,x)+(VP,x)E,xSF(VP,x)=F(S{VP},TVP)=F

推论1

可行流的流量小于等于它的一个割的容量
证明:由性质1知,可行流的流量等于它的一个割的流量,小于等于这个割的容量

性质2

若残余网络中仍有增广路,那么可行流 F F F不是最大流
证明: ∵ \because 增广路的前向弧可以增加流量,后向弧可以减少流量
∴ F \therefore F F可以继续增大
∴ \therefore 可行流 F F F不是最大流

性质3

若残余网络中无增广路,则存在一个割,使得割的容量等于可行流的流量
证明: ∵ \because 残余网络中无增广路
∴ \therefore 原图中的每一条从源点到汇点的路径,都一定有一个前向弧的流量为容量或有一个后向弧的流量为 0 0 0
∴ \therefore 设集合 S S S为从源点出发,不经过流量为容量的前向弧和流量为 0 0 0的后向弧所能到达的所有点的集合, T = V ∖ S T=V\setminus S T=VS
∴ \therefore F = F ( S , T ) = ∑ u ∈ S , v ∈ T , ( u , v ) ∈ E F ( u , v ) = F=F(S,T)=\sum\limits_{u\in S,v\in T,(u,v)\in E} F(u,v)= F=F(S,T)=uS,vT,(u,v)EF(u,v)=前向弧总流量-后向弧总流量 = = =前向弧总容量 − 0 = -0= 0=前向弧总容量 = C ( S , T ) =C(S,T) =C(S,T)

性质4

对于一个可行流,存在一个它的割,使得割的容量等于可行流的流量,则这个可行流为最大流,且这个割为最小割
证明:设可行流的流量为 F F F,割的容量为 C C C
假设 C C C不是最小割的容量
∴ \therefore 存在一个割的流量为 C 0 C_0 C0,且 C 0 < C C_0<C C0<C
∵ F ⩽ C 0 \because F\leqslant C_0 FC0
∴ C ⩽ C 0 \therefore C\leqslant C_0 CC0,矛盾!
∴ \therefore 这个割为最小割
∴ F \therefore F F到达了流量的上界
∴ \therefore 这个可行流的最大流


特别注意,这个性质并不代表最大流等于最小割(虽然这是对的),因为我们并没有说明这样的割一定存在

最大流最小割定理

最大流(的流量)等于最小割(的容量)
证明:取图 G G G的最大流 F F F
∴ \therefore 根据性质2的逆否命题可知:残余网络中无增广路
∴ \therefore 根据性质3可知:存在一个割,使得割的容量等于最大流的流量
∴ \therefore 根据性质4可知:这个割为最小割
∴ \therefore 最大流等于最小割


这样,我们就完成了网络流中最重要!最重要!最重要! 的定理:最大流最小割定理,请大家一定记住这个定理,因为有时在解题过程中,我们需要使用最小割的方式来思考问题,最终通过最大流的算法解决
如果你难以理解我写的证明,那么你只要把这个定理的表述背下来即可(惊奇的发现表述和名称一样长耶!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值