核心概念
我们提出了一种新的算法,可以在 $O(k^3 \min{kn, m} \log^2 n + k \cdot \text{MAXFLOW}(m, m) \log n)$ 时间内解决 k 森林问题,打破了之前算法 $O_k(n^{3/2})$ 的复杂度障碍。我们的算法依赖于三个子程序:有界入度的有向 k 森林问题、k 伪森林问题和最大团块计算。
摘要
本文研究了 k 森林问题,即在给定无向图 G 中找到 k 个边不相交的森林,使它们的总边数最大。这个问题是一个特殊的成熟联合问题,可以用多种方法解决。
作者首先介绍了三个子程序:
- 有界入度的有向 k 森林问题:找到 k 个边不相交的有向森林,使它们的总边数最大,且每个顶点的入度不超过 k。这个问题可以在 $O(k^2m\log n)$ 时间内解决。
- k 伪森林问题:给定一个有向图 H 和一个正整数 k,找到一个包含 H 的无向图 P,使 P 可以被 k 个伪森林覆盖,且 P 的边数最大。这个问题可以在 $O(\text{MAXFLOW}(m, m))$ 时间内解决。
- 最大团块计算:给定一个无向图 G 和一个可行解 $F_1, \dots, F_k$,计算 $F_1 \cup \dots \cup F_k$ 的最大团块。这可以在 $O(kn\log n)$ 时间内完成。
作者提出了一种新的算法,利用上述三个子程序来解决 k 森林问题。该算法首先计算一个可行解,然后不断改进,直到找到最优解。每次迭代中,算法执行以下步骤:
- 对当前解 $F$ 进行定向,使每个顶点的入度不超过 k。
- 计算一个包含 $F$ 的最大子图 $P$,使 $P$ 可以被 k 个伪森林覆盖。
- 在 $P$ 上计算一个新的可行解 $H_1, \dots, H_k$。
- 找到 $F_1 \cup \dots \cup F_k$ 的最大团块,并将其对应的连通分量收缩。
- 递归地处理收缩后的图。
作者证明了该算法的正确性和时间复杂度。关键点包括:
- 每次迭代都能提高解的质量,最多需要 $O(k\log n)$ 次迭代。
- 每次迭代的时间复杂度为 $O(k^3 \min{kn, m} \log^2 n + k \cdot \text{MAXFLOW}(m, m) \log n)$。
- 利用最大团块收缩可以确保最终解是无团块的。
总的来说,这是一种新颖高效的算法,突破了之前算法的复杂度障碍。