概述
流网络,能够模拟物质流动,如输送线,供水或产品运输,并找到最大流量。
特点:是一个有向图,且可以有环,不考虑反向边(即使有反向边,也可以通过加点来把一条反向边,变成两条单向边)。
组成:源点,容量,汇点。
源点S可以认为是起点,类比与水库,可以源源不断地向外输水。
容量可以理解为离散数学的边权,类比与流速即单位时间内流过的最大的水量的大小。如果边不存在则认为容量是0。
汇点t可以认为是终点,类比与大海,从水库里流出来的水,会源源不断的流向大海。
可行流
条件:当同时满足以下两个条件时,这条边可以成为可行流。
1.容量限制:也就是说你设定的流量不能够超过容量。即0<=f(u,v)<=C(u,v)
2.流量守恒:规定除了源点和汇点都不能储存流量,也就是说除了源点和汇点,剩下的节点都应该入多少流量,出多少流量,达到流量守恒。
对于一个可行流,每秒从源点流向汇点的流量的值/速率记作:
|f|=每秒从源点流出的流/每秒流入汇点的流量
即往外流的流量流回去的流量:
最大流最小割定理
割
描述:割其实就是把节点分成两部分(S,T),而且s位于S中,t位于T中。
举例:
最小割问题
定义:找到一个最小capacity的(S,T)cut。
最大流(都是对于节点来说)
对于一个流网络来说会有非常多的可行流,每一个可行流都可以求出一个流量值,这些流量值构成的集合中,流量最大的那个,就是最大流,即最大可行流。
即所有可行流中流量值最大的可行流。
最大流最小割(Max-flow min-cut)定理
在任何网络中,最大流的值=最小割的capacity。
关系:如果流f等于cut(S,T)capacity,则f是最大流,(S,T)是最小割。
按本文描述算法对最初的图进行最小割求解。
转载:https://www.jianshu.com/p/beca253fdc9f
步骤1:寻找第一个通路
红色字体表示该通路的通路流量。根据算法进行容量修正:
修改后的容量是用红色字体表示。在此通路中,AC边容量为0,所以将该边加入最小割边集合{AC},同时记录影响边信息,SA的影响边{AC},CT的影响边{AC}。
步骤2:寻找第二条通路:
此时,最小割边集合为{AC,DT}
步骤3:寻找第三条通路:
此时最小割边集合为:{AC,DT,DC}
此时,已经不再存在通路,所以当前最小割边集合就是求解的最小割,其代价为23。