最小割
给定一个连通图 $G = \left(V, E\right)$。如果一个边子集 $C \subseteq E$ 是一个 割 当且仅当将 $C$ 中所有的边全部删除后,图不再连通。
所谓 最小割,就是让 $C$ 中的边权和最小。
Karger 算法
定义 收缩 操作 $\mathsf{Contract}\left(e\right)$:
- 设 $e = \left(u, v\right)$
- 把边 $u$ 和 $v$ 替换为一个新点 $x$
- 对于任何一条以 $u$ 为端点的边 $e' = \left(u, w\right)$,连接 $x$ 和 $w$
- 对于任何一条以 $v$ 为端点的边 $e' = \left(v, w\right)$,连接 $x$ 和 $w$
- 销毁点 $x$ 的所有自环

Karger 算法执行以下流程:
- 如果 $\left\lvert V \right\rvert \leq 2$,结束算法
- 随机选择一条边 $e \in E$
- $\mathsf{Contract}\left(e\right)$
此时只有不超过两个点,剩下的边的边权和即为答案。
正确率
我们先来看看 Karger 算法的正确率。
其实,Karger 算法的正确率不好分析,因为每次选择不是独立的。
考虑在固定任意一个合法的最小割 $C$ 时,Karger 算法恰好返回这个最小割 $C$ 的概率。
根据直觉,最小割是稀疏的。对于一个合法的最小割 $C$,图 $G$ 必须满足 $\left\vert E\right\rvert \geq \frac{\left\lvert V\right\rvert\left\lvert C\right\rvert}2$,因为每个点的度数至少得是 $\left\lvert C\right\rvert$,每两个度数对应一条边。
如果一次 收缩 操作选择的边 $e_i$ 被 $C$ 包含,则最终 Karger 算法不可能返回 $C$。
否则,$C$ 中的所有边全部被保留。根据 收缩 操作性质,$C$ 将会被返回。注意 收缩 操作不会创建新的割。
记 $G_i = \left(V_i, E_i\right)$ 表示第 $i$ 次操作前的图。
因此根据概率链式法则:
$$ \begin{aligned} \Pr\left[\text{Correct}\right] &\geq \Pr\left[\text{C is returned by Karger Algorithm}\right] \\ &= \Pr\left[e_i \notin C \text{ for all } i \leq n - 2\right] \\ &= \prod\limits_{1 \leq i \leq n - 2} \Pr\left[e_i \notin C \mid \forall j < i, e_j \notin C \right] \\ &= \prod\limits_{1 \leq i \leq n - 2}\frac{\left\lvert E_i\right\rvert - \left\lvert C\right\rvert}{\left\lvert E_i\right\rvert} \\ &\geq\prod\limits_{1 \leq i \leq n - 2}\frac{\frac{\left\lvert V_i\right\rvert\left\lvert C\right\rvert}2 - \left\lvert C\right\rvert}{\frac{\left\lvert V_i\right\rvert\left\lvert C\right\rvert}2} \\ &=\prod\limits_{1 \leq i \leq n - 2}\frac{\left\lvert V_i\right\rvert - 2}{\left\lvert V_i\right\rvert} \\ &=\prod\limits_{1 \leq i \leq n - 2}\frac{n - i - 1}{n - i + 1}\\ &= \frac2{n\left(n - 1\right)} \end{aligned} $$
如果我们运行 $\frac{n\left(n - 1\right) \log n}2$ 次,正确概率至少有
$$1 - \left(1 - \frac2{n\left(n - 1\right)}\right)^{\frac{n\left(n - 1\right) \log n}2} \geq \frac1n$$
足够优秀了。每次跑 Karger 的时间复杂度可以做到 $\tilde O\left(n^2\right)$,因此总复杂度为 $\tilde O\left(n^4\right)$。
推论
设 $\mathcal C$ 为所有可能的最小割的集合。
$$1 \geq \Pr\left[\text{Correct}\right] \geq \sum\limits_{C \in \mathcal C}\frac2{n\left(n - 1\right)} = \left\lvert\mathcal C\right\rvert\frac2{n\left(n - 1\right)}$$
因此,$\left\lvert\mathcal C\right\rvert \leq \frac2{n\left(n - 1\right)}$。
即对于一个 $n$ 个点的图,最多有 $n\left(n - 1\right) / 2$ 种不同的割。
优化
注意到在 $\left\lvert V\right\rvert$ 较小时,收缩操作很容易选择到 $C$ 中的边,从而让整个算法失败。
我们不妨让 $\left\lvert V\right\rvert$ 较小时多尝试几次。具体使用如下方法。
- 如果 $\left\lvert V\right\rvert \leq t$,停止操作。
- 随机选择一条边 $e \in E$
- $\mathsf{Contract}\left(e\right)$
这样,$C$ 中的边全部保留的概率至少为
$$\prod\limits_{1 \leq i \leq n - t}\frac{n - i - 1}{n -i + 1} = \frac{t\left(t - 1\right)}{n\left(n - 1\right)}$$
如果我们取 $t \geq \left\lceil n / \sqrt 2 + 1\right\rceil$,那么 $C$ 被全部保留的概率至少有 $1 / 2$。
于是我们的新算法如下。
- 如果 $\left\lvert V\right\rvert \leq 6$,使用暴力解决。
- 令 $t = \left\lceil 1 + \left\lvert V\right\rvert / \sqrt2\right\rceil$
- 以上述方法收缩出图 $G_1$
- 以上述方法收缩出图 $G_2$
- 递归计算 $G_1$ 和 $G_2$ 的答案
- 返回 $G_1$ 和 $G_2$ 中更优的那个
我们再来分析一下正确率。我们记 $p\left(n\right)$ 表示 $\left\lvert V\right\rvert = n$ 时,此算法的正确率。注意 $C$ 被全部保留的概率至少有 $1 / 2$。
$$ \begin{aligned} p\left(n\right) &\geq 1 - \left(1 - \frac12p\left(\left\lceil1 + \frac n{\sqrt2}\right\rceil\right)\right)^2 \\ &= \Omega\left(\frac1{\log n}\right) \end{aligned} $$
同时时间复杂度
$$ \begin{aligned} T\left(n\right) &= 2T\left(\left\lceil1 + \frac n{\sqrt2}\right\rceil\right) + O\left(n^2\right) \\ &= O\left(n^2 \log n\right) \end{aligned} $$
于是,现在的算法只需要 $\tilde O\left(n^2\right)$!
最大割
给定一个连通图 $G = \left(V, E\right)$。
把点分为两个点集 $S$ 和 $T$,满足 $S \cup T = V$ 且 $S \cap T = \varnothing$。
最大割就是要让 $S$ 和 $T$ 中的连边的边权和最大。
这是一个 NP 完全问题,我们尝试找一些多项式复杂度的近似解。
贪心算法
初始时,我们让 $S = T = \varnothing$,然后往里面加入点。
对于 $i = 1, 2, \ldots, n$,$V_i$ 加入 $S$ 或 $T$ 中的一个,以最大化当前的 $S$ 到 $T$ 的距离。
这样是 $0.5$ 近似的,证明毫无营养,不写。
Parity Search
其实达到 $0.5$ 近似是看起来比较容易的。因为如果让每个变量都随机地加入到 $S$ 或 $T$ 中,那么这个割的期望就是 $\left\lvert E\right\rvert / 2$。
我们稍微分析一下。假设用 $X = \left\{0, 1\right\}^n$ 来指示 $i$ 在 $S$ 中还是在 $T$ 中。
那么割的期望为
$$\mathbb E = \sum\limits_{\left(u, v\right) \in E} \Pr \left[X_u \neq X_v\right]$$
显然为 $\left\lvert E\right\rvert / 2$。
我们发现,如果我们有 $k = \left\lceil \log\left(n + 1\right)\right\rceil$ 个 $\left\{0, 1\right\}$ 随机变量 $Y$,那么我们其实是可以生成出 $n$ 个 相互独立 的随机变量的。
注意我们的要求是 相互独立,或者说 两两独立,因此通过这种方式生成的随机变量是符合要求的。
他们的期望是 $\left\lvert E\right\rvert / 2$,那么在所有方案中,至少有一个达到了 $\left\lvert E\right\rvert / 2$。
给出一个通过这 $k$ 个随机变量 $Y$,如何生成 $n$ 个 相互独立 的随机变量 $Z$。
先设 $S_1, \ldots, S_{2^k - 1}$ 表示 $\{1, 2, \ldots, k\}$ 的 $2^k - 1$ 个非空子集。
$$Z_i = \bigoplus\limits_{j \in S_i}X_j$$
这样,$SOL \geq \frac{\left\lvert E\right\rvert}2 \geq \frac{OPT}2$,也是 $0.5$ 近似!
Comments