8.10 最大流最小割定理

文章目录

  • 基本概念
  • 定理:流小于等于割容量
  • Max-Flow Min-Cut Theorem

基本概念

  网络流Network Flow,是用来研究现实生活中的水、电、油、气、交通、互联网等网络结构流量的数学分支。用图论抽象网络流模型,就是流网络。
  流网络Flow Network,也叫传输网络Transport Network,是一种连通的无负权重的有向简单图。权重是用来代表容量的。
  容量capacity,用 c i j c_{ij} cij表示节点 i i i到节点 j j j的容量。
  起点source vertex,终点sink vertex
  流量Flow,下面这张图表示了流量与容量的区别(这个图被很多地方“复用”,比如普林斯顿大学、印度理工学院等,我这里用的是普林斯顿大学的图):
8.10 最大流最小割定理_第1张图片
  饱和边Saturated edge,流量等于容量的边,被称为饱和边。上图中 3 → 6 3\to6 36就是一条饱和边。
  流模式Flow Pattern,所有边流量都确定后,放入一个集合中,这个集合就叫流模式。
  最大流模式Maximal Flow Pattern,起点的流出和终点的流入是相等的,记为w,使得w最大的流模式,叫做最大流模式。
  cut,割就是把流网络中的节点拆分为非空的两个子集,一个包含起点s,一个包含终点t,割的符号为 ( P , P ‾ ) (P,\overline{P}) (P,P)。如下图就是一种割方案(图片来自普林斯顿大学):
8.10 最大流最小割定理_第2张图片
  割的容量Capacity of a Cut,符号为 c ( P , P ‾ ) c(P,\overline{P}) c(P,P),是割的边界处的容量和,反向的需要按负数计算。

定理:流小于等于割容量

  这个定理里的流是指由起点s到终点t的流,也就是起点出发的所有边的流总和,或到终点的所有边的流总和,记为 w w w。定理是说在任何割里,起点到终点的流都要小于割容量。用数学语言表示就是 w ≤ c ( P , P ‾ ) w\le c(P,\overline{P}) wc(P,P)。这个的下面我给出证明。
  首先对于中间节点j,流入等于流出:
∑ i ≠ j f j i − ∑ i ≠ j f i j = 0 \sum_{i\neq j}f_{ji}-\sum_{i\neq j}f_{ij}=0 i=jfjii=jfij=0
  对于起点s,流出减去流入等于净流量w。
∑ i ≠ s f s i − ∑ i ≠ s f i s = w \sum_{i\neq s}f_{si}-\sum_{i\neq s}f_{is}=w i=sfsii=sfis=w
  P里的点就两种,s和中间节点,把上面两个公式全部加起来,就是若干个0和一个w。所以可以得到这个公式:
∑ k ∈ P , i ∈ G f k i − ∑ k ∈ P , i ∈ G f i k = w \sum_{k\in P, i \in G}f_{ki}-\sum_{k\in P, i \in G}f_{ik}=w kP,iGfkikP,iGfik=w
  再把上式中的i区分为来自 P P P P ‾ \overline{P} P,就有了:
∑ k ∈ P , i ∈ P f k i + ∑ k ∈ P , i ∈ P ‾ f k i − ∑ k ∈ P , i ∈ P f i k − ∑ k ∈ P , i ∈ P ‾ f i k = w \sum_{k\in P, i \in P}f_{ki}+\sum_{k\in P, i \in \overline{P}}f_{ki}-\sum_{k\in P, i \in P}f_{ik}-\sum_{k\in P, i \in \overline{P}}f_{ik}=w\\ kP,iPfki+kP,iPfkikP,iPfikkP,iPfik=w
  把整个P视为一个节点,其内部的流量相加肯定是0的,只往外流出w,所以其内部流量总和为0,所以有:
∑ k ∈ P , i ∈ P f k i − ∑ k ∈ P , i ∈ P f i k = 0 \sum_{k\in P, i \in P}f_{ki}-\sum_{k\in P, i \in P}f_{ik}=0 kP,iPfkikP,iPfik=0
  两个式子抵消下,有:
∑ k ∈ P , i ∈ P ‾ f k i − ∑ k ∈ P , i ∈ P ‾ f i k = w \sum_{k\in P, i \in \overline{P}}f_{ki}-\sum_{k\in P, i \in \overline{P}}f_{ik}=w kP,iPfkikP,iPfik=w
  这个公式就是说对于割, P P P流入 P ‾ \overline{P} P减去 P ‾ \overline{P} P流入 P P P等于净流量w。这么复杂的数学过程等于证明了一句废话。 P ‾ \overline{P} P流入 P P P的流量,也就是 ∑ k ∈ P , i ∈ P ‾ f i k \sum_{k\in P, i \in \overline{P}}f_{ik} kP,iPfik是个非负数,所以有:
w ≤ ∑ k ∈ P , i ∈ P ‾ f k i ∵ ∑ k ∈ P , i ∈ P ‾ f k i ≤ ∑ k ∈ P , i ∈ P ‾ c k i = c ( P , P ‾ ) ∴ w ≤ c ( P , P ‾ ) w \le \sum_{k\in P, i \in \overline{P}}f_{ki}\\ \because \sum_{k\in P, i \in \overline{P}}f_{ki}\le \sum_{k\in P, i \in \overline{P}}c_{ki}=c(P,\overline{P})\\ \therefore w \le c(P,\overline{P}) wkP,iPfkikP,iPfkikP,iPcki=c(P,P)wc(P,P)
  Q.E.D.(证明完毕)

Max-Flow Min-Cut Theorem

  该定理在1956年由Ford-Fulkerson提出,内容是最大流等于最小割容量。上面那个定理是对于任何割法,流都小于割容量。现在是说只要找到最小的割容量的割方案,就找到了最大流。下面我给出证明:
  从流小于等于割容量的证明过程,我们有:
w ≤ ∑ k ∈ P , i ∈ P ‾ f k i ≤ ∑ k ∈ P , i ∈ P ‾ c k i = c ( P , P ‾ ) w \le \sum_{k\in P, i \in \overline{P}}f_{ki}\le \sum_{k\in P, i \in \overline{P}}c_{ki}=c(P,\overline{P}) wkP,iPfkikP,iPcki=c(P,P)
  因为最大流是一个固定的数字。我们只要证明上述不等式存在两个等号同时满足的场景就可以了。第一个不等式满足的条件是什么?是下列条件:
∑ k ∈ P , i ∈ P ‾ f i k = 0 \sum_{k\in P, i \in \overline{P}}f_{ik}=0 kP,iPfik=0
  也就是从 P ‾ \overline{P} P流入P的流量为0。也就是这个割反向流量为0。那另一个等号呢?就是割的流量等于容量,也就是割的边界全部是饱和边。所以证明的难点就在这里,既要证明存在,又要证明这时候反向流量为0。首先,一个流网络肯定存在一个最大的流模式的。假设这个流模式下的流量为 w ∗ w^* w,也就是把最大流定义为 w ∗ w^* w
  然后我们定义一个割 ( P ∗ , P ‾ ∗ ) (P^*,\overline{P}^*) (P,P),定义如下规则:
  1. s ∈ P ∗ s\in P^* sP
  2. 然后按以下方式递归找 P ∗ P^* P中其他点:对于 P ∗ P^* P中的i,如果存在j,使得 f i j < c i j f_{ij}\lt c_{ij} fij<cij f j i > 0 f_{ji}\gt0 fji>0,那么把j放入 P ∗ P^* P中。
   f j i > 0 f_{ji}\gt0 fji>0的点全部在 P ∗ P^* P中,这样就保证了反向流量为0。 f j i < c j i f_{ji}\lt c_{ji} fji<cji f i j < c i j f_{ij}\lt c_{ij} fij<cij保证了不饱和的边不会出现在边界上。这样递归下去肯定可以的,如果不存在满足条件的点,至少还有s嘛。但是会有个问题,会不会包含t呢?如果包含了终点t,那么就证明不存在这样的割。所以现在只需要证明上述方案不会包含t就可以了。
  如果t包含进去了,那么t肯定是按上述的规则链被包含进去的,那么找到t的过程,就定义为一个路径 s , v 1 , v 2 , … , v i , v i + 1 , … , t s,v_1,v_2,\dots,v_i,v_{i+1},\dots,t s,v1,v2,,vi,vi+1,,t,这条路径上所有的边,要么是反向边,要么是正向的不饱和边。把这条路径上的最小容量余量 c v j v j + 1 − f v j v j + 1 c_{v_jv_{j+1}}-f_{v_jv_{j+1}} cvjvj+1fvjvj+1,定义为 β 1 \beta_1 β1,把最小的反向容量定义为 β 2 \beta_2 β2,把 β \beta β定义为 m i n ( β 1 , β 2 ) min(\beta_1,\beta_2) min(β1,β2)。这个时候把这个路径上每个正向边的流量增加 β \beta β,同时每个反向边的流量减少 β \beta β,因为是从s出发的,所以守恒,这样增加是没问题的。这个时候图的流量增加了 β \beta β,与此时流量 w ∗ w^* w为图的最大流量矛盾。
  Q.E.D.(证明完毕)

你可能感兴趣的:(数据结构,#,图算法,数据结构,算法)