1. 问题定义
图G=(V, E)成为多重图,如果顶点对之间允许出现多条边。多重图G=(V, E)的一个割是边集E的一个子集C,它使得Gc=(V, E-C)至少存在两个连通分支。边的条数达到最小值的割称为最小割。最小割问题要求输出多重图G=(V, E)的最小割。
2. 随机算法
输入:多重图G=(V, E)
输出:G的一个最小割C
1. G' = G;
2. While G'中顶点个数多于2 Do;
3. 从G'中任选一条边(u, v),并且收缩边(u, v); // 收缩的意思是把与顶点u、v关联的边收缩到新的节点上
4. G'中剩下的两个顶点对应G顶点子集S 和 V - S;
5. 输出C = {(u, v) | u∈S, v∈V-S, (u,v)∈E}.
3.算法性能的分析
该算法的时间复杂度为O(n^2)。由于每收缩一次,G'就可以减少一个顶点,所以第2步~第3步的while循环执行n-2遍,每一次收缩边(u,v)时需要O(n),因此第2步~第3步总时间复杂度为O(n^2)。第5步计算C也需要O(n^2)。研究表明,该算法求解出最小割的概率大于2/n^2(n为顶点的个数)。