0%

Stoer-Wagner 算法

问题

求一个任意的无向图的全局最小割。即,定义$\lambda(x,y)$表示$x,y$两点之间的最小割,给出一张任意的无向图,你需要求出$\min_{x\neq y}\lambda(x,y)$。

Stoer-Wagner 算法

约定

用$w(x,y)$表示$x,y$之间的边权。用$c(X,Y)$表示$\sum_{x\in X,y\in Y} w(x,y)$,其中$X,Y$是图中点集的两个子集。

定义contract(x,y)表示将$x,y$两个点缩起来,具体来说就是新建一个点$u$,对于任意$v\neq x,v\neq y$,令$w(u,v) = w(v,x) + w(v,y)$,然后将$x,y$从原图中删去。

算法过程

如果两个点在全局最小割的异侧,那么它们之间的最小割就是全局最小割;否则,将它们缩起来对全局最小割没有影响。

Stoer-Wagner算法的过程是:每一次求出两个点的最小割,然后把它们缩起来。整个算法过程中求出过的最小割的最小值就是全局最小割。

但是这样还是要求$n-1$次最小割。

优化:MinimumCutPhase

我们并不是需要求某两个点之间的最小割,只要我们求出的是某两个点之间的最小割就可以了。

MinimumCutPhase可以在$O(n^2)$的时间内求出某两个点之间的最小割,以下是它的过程:

  1. 首先随便选择一个点$a$,令$A=\{a\}$。
  2. 然后选择一个点不在$A$中的点$x$,使得$c(A,\{x\})$最大,然后将$x$加入$A$。
  3. 重复2.直到$A$以外只剩下一个点。则我们最后加入$A$的那个点和剩下的那个点(设为$z$)之间的最小割就是$c(A,\{z\})$。

正确性:实际上可以证明,假设加入$A$的点依次为$v_1=a,v_2\cdots v_{n-1}$,令最后剩下的那个点为$v_n$,那么对于任意的$i\ge 2$,在只考虑$v_1,v_2\cdots v_i$以及它们之间的边的时候,$v_i$和$v_{i-1}$之间的最小割是$c(\{v_1,v_2,\cdots v_{i-1}\},\{v_i\})$。

由于$v_i,v_{i-1}$的任意一个割都会删掉$(v_i,v_{i-1})$这条边,所以$\lambda(v_i,v_{i-1})$等于将$(v_i,v_{i-1})$删掉之后求得的最小割$\lambda’(v_i,v_{i-1})$加上$w(v_i,v_{i-1})$。所以接下来只考虑将$(v_i,v_{i-1})$删掉后的图。

首先证明在只考虑$v_1,v_2,\cdots v_i$以及它们之间的边的时候,$c(\{v_1,v_2,\cdots v_{i-1}\},\{v_i\})\le \lambda(v_{i-1},v_{i-2})$。用归纳法。对于$i=2$显然成立。对于$i>2$:

  • 将$v_i$以及与$v_i$相邻的所有边从图中删掉,此时$v_{i-1}$和$v_{i-2}$的最小割是$(\{v_1,v_2,\cdots v_{i-2}\},\{v_{i-1}\})$(归纳假设)。
  • 由MinimumCutPhase的过程可以知道
  • 由于$v_i$和$v_{i-1}$之间没有边,所以
  • 将上面的两个式子带入(1),可以得到
  • 由于$c(\{v_1,v_2,\cdots v_{i-2},v_i \},\{v_{i-1}\})$等于加入$v_i$这个点之前图中的$v_{i-1},v_{i-2}$的最小割,并且在加入$v_i$之后两个点的最小割不可能变得比加入之前更小,所以$c(\{v_1,v_2,\cdots v_{i-2},v_i \},\{v_{i-1}\})=\lambda(v_{i-1},v_{i-2})$。所以我们得到了

然后我们将证明,只考虑$v_1,v_2,\cdots v_i$以及它们之间的边的时候,$c(\{v_1,v_2,\cdots v_{i-1}\},\{v_i\})\le \lambda(v_{i},v_{i-2})$。用归纳法。对于$i=2$显然成立。对于$i>2$:

  • 删去$v_{i-1}$以及原图中与它相邻的边。对得到的图重新进行MinimumCutPhase,最后加入$A$的点是$v_{i-2}$,剩下的点是$v_i$。
  • 此时$v_i,v_{i-2}$之间的最小割是$c(\{v_1,v_2,\cdots v_{i-2}\},\{v_i\})$。
  • 把$v_{i-1}$加回去之后的图中,得到$\lambda(v_i,v_{i-2}) = c(\{v_1,v_2,\cdots v_{i-2},v_{i-1},v_i\})$。

综合以上两个结论:

以及

以及

可以得到