网络流算法

本文介绍了网络流的概念,包括割的定义及其大小,并详细阐述了Ford-Fulkerson算法在寻找不相交路径中的应用。该算法通过DFS或BFS在残余网络中寻找路径,直至无法找到增广路径,最终得到的最大流与最小割定理相关联。最大流问题在带权图中表现为线性优化目标,寻找路径的同时满足边的容量约束。
摘要由CSDN通过智能技术生成

网络流

本文参考了南京大学蒋炎岩老师的讲解(B站视频链接)

考虑割的定义

对于有向图 G ( V , E ) G(V,E) G(V,E)
对于DFS/BFS,每次搜索会将新的节点 v ∈ V v \in V vV 纳入已经搜索的集合 S S S

则对于尚未搜索的部分,定义为集合 V − S = T V - S = T VS=T,则必然存在 S , T S,T S,T 满足 G G G s − t s-t st

  • S ∩ T = V , S ∪ T = ∅ S \cap T = V, S \cup T = \emptyset ST=V,ST=
  • s ∈ S , t ∈ T s \in S, t \in T sS,tT

即起点/终点分别位于两个集合当中,这个边集合称作割

定义割的大小 ∣ { ( u , v ) ∈ E ∣ u ∈ S , v ∈ T } ∣ |\{(u,v) \in E|u \in S, v \in T\}| {(u,v)EuS,vT},即按照 S → T S \rightarrow T ST 方向穿过割的边数

因此对于 G G G 中任意两点间 s → t s \rightarrow t st找不到路径,等价于至少存在一个 s ∈ S , t ∈ T s \in S, t \in T sS,tT s − t s-t st 割大小为 0 0 0

不止一条路径

G G G 中有多少不相同的 s → t s \rightarrow t st

  • 可共享节点,不能共享边

对于大小为 n n n s → t s \rightarrow t st 割,必然存在至多 k ( k ≤ n ) k(k \leq n) k(kn) s → t s \rightarrow t st 的路径(上界)。

同时,如果能找到 m ( m ≤ k ) m(m \leq k) m(mk) 条不相交路径(下界),就证明了一共有 k k k 条不相交路径。

寻找不相交路径的数量

Ford-Fulkerson 算法

  1. 使用DFS/BFS找到一条路径 L L L
  2. 对于 e ∉ L e \not\in L eL,保持方向不变,对于 e ∈ L e \in L eL,将其反向
  3. 对于更新后的图(称作残余网络),重复步骤 1 , 2 1,2 1,2,若不满足 1 1 1,则终止
    对于终止的 Ford-Fulkerson 算法,必有割 s → t s \rightarrow t st 大小为 0 0 0.

当算法终止时,假设有 m m m 条路径,则必有真实路径数 k , k ≥ m k,k \geq m k,km,若同时有最小割 t = m t = m t=m,则必有路径数量为 k k k

最大流和最小割

考虑带权图

带权图等价于多重边。如权重为 20 20 20 的边 a → 20 b a \rightarrow_{20}b a20b,等价于 20 20 20 条权重为 1 1 1(无权)的边即 20 × a → b 20 \times a\rightarrow b 20×ab

边的权值称作容量

若存在 p p p 条有重复边的路径 { x 1 , . . . , x p } \{x_1,...,x_p\} {x1,...,xp},则定义了如下的线性优化目标
min ⁡ ∑ i = 1 p x i \min \sum\limits ^{p}_{i = 1} x_i mini=1pxi
其满足约束条件

x 1 + . . . ≤ a x 2 + . . . ≤ b … x i ≥ 0 x_1 + ... \leq a \\ x_2 + ... \leq b\\\dots\\x_i \geq 0 x1+...ax2+...bxi0
其中 a , b , . . . a,b,... a,b,... 表示 x 1 , x 2 , . . . x_1,x_2,... x1,x2,... 公共边中最小的容量。这就是网络流的原始表述。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值