首页 > 技术文章 > 网络流基本概念

fallingdust 2021-02-20 10:35 原文

首先最重要的,当然是了解一些信息: 网络(或者流网络,Flow Network)与 网络流(Flow)的概念。


网络

首先引用wiki定义

图论中,网络流(英语:Network flow)是指在一个每条边都有容量(Capacity)的有向图分配,使一条边的流量不会超过它的容量。通常在运筹学中,有向图称为网络。

简单来说,网络是个有向图 G=(V,E),这张图上每条边\((u,v)\in E\),都有各自的一个属性:容量(Capacity),也就是权值,这个属性代表的不是走过这条边带来的贡献,或者说价值,而是最大只能通过多少。

特殊的,当\((u,v)\notin E,c_{u,v}=0\)

同时,在一个网络中有两个特殊的点,源点(Source)s 和汇点(Sink)t。\(s,t\in V,(s\not=v)\)


流(flow)\(f_{u,v,}\)是定义在二元组\((u,v\in V)\)上的实数函数,表示\((u,v)\)这条边的流量,可以理解为这条边对整体的实际贡献,\(c_{u,v}-f_{u,v}\)表示剩余容量,整体网络的流量定义为:从源点S出发的流量总和(大小等于T的接受流量之和)。

\[∑ (S,v)∈E f(S,v) \]

而且流同时满足以下性质:

  • 1.量限制:对于每条边,流经该边的流量不得超过该边的容量,即\(f_{u,v}\le c_{u,v}\)
  • 2.对称性:每条边的流量与其相反边的流量之和为 0,即
  • 3.流守恒性:从源点流出的流量等于汇点流入的流量,即\(∀x\in V-\{s,t\},\Sigma _{(u,x)}f(u,v)=\Sigma _{x,v}\in f(u,x)=\Sigma _{(x,v)\in E} f(x,v)\)

那么此时我们就可以得到函数完整定义:

\[f(u,v) = \begin{cases} f(u,v), & (u,v)\in E \\ 0, & (u,v)\notin E,(v,u)\notin E \\ -f(u,v), &(v,u)\in E \end{cases} \]


网络流的几类问题

常见问题有三种:最大流,最小割,费用流,上下界网络流。


最大流

我们有一张图,要求从源点流向汇点的最大流量(可以有很多条路到达汇点),就是我们的最大流问题。


费用流(最小费用最大流)

最小费用最大流问题是这样的:每条边都有一个费用,代表单位流量流过这条边的开销。我们要在求出最大流的同时,要求花费的费用最小。


最小割

割其实就是删边的意思,当然最小割就是割掉x条边来让s跟t不互通。我们要求x1条边加起来的流量综合最小。这就是最小割问题。

推荐阅读