首页 > 其他 > 详细

网络流复习

时间:2020-12-12 18:14:47      阅读:27      评论:0      收藏:0      [点我收藏+]

最大流基础知识

下面一切基础知识都是为求出最大流而服务的。

以 定义( \(\text D\) )和 引理、定理、结论、推论( \(\text T\) )的形式呈现。

  1. \(\text D\) )网络 Network :网络是一个有向图 \(G=(V,E)\) ,对于每一条边,有一个容量 capacity \(c(u,v)\) 。同时在图中还有两个特殊点 \(s,t\) ,一个叫源点一个叫汇点。

    注意在网络中我们不考虑负容量,我们总认为 \(c(u,v)\ge 0\)

    注意在网络中我们不考虑反向边,如果有反向边我们也可以拆开,就没有反向边了:

    技术分享图片

  2. \(\text D\) )可行流 Flow :一个流给每一条边提供了一个函数值 \(f(u,v)\) ,当满足如下条件时,它是可行流:

    性质一:容量限制 \(\forall (u,v)\in E,0\le f(u,v)\le c(u,v)\)

    性质二:流量守恒 \(\forall v\in V,\sum_{(u,v)\in E}f(u,v)=\sum_{(v,w)\in E}f(v,w)\)

    网络可以想象为一个排水系统(此处应有 [NOIP2020] ),其中 \(s\) 为一个大水库, \(t\) 就是一个大池塘,我们可以通过带有每秒流量上限的管道将水从 \(s\) 运输到 \(t\) 。一个流的两个限制等价于水管不能爆,且中间的节点不能存水。

    我们可以接着定义可行流的流量 \(|f|\)\(s\) 流出的净流,也即:

    \[|f|=\sum_{(s,u)\in E}f(s,u)-\sum_{(v,s)\in E}f(v,s) \]

    此时我们就知道了最大流为网络上的最大可行流

  3. \(\text D\) )残留网络 Residual Network :这是对于原图 \(G\)\(G\) 上的任意可行流 \(f\) 定义的。我们定义 \(G_f=(V_f,E_f)\) 为:

    • \(V_f=V\)
    • \(E_f=\{(u,v)|(u,v)\in E\lor (v,u)\in E\}\)
    • \(c_f(u,v)=\begin{cases}c(u,v)-f(u,v)&(u,v)\in E\\f(v,u)&(v,u)\in E\end{cases}\)

    可以发现,我们在残留网络中引入了反向边,但是仍然强调原图中是没有反向边的

    当然,可以发现残留网络也是一个网络,所以说上面也有可行流。于是就有了下面的定义及性质:

  4. \(\text D\) )流的加法:对于 \(G\) 上的可行流 \(f\)\(G_f\) 上的可行流 \(f‘\) ,我们定义 \(g=f+f‘\) 在原图上的流为

    \[g(u,v)=f(u,v)+f‘(u,v)-f‘(v,u) \]

    此时反向边可以理解为 " 退流 " 。虽然直观上很好理解,但我们仍有必要证明一下 \(g\) 也是可行流:

  5. \(\text T\) )对于 \(G\) 上的可行流 \(f\)\(G_f\) 上的可行流 \(f‘\)\(g=f+f‘\) 是原图的可行流:

    性质一

    根据可行流的定义,对于原图上任意的 \((u,v)\in E\),有:

    \[\begin{cases} 0\le f‘(u,v)\le c(u,v)-f(u,v)\\0\le f‘(v,u)\le f(u,v) \end{cases} \]

    根据第二条有 \(f(u,v)-f‘(v,u)\ge 0\) ,再根据 \(f‘(u,v)\ge 0\) 可以推出 \(g(u,v)\ge 0\)

    根据第一条有 \(f(u,v)+f‘(u,v)\le c(u,v)\) ,再根据 \(f‘(v,u)\ge 0\) 可以推出 \(g(u,v)\le c(u,v)\)

    可知流 \(g\) 满足性质一。

    性质二

    对于 \(f‘\) 有:

    \[\forall u\in V,\sum_{(v,u)\in E}f‘(v,u)+\sum_{(u,w)\in E}f‘(w,u)=\sum_{(u,w)\in E}f‘(u,w)+\sum_{(v,u)\in E}f‘(u,v) \]

    移项之后有:

    \[\forall u\in V,\sum_{(v,u)\in E}f‘(v,u)-f‘(u,v)=\sum_{(u,w)\in E}f‘(u,w)-f‘(w,u) \]

    然后加到 \(f\) 上面就能发现 \(g\) 也是守恒的。

    综上可知 \(g\) 是可行流。

    这个性质告诉我们,如果 \(G_f\) 上面有 \(|f‘|>0\) 的可行流 \(f‘\),那么 \(f\) 一定不是 \(G\) 的最大流

  6. \(\text D\) )增广路 Augmenting Path :增广路定义为任意网络上的一条从 \(s\)\(t\) 的简单路径 \(P\) 。定义增广路的容量 \(\delta(P)=\min\{c(u,v)|(u,v)\in P\}\)

    本质上增广路就是一种最简单的可行流。结合性质 5 可以发现,最大流 \(f\)\(G\) 上也不会有 \(\delta(P)>0\) 的增广路

    此时困扰我们的问题就是:对于 \(G\) 上的可行流 \(f\) ,如果 \(G_f\) 上不存在 \(\delta>0\) 的增广路, \(f\) 是否是最大流?我们还无法断言,因为有可能我们会陷入局部最优解。为了解决这个问题,我们将要引入割这个概念。

  7. \(\text D\)鸽咕咕咕 割 Cut :网络上的一个割定义为对于点集 \(V\) 的一个划分 \([S,T]\) 。它们需要满足:

    性质一: \(S\cup T=V,S\cap T=\varnothing\)

    性质二:\(s\in S,t\in T\)

    注意 \(S\)\(T\) 并不需要各自内部联通。因此一个网络的割的划分数为 \(2^{n-2}\)

  8. \(\text D\) )割的容量:定义 \(G\) 的一个割 \([S,T]\) 的容量为:

    \[c(S,T)=\sum_{u\in S}\sum_{v\in T}[(u,v)\in E]c(u,v) \]

    为了方便,我们也可以认为 \((u,v)\not \in E\Rightarrow c(u,v)=0\) 。因此上式可以简化。

    此时我们知道了最小割为网络上的最小容量割

  9. \(\text D\) )割的流量:定义 \(G\) 的一个割 \([S,T]\) 对于 \(G\)任意一个可行流 \(f\) 的流量为:

    \[f(S,T)=\sum_{u\in S}\sum_{v\in T}f(u,v)-\sum_{u\in S}\sum_{v\in T}f(v,u) \]

    注意这里的定义是不对称的。割的容量只考虑正向边,而割的流量同时考虑正向和反向边

    并且,显然有 \(f(S,T)\le c(S,T)\)

    仔细思考我们不难提出如下猜想:是否有 \(|f|=f(S,T)\)

    感性理解是很自然的,对于任意一个割,我们将 \(S\) 分为与 \(s\) 相通的 \(S_c\) 和不相通的 \(S_c‘\) 。那么 \(S_c‘\) 的部分流量守恒,而 \(S\) 流到 \(T\) 流必然会经过 \(S_c\)\(T\) 的边。下面我们将一步步证明这一点。

  10. \(\text D\) )任意点集的流量:定义 \(G\) 上的任意两个点集 \(X,Y\) 对于任意一个可行流 \(f\) 的流量为:

    \[f(X,Y)=\sum_{u\in X}\sum_{v\in Y}f(u,v)-\sum_{u\in X}\sum_{v\in Y}f(v,u) \]

    这个定义存在如下性质:

  11. \(\text T\) )对于 \(G\) 上的任意两个点集 \(X,Y\) 和任意一个可行流 \(f\)\(f(X,Y)\) 存在如下性质:

    性质一

    \[f(X,X)=0 \]

    证明略。

    性质二

    \[f(X,Y)=-f(Y,X) \]

    证明略。

    性质三

    \(Y\cap Z=\varnothing\) 时,存在:

    \[f(X,Y\cap Z)=f(X,Y)+f(X,Z) \]

    这是因为 \(X\) 流向 \(Y\) 的流量和 \(X\) 流向 \(Z\) 的流量一定不会有重复计算。

  12. \(\text T\) )割的流量与流的流量:对于 \(G\) 上的任意一个割 \([S,T]\) 和任意一个可行流 \(f\) ,存在性质:\(|f|=f(S,T)\)

    证明:

    首先有 \(|f|=f(\{s\},V)\)

    \(f(S,V)=f(\{s\},V)+f(S-\{s\},V)\)

    注意到 \(S-\{s\}\) 里面的点都满足流量守恒,因此有 \(f(S-\{s\},V)=0\)

    于是 \(|f|=f(S,V)\)

    接着考虑 \(f(S,V)=f(S,S\cup T)=f(S,S)+f(S,T)=f(S,T)\)

    因此 \(|f|=f(S,T)\)

    可以发现我们的猜想中已经把证明口胡过一遍了

    结合定义 9 中提到的,有 \(|f|\le c(S,T)\) 。下面我们将要证明最大流最小割定理!

  13. \(\text T\)最大流最小割定理 Maximum-flow-minimum-cut Theorem :对于网络 \(G\)\(G\) 上的一个可行流 \(f\),以下三个命题是等价的:

    • ( 1 ): \(f\) 是最大流。
    • ( 2 ): \(G_f\) 上不存在增广路。
    • ( 3 ):\(\exists [S,T],|f|=c(S,T)\)

    证明:

网络流复习

原文:https://www.cnblogs.com/crashed/p/14124220.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!