网络流

  • 基本概念
    • 流网络、网络上的流、最大流;流网络的切、最小切
    • 流和切的关系、净流量,弱对偶性: 切流值≤切的容量;最大流与最小切的关系
    • 流的数学性质
  • 最大流算法
    • 残差网络/剩余图(Residual graph)
    • Ford-Fulkerson算法:一个贪心方法
      • 增广路径
    • Edmonds-Karp 算法
      • 选取剩余图中边数最少的增广路径的Ford-Fulkerson方法
      • 多尺度实现

网络流

给定有向图 $G=(V,E)$,其中,两个特殊的点 s 和 t 被称为 源(Source)汇(Sink),而 $E$ 中的每条边有一个容量值(capacity) $c(u,v)$。则这四个东西组合起来的 $(G,s,t,c)$ 称为流网络。

最大流问题

求从 $s$ 到 $t$ 的最大流量就是最大流问题。最大流问题在交通规划、物流管理、网络流量等都会遇到。

我们考虑如下宴会座位安排问题:有 $N$ 个家庭参加, 每个家庭人数分别是 $𝑎1,𝑎2,\cdots,a_n$,有 $m$ 张餐桌,每张能容纳 $c_1,c_2,\cdots,c_n$ 个人。为了增进友谊,要求每个家庭同桌数不多于 $k$,那么我们可以转化为如下最大流问题:

宴会座位安排

要解决这个问题,可以采用 Ford-Fulkerson 算法,在了解这个算法之前,先弄清楚几个概念:

  • 残存网络:给定一个流网络G和一个流,流的残留网Gf拥有与原网相同的顶点。原流网络中每条边将对应残留网中一条或者两条边,对于原流网络中的任意边(u, v),流量为f(u, v),容量为c(u, v):
    • 如果f(u, v) > 0,则在残留网中包含一条容量为f(u, v)的边(v, u);
    • 如果f(u, v) < c(u, v),则在残留网中包含一条容量为c(u, v) - f(u, v)的边(u, v)。
    • 简单来说,就是将边上的容量减去流量,然后再加上一条相反的边,相反的边的容量就等于流量。

Ford-Fulkerson 算法的过程如下:

  1. 选一条增广路径,让路径上的流达到最大值,记录这个容量
  2. 做出残存网络
  3. 重复 1、2 直到无法做出路径
  4. 最大流量就是所有记录的容量和。

参考:知乎:最大流

最小切问题

最小切问题指的是:找到容量最小的切割把s和t分开。也就是说,我们需要将结点划分成两部分,两部分之间的流量最小。

最小切问题.PNG…