算法设计与分析课程复习笔记13——最大网络流

算法设计与分析课程复习笔记13——最大网络流

最大网络流

问题

  • 公路物流。边:公路,顶点:城市
  • 管道流体。边:管道,顶点:管道接头
  • 数据通讯网络。边:网络线,顶点:路由器

概念:源点s,汇点t,除源点和汇点外, 其他顶点的流入和流出相等
目标:从源点到汇点的最大流量

正式描述:
网络流图G=(V,E)
边的容量c(u,v) \geq 0
特殊顶点:源点s,汇点t
在源点和汇点之间,有经过一些中间顶点v的通路s→……→v→……→t
流函数:
容量约束,f(u,v) \leq c(u,v)
斜对称,f(u,v)=-f(v,u)
流守恒, v V f ( u , v ) = f ( u , V ) = 0 \displaystyle \sum_{v∈V}f(u,v)=f(u,V)=0 v V f ( v , u ) = f ( V , u ) = 0 \displaystyle \sum_{v∈V}f(v,u)=f(V,u)=0

流的抵消
在两个顶点间不需要相向对流,因为可以抵消,而斜对称性只是为了符号方便性。

最大流问题

f = v V f ( s , v ) = f ( s , V ) = f ( V , t ) |f|=\displaystyle \sum_{v∈V}f(s,v)=f(s,V)=f(V,t)

Ford-Fulkerson方法
思想:不断地增大流,直到达到流的最大值
通过剩余流和剩余流图实现

剩余流: c f ( u , v ) c_f(u,v) f=c(u,v)-f(u,v)
剩余流图: G f ( V , E f ) G_f(V,E_f) , E f = ( u , v ) V V : c f ( u , v ) > 0 E_f={(u,v) ∈ V*V: c_f(u,v) > 0}
(| E f E_f | \leq 2|E|:因为在剩余网络流图 E f E_f 中的边要么在E中, 要么反向)

增流通路

  • 增流通路p是剩余图中从源点s到汇点t的一条通路
  • 通过增流通路p,可以提高网络中的流, 即存在a > 0, 对于p上的边(u,v), 有f(u,v) + a \leq c(u,v)

Ford-Fulkerson(G,s,t)
 initialize flow f to 0
 while there exists an augmenting path p
  do augment flow f along p
 return f

不再有增流通路时,达到最大流

切割
一个切割将V分割成S,和T=V-S,使得s ∈ S,t ∈ T
流经切割的网络流f(S,T)是所有边(u,v), u ∈ S,v ∈ T的流f(u,v)之和
切割的网络流容量c(S,T)是所有边(u,v), u ∈ S, v ∈ T的流容量c(u,v)之和

引理:对于任何切割(S,T)和流f, 有f(S,T)=|f|
推论:网络流图G中的任意流f以任何切割的流容量为上限

最大流最小切割定理
对于网络流图
G=(V,E), s是源点, t是汇点, f是G中的流, 下面三个语句是等价的:
1. f是G中的最大流
2. 剩余流图 G f G_f 中不再有增流通路
3. 存在一个切割(S,T), |f| = c(S,T)

基本FordFulkerson算法
FordFulkerson(G,s,t)
 for each edge (u,v) ∈ E(G)
  do f[u,v] ← 0
    f[v,u] ← 0
 while there exists a path p from s to t in the residual network G f G_f
  do c f ( p ) c_f(p) ← min{ c f ( u , v ) c_f(u,v) :(u,v) is in p}
   for each edge (u,v) in p
    do f[u,v] ← f[u,v] + c f ( p ) c_f(p)
      f[v,u] ← -f[u,v]

example:
FF1
FF2
FF3
FF4
FF5
FF6
FF7
FF8
分析:

  • 如果容量为整数,|f|每次增流 \geq 1
  • 如果最大流为f*,那么增流次数 \leq |f*|,时间开销 O ( E f ) O(E|f*|)
  • 时间开销不是输入规模的多项式, 与|f*|有关, 不是|V|或|E|的函数
  • 如果容量是有理数, 可以换算为整数
  • 如果是无理数, 有可能不会终止

缺陷:如果出现以下情况,则需要重复999999次
FF9
E-K算法
先回顾FordFulkerson算法:
FordFulkerson(G,s,t)
1 for each edge (u,v) ∈ E(G)
2  do f[u,v] ← 0
3    f[v,u] ← 0
4 while there exists a path p from s to t in the residual network G f G_f
5  do c f ( p ) c_f(p) ← min{ c f ( u , v ) c_f(u,v) :(u,v) is in p}
6   for each edge (u,v) in p
7    do f[u,v] ← f[u,v] + c f ( p ) c_f(p)
8      f[v,u] ← -f[u,v]

E-K算法在FF算法的基础上进行修改,在剩余图中用广度优先搜索来计算第4行
增流通路p是剩余图中从s到t的最短路通路
运行开销: O ( V E 2 ) O(VE^2) (因为增流通路 O ( V E ) O(VE) )

更多的改进算法

  • Push-relabel algorithm O ( V 2 E ) O(V^2E)
  • The relabel-to-front algorithm O ( V 3 ) O(V^3)
  • The scaling Max-Flow algorithm O ( E 2 l o g C ) O(E^2logC) ,C为最大整数容量

最大二分图匹配
二分图G=(V,E)
V分成L和R,E中任意边的顶点分别在L和R中

匹配是E的一个子集M,对于V中的任何顶点v,M中至多有一条边以它为顶点
最大匹配即具有最大的势的匹配
最大匹配
最大匹配求解

  • 转换为最大流问题
  • 用F-F方法求解

从二分图G生成相应的网络流图G‘

  • 增添源点s和从s到L的边
  • 保持原来的E
  • 增添汇点t和从R到t的边
  • 边的容量为1

G’的最大流对应G的最大匹配
最大匹配2

参考:任课教师邱德红教授的课件

发布了25 篇原创文章 · 获赞 19 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42605042/article/details/89844491