问题描述
给出一个无向图$G=(V, E)$,要求删除一些边,使得整个图不联通,同时删去的边尽量少。
算法一
如果我们可以求出任意一个$s-t$最小割$C$,那么$G$的全局最小割是$C$与的全局最小割中较小的一个。
在图$G$中求任意一个$s-t$最小割的方法如下。
设$a$是$V$中任意一个顶点,点集$A$是$V$的一个子集,初始时等于。我们每次在$V-A$中选取一个$w(A, x)$最大的点$x$加入$A$中,直到$A=V$时停止。这里,对于一个不属于$A$的点$x$,有
令$x$为倒数第二个加入$A$中的点,$t$为最后一个加入$A$中的点,$t$和其它所有点的连边组成的集合就是一个$s-t$最小割。
如果使用Fibonacci堆存储$V-A$中的点,时间复杂度为$O(mn+n^2\log n)$。
算法二
这是个概率算法,同样运用点的合并。算法包括$n-2$此迭代。每次迭代中,算法从图的现有边中随机选出一条边并将边的两个顶点合并。每一次迭代会使顶点减少一个,经过$n-2$次迭代之后,图只剩下两个顶点。算法输出连接这两个顶点保留的边的集合。
设$E_i$表示第$i$次迭代时不在最小割集$C$中这一事件,$F_i = \bigcap_{j=1}^{i} E_j$表示前$i$次迭代中没有缩减$C$中的边。我们需要计算$P(F_{n-2})$。
令$k=| C |$,则图中至少有$\frac{nk}{2}$条边。所以
类似地
所以
假设进行$n(n-1)\ln n$次此随机算法,并输出所有结果的最小者,输出不是一个最小割集的概率是
这里我们用到了$1-x\le e^{-x}$.