最小割与最大流
简介:
最大流与最小割问题常用于matching问题、clustering问题等等...
**最小割问题:**在一个带权重的图中找出一个将所有顶点分为两类的分割方法,切分割的边权重合最小(实际上就是一种对于边的cut)。
**最大流问题:**在一个带权有向图中,找出可能的最大流量从 S->T。

最小割问题
一个cut相当于将vertex分为两类,其中会切开一些边,找到最小的切分方法。

最小割问题在研究网络最薄弱环节相关问题上具备广泛应用。而这个问题如今也依旧是一个open problem。
如今主要有这么两类随机算法来解决这一问题:
-
LAS VEGAS ALGORITHMS:保证正确性,但运行时间有random性(类如quick sort)
-
MONTE CARLO ALGORITHM:正确性不一定保证,但运行时间efficient
Karger's algorithm
Pick a random edge, contract it, and repeat until you only have 2 vertices left.

正确的概率 刚好分得的是正确的2 组
最大流问题
对于一个有向图 有起点S、终点T, 计算从S到T的最大流量。
例如这是一种流:

对于给定S和T的图,最大割与最小流相等,证明略
Fold-Fulkerson Algorithm
核心:构建Residual Graph
起始于任意的一个flow
循环
构建residual graph
在redisual graph上寻找可能的更新path,
若不存在augment path证明目前的flow最大,结束。
若存在augment path, 更新flow。
结束

寻找augment path的方式:
- Non-full forward edges
- Non -empty backward edges