首页 > 代码库 > 最大流最小割算法

最大流最小割算法

图像分割中用到最小割原理,引出了最大流最小割算法,主要参考来自UCLA CIVS的Hong Chen的PPT 《Introduction to Min-Cut/Max-Flow Algorithms》

一、 首先借用PPT的两张图分别讲述一下两者的应用

1. 最大流应用于网络传输



2. 最小割应用于桥问题



二、基本概念之 s-t 图

1. 源结点(source node)和汇结点(sink node)

2. 从结点i到结点j的有向边(Arc)<i, j>

3. 每条边<i, j>有非负的容量cap(i, j)

4. cap(i, j) = 0 表示没有边



三、s-t 图中的流概念

流是一个实数函数,为每条边<i, j>赋值 f(i, j),流具有如下一些属性:

1. 容量限制: f(i, j) <= cap(i, j)

2. Mass balance constraint (质量守恒约束,暂时如此翻译),如下公式表示:

  • 所有从源点出发的边的流量之和 - 所有到源点的边的流量 = 流量的值
  • 所有从汇点出发的边的流量之和 - 所有到汇点的边的流量 = 负的流量值
  • 所有非源点和非汇点出的边的流量之和 - 到这些点的边的流量之和 = 0


以下是流量的一个例子,源点出发的 2+3,到源点的为0,则流量为5,,类似推理其他点



引出最大流的概念,所有可能的流函数中拥有最大值的流

四、基本概念之s-t Cut

引入割(Cut)的概念,将拥有源点s和汇点t的结点集合V分成两个子集S和T,当且仅当s属于S且t属于T时,称这种分割为Cut。如下图中左图为割,右图则不是。



五、s-t割的容量

s-t的容量cap([S, T]) 指的是所有从S到T的边界的容量和,具体公式如下:


下面是个例子,注意此外只计算从S到T的,不计算T到S的



引出最小割(minimum cut)的概念,所有可能的s-t割中容量最小的s-t割。

六、基本概念之Flow Across s-t Cut(理解为交叉流s-t Cut)

所有从S中的结点到T中结点流之和 - 所有从T中的结点到S中的结点的流之和。


下图是个例子,此处计算从S到T和T到S。


七、s-t图的性质

1. 对于任意的s-t割和流,s-t割的容量是s-t割交叉流量的上界(即最大值),推理过程很简单。


2. 对于任意的s-t割,割的交叉流量的值等于s-t流的值,这个推理稍微麻烦一点儿,主要思想是把前一项的终点分为S和T,后一项的起点分为S和T,再把前一项加和合并。


三、对于任意的s-t割和流,s-t割的容量是流的值的上界,这是由性质一和性质二推理出来的。



最大流最小割算法