最大流

概述

最大流(Maximum Flow)问题是在一个流网络中,找到从源点到汇点的最大可行流量,是图论和组合优化的核心问题之一。

定义

形式化定义

一个流网络(flow network) 是一个有向图,满足:

  • 每条边 具有非负容量
  • ,则约定
  • 指定两个特殊顶点:源点 (source)和汇点 (sink)

一个(flow)是满足以下约束的函数

  • 容量约束:对所有
  • 流量守恒:对所有

最大流问题:求使 (即流出源点的净流量)最大的流

核心概念

残留网络

给定流 残留网络 中边 的残留容量为:

残留网络中的边表示可以继续增加流量的方向。

增广路径

增广路径(augmenting path)是残留网络 中从 的一条路径。沿增广路径可以增加流量,增广量等于路径上的最小残留容量。

一个 - 划分为 (含 )和 (含 ),割的容量为:

核心性质

最大流最小割定理

Max-Flow Min-Cut Theorem

在任何流网络中,以下三个条件等价:

  1. 是一个最大流
  2. 残留网络 中不存在 - 增广路径
  3. 存在一个 - 使得

推论:最大流的值 = 最小割的容量

经典算法

算法时间复杂度策略
Ford-Fulkerson$O(E \cdotf^*
Edmonds-KarpBFS 寻找最短增广路径
Dinic分层图 + 多路增广
推-重标算法预流推进策略

应用场景

  • 二分匹配二分匹配可通过构造流网络(添加超级源点和超级汇点)用最大流求解。源点连左部各顶点(容量1),右部各顶点连汇点(容量1),原边容量为1
  • 图像分割:将像素建模为图的顶点,像素间的相似度为边容量,通过最小割实现前景/背景分割
  • 项目选择:每个项目有收益和成本,通过最大流最小割选择最优项目子集
  • 二部图中的最小顶点覆盖:由 König 定理,最大匹配 = 最小顶点覆盖,可通过最大流求解

参见