算法进阶课——1.1.1 网络流的基本概念

image-20210807031457384

1.1.1 网络流的基本概念


基本概念


问题 → \to 建图转化为网络流的模型 → \to 建图得到的最优解和原问题是否等价.

流网络

网络流是对于一个有向图来说的.

流网络是一个有向图(可以有环).

图是由一些点和有向边组成的,流网络中有两个特殊的点,一个叫源点 s s s,一个叫汇点 t t t.

流网络中的每一条边都有一个属性,叫做流网络的容量 c c c.

image-20210807031457384
图 1

图 1中的源点 S S S 应为源点 s s s,汇点 T T T 应为 汇点 t t t.

流网络可以比作一个河流问题:

  • 每个点都是河流的交汇点,每条边都是一条河;
  • 每条边的容量就代表这条河每秒流过的水的量是多少(或者河的宽度、深度之类).

流网络还可以想象成水管中运输水的模型:

  • 每条边可以想象成一条水管,容量为水管每秒最多流过的的单位水量.

源点有源源不断、无穷多的流量流出,可以想象为一个无穷大的水库.

汇点可以想象为大海,可以容纳无穷多的流量.

整个模型可以看作:

  • 源点让水,通过管道,源源不断地流向汇点的过程.

流网络可以记作 G = ( V , E ) G=(V,E) G=(V,E),即点集和边集.

为了简化问题,假定流网络中一定不存在反向边.

image-20210807032020855
图 2

图 2,因为对于有反向边的图,可以在中间添加一个点,等价地变成没有反向边.

如果一条边不存在,则定义其容量 c ( u , v ) = 0 c(u,v)=0 c(u,v)=0.

可行流

对于每一个流网络而言,考虑它任意一个可行流.

可行流一般用 f f f 来表示,指指定每一条边的流量,或者每个水管每秒的水流速率,就是每条边自行给它设定一个值,只要满足两个条件,它就是一个可行的流

  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 s s 与汇点 t t t 外,其余所有点不存储流量,记作:
    ∀ x ∈ V / ( s , t ) ∑ ( V , x ) ∈ E f ( V , x ) = ∑ ( x , V ) ∈ E f ( x , V ) . \forall x \in V/(s,t)\quad \sum_{(V,x)\in E}f(V,x)=\sum_{(x,V)\in E}f(x,V). xV/(s,t)(V,x)Ef(V,x)=(x,V)Ef(x,V).

注意,上述描述不考虑反向边,因为有些文章说需要满足 3. f ( x , y ) = − f ( y , x ) f(x,y)=-f(y,x) f(x,y)=f(y,x),但是流量怎么会是负的呢?所以考虑反向边的话,定义不是很自洽.

可行流 f f f 表示的是一种方案.

可行流的流量值

每秒从源点流到汇点的流量的具体值(速率、流量值),将其定义为 可行流的流量值 ∣ f ∣ |f| f,换言之,可以将可行流的流量值定义为:

  1. 每秒从源点流出去的流量;
  2. 每秒流入汇点的流量.

一般用源点来定义,即每秒从源点流向其他点的总流量 减去 每秒从其他点流入源点的总流量,记为
∣ f ∣ = ∑ ( s , V ) ∈ E f ( s , V ) − ∑ ( V , s ) ∈ E f ( V , s ) . |f|=\sum_{(s,V)\in E}f(s,V)-\sum_{(V,s) \in E}f(V,s). f=(s,V)Ef(s,V)(V,s)Ef(V,s).

一般网络是不会往源点流入的,但可能有些特殊网络是会有这种情况的,为了更具一般性,在定义中都写上.

对于一个流网络来说,会有很多个可行流,每一个可行流都可以求一个流量值,一般说的最大流,指的是流量值最大的可行流,故其可以称为最大可行流.

视全部可行流的流量值为一个集合,求最大流 就可以类比为 在集合中求最大值.

image-20210807031457384
图 3

图 3中的源点 S S S 应为源点 s s s,汇点 T T T 应为 汇点 t t t.

图 3,红色字体为一种可行流,且显然为一种最大可行流,其可行流的流量值为 3 + 6 = 9 3+6=9 3+6=9.

流量是 0 0 0 的话,可以定义成可行流,也可以忽略它.

残留网络

残留网络是对于流网络的某一条可行流来说的,可行流不同的话,残留网络也不同.

残留网络(残存网络、残量网络)记为 G f G_f Gf ,与可行流一一对应 { f 1 → G f 1 , f 2 → G f 2 . \begin{cases}f_1 \to G_{f_1}, \\ f_2 \to G_{f_2}. \end{cases} { f1Gf1,f2Gf2.

残留网络是如何定义的呢?

  1. G f G_f Gf​ 的点集和原图的点集是一样的,记作 V f = V V_f=V Vf=V;​

  2. G f G_f Gf​​ 的边集不仅包含原图的所有边,同时包含 E E E​ 中的所有反向边,记作 E f = E + E 反 E_f=E+E_反 Ef=E+E;​

  3. 残留网络实际上也是一个流网络,其每条边的容量有两种情况:

    1. 对于原图中存在的边(正向边), c ′ ( u , v ) c'(u,v) c(u,v)​​​ 定义为可以增加的流量​,记作 c ( u , v ) − f ( u , v ) ( u , v ) ∈ E c(u,v)-f(u,v) \quad (u,v) \in E c(u,v)f(u,v)(u,v)E;​​​​​

    2. 对于原图的反向边, c ′ ( u , v ) c'(u,v) c(u,v)​​ 定义为可以退回去多少,相当于后悔,记作 f ( v , u ) ( v , u ) ∈ E f(v,u) \quad (v,u) \in E f(v,u)(v,u)E.​​

为什么会有退回去的情况?例子如下图 4 1 1 1 号点为源点 s s s 4 4 4 号点为汇点 t t t)所示:

如果用 容量为 1 1 1 的这条边的话,流量值并不是最大的,所以应该有退回去的操作.

这也能间接解释残留网络为什么要建反向边.

image-20210807031457384
图 4
  • 对于任意一个流网络 G G G 的可行流 f f f,都可以求出来一个残留网络 G f G_f Gf​,如下右图​​为左图的残留网络(红色边为反向边,黑色边为正向边):
image-20210807031457384
图 5

残留网络也是一个流网络,所以残留网络也是由可行流的概念,记残留网络 G f G_f Gf 的可行流为 f ′ f' f,讨论 原网络的可行流 f f f​ 与其的关系.

定理 f + f ′ f+f' f+f

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值