背景
Stoer-Wagner 算法求解非负边权的无向图全局最小割,即不指定源点和汇点。
割:去掉图上的若干边,使得源点 $S$ 和汇点 $T$ 不再连通。去掉的边的集合称为割。
算法
1 | MinimumCutPhase(G, w, a) |
- MinimumCutPhase 等同于最小生成树的 Prim 算法。
证明
定理 记 $s, t$ 是图 $G$ 的两个点,通过合并 $s, t$ 得到 $G/\{s, t\}$,则图 $G$ 的最小割是最小 $s-t$ 割或者图 $G/\{s, t\}$ 的最小割。
该定理算是比较显然的,因为 $s, t$ 要么被最小割分开,要么在最小割的同一部分中。
引理 记 $s, t$ 是当前阶段合并的 2 个点(即最后加入的 2 个点),则当前阶段的割值(CutOfThePhase)是当前图的最小 $s-t$ 割。
证明 先给出一些定义,用于后续推导:
记 MinimumCutPhase 的起点为 $a$,$s, t$ 的任一割为 $C$。
当 $v$ 的前一个加入点与 $v$ 不在 $C$ 的同一部分(e.g. 一个与源点连通,一个与汇点连通)时,记 $v$ 是一个活跃(active)点。
- $w(C)$ 是割 $C$ 的边权和。
- $A_v$ 表示 $v$ 之前加入的所有点,但不包括 $v$。
- $w(A, v)$ 表示集合 $A$ 和点 $v$ 之间所有连边的权值和。
- $C_v$ 是点集 $A_v\cup {v}$ 在割 $C$ 上的导出割(induced cut)。
证明思路:对于 $s, t$ 的任一割 $C$,有 $w(A_t, t)\le w(C)$,说明 $s, t$ 的最小割为 $w(A_t, t)$,则引理得证。
首先,对于所有的活跃点有以下推论:
使用数学归纳法证明。
- 对于第一个活跃点来说,该不等式显然成立。一部分点与起点 $a$ 连通,另一部分仅有 $v$ 一个点。导出割 $C_v$ 必然大于等于 $w(A_v, v)$。
- 记 $u$ 是 $v$ 的下一个跃点,有:
根据 MinimumCutPhase 的定义,$v=\text{argmax}_{z\notin A}\{w(A, z)\}$,因此 $w(A_v, u)\le w(A_v, v)\le w(C_v)$,继而有:
因为 $A_u\setminus A_v$ 和点 $u$ 不在同一连通块中,割 $C$ 必然包含这部分边,那么就可推导出第 2 个不等式。
根据定义,割 $C$ 分割了 $s, t$,因此 $t$ 总是一个活跃点,符合不等式 $w(A_t, t)\le w(C_t)=w(C)$,引理得证。
代码
1 | const int N = 601; |