[论文阅读报告] Faster Algorithms for Approximate Distance Oracles and All-Pairs Small Stretch Paths, FOCS '06

本篇文章介绍三个最短路近似算法,分别是带权无向图 \((2, \omega)\) 和 stretch \(2\) 近似的 \(\tilde O(m \sqrt n)\) 算法以及 stretch \(3\) 近似的 \(O(\min(m \sqrt n, n^2))\) 时间、\(O(n^{\frac 32})\) 空间做法。其中 \(\omega\) 表示最短路上最长边的长度,\((2, \omega)\) 表示对每一对 \((u, v)\)\(d(u, v) \leq 2\delta(u, v) + \omega_{u, v}\)\(O(n^{\frac 32})\) 空间代表着每次查询 \(d(u, v)\) 时可以仅通过查询这些信息快速回答。

\(\tilde O(m \sqrt n)\) 的 stretch \(2\) 近似算法是 \(\tilde O(n^{2.032})\) 的 stretch \(2\) 近似算法的一项关键材料。

如果我们把原先的无权图上的 \((2, 1)\) 算法迁移过来,得到的近似算法也是多加了一条边权值的 \(2\) 近似,但是这与 \((2, \omega)\) 不同,因为这一条边并不一定在最短路上。

\(p_S(v)\) 表示 \(S\) 中离 \(v\) 最近的点(如果有多个,选择任意一个),令 \(\delta(v, S)\) 表示 \(v\)\(S\) 的距离。

给定 \(S\),我们可以通过 Dijkstra 在 \(O(m + n \log n)\) 时间内对每个 \(v\) 算出 \(p_S(v), \delta(v, S)\)

我们在无权图上的 \((2, 1)\) 近似中使用到了这样的做法:估计 \(u\)\(v\) 的最短路时,我们只考虑一侧达到最优,用 \(\min(\delta(u, p_S(u)) + \delta(p_S(u), v), \delta(u, p_S(v)) + \delta(p_S(v), v))\) 作为答案。接下来的若干做法将会沿用这一想法,不过挖掘更多性质,以在近似效果上有所不同。

可能有人会想,在原先的算法中,我们使用了 \(\delta(u, x) + \delta(x, v)\) 来估计 \(\delta(u, v)\),正确性证明类似于 \(\delta(u, x) \leq \frac 12(\delta(u, v) + 1), \delta(x, v) \leq \delta(x, u) + \delta(u, v) \Rightarrow \delta(u, x) + \delta(x, v) \leq 2 \delta(u, v) + 1\),这是否对 \(\delta(x, v)\) 来说太不公平了?因为 \(\delta(u, x)\)\(\delta(x, v)\) 的位置理应是对等的。答案是,如果我们想要得到更快的做法,就只能利用一边的信息,因为利用两边的信息依赖于 \((\min, +)\) 矩阵乘法。不过需要指出的是,即使 \((\min, +)\) 矩阵乘法没有 \(O(n^{2.9999})\) 的做法,我们还是能将这个问题做到 \(O(n^{2.5})\),这说明 \(n \times n\)\((\min, +)\) 矩阵乘法对其并没有约束力。

一个更严谨的结果是,如果我们想要在最短路近似上做到优于 \(2\) 的近似比,那么 \(01\) 矩阵乘法不难于它。如果我们想要计算 \(A \times B\),其中 \(A, B\)\(n \times m, m \times k\)\(01\) 矩阵,那么,建一张 \(n + m + k\) 个点的图,第一排 \(n\) 个点,第二排 \(m\) 个点,第三排 \(k\) 个点,前两排之间的邻接矩阵为 \(A\),后两排之间的邻接矩阵为 \(B\),第一排与第三排、同一排之间不练边。那么如果第一排的 \(i\) 到第三排的 \(j\) 距离为 \(2\)\(A \times B\)\((i, j)\) 结果为 \(1\),当结果为 \(0\) 时,第一排的 \(i\) 到第三排的 \(j\) 距离至少为 \(4\)。因此如果我们能够区分 \(i, j\) 的距离是 \(2\) 还是 \(\geq 4\),我们就能够解决 \(01\) 矩阵乘法。

如果我们仔细考虑这里的情况,当我们估计 \(\delta(u, v)\) 时,使用第二排的中间点 \(x\),那么如果 \(\delta(u, x) = 1, \delta(x, v) = 3\),我们并不能区分这是因为选择了不恰当的 \(x\),还是因为 \(u, v\) 之间的距离就是 \(> 2\),除非我们选上所有的 \(x\),也即直接计算了矩阵乘法。此时 \(\delta(x, v) \leq \delta(x, u) + \delta(u, v)\) 是紧的。

小于 \(2\) 近似比的算法都是难的,而 stretch \(3\)\((2, \omega)\) 近似已经做到了 \(\tilde O(n^2)\),因此剩下的唯一的问题便是 stretch \(2\) 是否也能做到 \(\tilde O(n^2)\)。目前仍然没有人知道。

我们先把之前已有的算法列出来:

算法 0.1 (带权图上的 \(\tilde O(n^{\frac 73})\) stretch \(3\) 近似)

对图 \((V, E)\),令

  • \(\mathrm{ball}(v)\) 表示离 \(v\) 最近的 \(b\) 个点。对每个 \(v\) 寻找 \(\mathrm{ball}(v)\) 的时间复杂度为 \(O(nb^2)\)

  • \(D\) 是大小为 \(\tilde O\left(\frac nb\right)\) 的关键点集,使得每个 \(\mathrm{ball}(v) \cap D \neq \emptyset\)

对每个 \(D\) 跑完整的 Dijkstra,得到 \(\delta(D \times V)\)

对于 \(u \in D \vee v \in D \vee v \in \mathrm{ball}(u)\)\(d(u, v) = \delta(u, v)\)

否则,考虑 \(w \in \mathrm{ball}(u) \cap D\)\(d(u, v) = \delta(u, w) + \delta(w, v)\)

这是一个 stretch \(3\) 近似。

时间复杂度为 \(\tilde O\left(nb^2 + \frac{n^3}b\right)\),令 \(b = n^{\frac 23}\),最终时间复杂度为 \(\tilde O(n^{\frac 73})\)

算法 0.2 (无权图上的 \((2, 1)\) 近似)

对图 \((V, E)\),令

  • \(d_i = 2^i\)\(0 \leq i \leq \log n\)

  • \(V_i\) 是度数 \(\geq d_i\) 的所有点。

  • \(D_i\) 是一个大小为 \(\tilde O\left(\frac n{d_i}\right)\) 的关键点集,使得每一个 \(V_i\) 中的点都与至少一个 \(D_i\) 中的点相邻。

  • \(E_i\)\(u \notin V_i \vee v \notin V_i\) 的所有边 \((u, v)\)\(|E_i|\leq n{d_i}\)

  • \(E^*\) 是每个 \(V_i\) 中的点和任一 \(D_i\) 中的点连接的边集。\(|E^*| = \tilde O(n)\)

用 BFS 在 \((V, E_i \cup E^*)\) 上计算 \(\delta_i(D_{i-1} \times V)\)\(1 \leq i \leq k\),时间复杂度为 \(\tilde O\left(\frac{n^2d_i}{d_{i-1}}\right)\)

考虑将 \(d(u, v) = \min\limits_{1 \leq i \leq k}\{\delta_i(u, u'_i) + \delta_i(u'_i, v), \delta_i(u, v'_i) + \delta_i(v'_i, v)\}\) 作为答案,其中 \(u'_i = \operatorname{argmin}\limits_{w \in D_i} \delta_i(u, w), v'_i = \operatorname{argmin}\limits_{w \in D_i} \delta_i(w, v)\),也即只考虑一侧。

  • 考虑 \(u, v\) 最短路上度数最大的点 \(x\),令 \(i\) 满足 \(d_{i-1} \leq \operatorname{deg}(x) < d_i\),则 \(x \in V_{i-1}, x \notin V_i\),因此最短路上的所有边 \(\in E_i\)。设关键点 \(w \in D_{i-1}\)\(x\) 相邻,则 \(\delta_{i-1}(u, u') \leq \delta(u, x) + 1, \delta_{i-1}(v', v) \leq \delta(x, v) + 1\)。如果我们按照这样做,只会得到一个 \((2, 2)\) 近似,因为 \(x\) 有可能恰好处于最短路的中点,导致两边都取到上界。但是我们发现由于 \(E_i\) 的定义是 \(u \notin V_i \vee v \notin V_i\),我们可以找到度数第二大的点 \(x'\),令 \(i'\) 满足 \(d_{i' - 1} \leq \operatorname{deg}(x') < d_{i'}\),那么最短路地所有边也 \(\in E_{i'}\)。因此,

    • \(\delta(u, v)\) 为偶数时,一定存在不为最短路中点的 \(x^*\),满足,\(\delta(u, x^*) \leq \frac 12 \delta(u, v) \color{red}{- 1}\)\(\delta_{i-1}(u, u') \leq \frac 12\delta(u, v)\)\(\delta_{i-1}(u', v) \leq \delta_{i-1}(u', u) + \delta(u, v)\),因此 \(\delta_{i-1}(u, u') + \delta_{i-1}(u', v) \leq 2 \delta(u, v)\)
    • \(\delta(u, v)\) 为奇数时,\(\delta(u, x) \leq \frac 12 (\delta(u, v) -1)\)\(\delta_{i-1}(u, u') \leq \frac 12(\delta(u, v)+1)\)\(\delta_{i-1}(u', v) \leq \delta_{i-1}(u', u) + \delta(u, v)\),因此 \(\delta_{i-1}(u, u') + \delta_{i-1}(u', v) \leq 2 \delta(u, v) + 1\)。不难发现取到上界当且仅当 \(x, x'\) 是最短路最中间的两个点。

因此这是一个 \((2, 1)\) 近似。

时间复杂度为 \(\tilde O(n^2)\)

\((2, \omega)\) 近似算法的想法和上面两个算法都有联系。首先,它为了做到 \(\tilde O(n^2)\),只能考虑将一侧达到最优,同时他的近似比证明类似于 stretch \(3\)\(\mathrm{ball}\) 的概念,即,保证一个邻域的最短路的精确值,其他的点用邻域的边界上的关键点转移,相较于 stretch \(3\) 它的优化点在于,我们发现,我们不需要为每一个 \(u\) 设立一个 \(\mathrm{ball}(u)\),这个属性可以下放到边上。这是本篇论文最重要的概念,某种意义上是唯一的优化点。

定义 集合 \(\mathcal E_S(v)\) 为所有边权小于 \(\delta(v, S)\) 的与 \(v\) 相邻的边,如果 \(v \in S, \mathcal E_S(v) = \emptyset\)。令 \(\mathcal E_S = \bigcup_{v \in V} \mathcal E_S(v)\)

引理 对于 \(\delta(u, v) < \delta(u, p_S(u))\) 的所有 \(v\)\((V, \mathcal E_S)\) 保留了 \((u, v)\) 的一条最短路。\((V, \mathcal E_S \cup E(p_S(u)))\) 保留了 \((u, p_S(u))\) 的最短路,其中 \(E\) 表示全部邻边。

这不难通过归纳法证明。这条性质与我们所需要的性质是一致的。

引理 如果我们将图中每个点以 \(q\) 的概率选入 \(S\) 中(\(0 < q < 1\)),那么 \(\mathbb E[|\mathcal E_S|] = O(n / q)\)

证明 我们分每个点考虑。如果 \(p_S(v)\)\(E(v)\) 中的点,那么边权小于这一条边的会被加入,这是一个几何分布,因此期望加入 \(O(1 / q)\)。对于其他情况,直接放缩到加入整个 \(E(v)\),这样若 \(|E(v)| = d\),它对期望的贡献是 \(d (1 - q)^d\),这个函数关于 \(d\) 的最大值是 \(O(1 / q)\) 的。或者,可以直接观察到的是,在第一种情况中期望加入的点数与 \(v\) 的度数无关,因此可以加入许多虚点,直到虚点的个数足以表达第二种情况中加入点数的期望,整体的 \(O(1 / q)\) 总是不会变的。

这非常符合我们的预期。原先我们需要 \(nb^2\) 来得到 \(\mathrm{ball}(*)\),现在我们只需要线性时间来得到 \(\mathcal E_S\)。接下来要做的便是把上述两个算法照搬。

算法 1 (带权图上的 \(\tilde O(n^2)\)\((2, \omega)\) 近似)

\(S_0 = V \supseteq S_1 \supseteq \ldots \supseteq S_{k - 1} \supseteq S_k = \emptyset\),其中 \(S_i\) 通过将 \(S_{i - 1}\) 中的每个元素以 \(|S|^{-1/k}\) 的概率加入得到。令 \(k = \lceil \log n \rceil\)

\(0 \leq i < k\)

  • 对所有 \(u \in V\),计算 \(\delta(u, S_i)\)\(p_i(u)\)
  • 对每个 \(s \in S_i\),在 \((V, \mathcal E_{S_{i + 1}} \cup E(s))\) 上跑 Dijkstra,结果记作 \(\hat \delta_i(s, *)\)

\(\min_{0 \leq i < k} (\delta(u, p_i(u)) + \hat \delta(p_i(u), v), \delta(v, p_i(v)) + \hat \delta(p_i(v), u))\) 作为 \(u, v\) 的答案。

\(j\) 满足 \((u, v)\) 最短路上所有的边 \(P_{uv}\)\(\mathcal E_{S_{j + 1}}\) 中但至少有一条边不在 \(\mathcal E_{S_j}\) 中,由于 \(S_0 = V, S_k = \emptyset\)\(\mathcal E_{S_0} = \emptyset, \mathcal E_{S_k} = E\),这样的 \(j\) 一定存在。假设这一条边为 \((x, y)\)。根据引理,我们有 \(\delta(u, p_j(u)) \leq \delta(u, y)\)\(\delta(v, p_j(v)) \leq \delta(v, x)\),因此 \(\delta(u, p_j(u)) + \delta(v, p_j(v)) \leq d(u, v) + \omega(x, y)\)。不失一般性地假设 \(\delta(u, p_j(u)) \leq \delta(v, p_j(v))\),则有 \(\delta(u, p_j(u)) \leq \frac 12(d(u, v) + \omega(x, y))\)

由于 \(\mathcal E_{S_j} \subseteq \mathcal E_{S_{j + 1}}\)\((p_j(u), u)\) 的最短路将会在 \((\mathcal E_{S_{j + 1}} \cup E(s))\) 中被保留。因此有 \(\hat \delta(p_j(u), v) \leq \delta(p_j(u), u) + \delta(u, v)\)

整理后有 \(\delta(u, p_j(u)) + \hat \delta(p_j(u), v) \leq 2 \delta(u, v) + \omega_{uv}\)

因此这是一个 \((2, \omega)\) 近似。

\(\mathbb E|S_i| = n^{1 - i / k}\),因此每一层的 Dijkstra 总复杂度均为 \(\tilde O(n^{2+ 1 / k})\)。当 \(k = \log n\) 时,总复杂度为 \(\tilde O(n^2)\)

将其与 stretch \(3\) 的算法作比较,我们发现在 stretch \(3\) 中,\(\operatorname{ball}\) 是一个单侧的信息,算法中并没有考虑 \(\operatorname{ball}(u), \operatorname{ball}(v)\) 如何覆盖 \((u, v)\) 的最短路,因此只能得到一倍而非半倍的 \(\delta(u, p(u))\)

\(\operatorname{ball}_j(u) := \{x \in V \mid \delta(v, x) < \delta(v, S_j)\}\)。若边 \((x, y)\) 满足 \(x, y \in \operatorname{ball}_j(u)\),则 \((x, y) \in \mathcal E_{S_j}\)

\((2, \omega)\) 的算法中,我们分了许多层,这是因为我们要用两个 \(\operatorname{ball}\) 覆盖 \(P_{uv}\)\(P_{uv} \subseteq \mathcal E_{S_{j + 1}}\) 要求关键点更疏松,而 \(\delta(u, p_j(u)) + \delta(v, p_j(v)) \leq d(u, v) + \omega(x, y)\) 要求关键点更密集。具体地,

  • 如果 \(\operatorname{ball}_j(u) \cap \operatorname{ball}_j(v) \neq \emptyset\)\(P_{uv} \subseteq \mathcal E_{S_j}\),但是 \(\delta(u, p_j(u)) + \delta(v, p_j(v))\) 得不到保证。

  • 否则,如果存在 \(z \in P_{uv}, z \notin \operatorname{ball}_j(u) \cup \operatorname{ball}_j(v)\),则 \(\delta(u, p_j(u)) + \delta(v, p_j(v)) \leq \delta(u, z) + \delta(z, v) = \delta(u, v)\),但此时 \(P_{uv}\) 不一定在 \(\mathcal E_{S_j}\) 中。

  • 否则,一定是 \(\operatorname{ball}_j(u), \operatorname{ball}_j(v)\) 不交地覆盖了 \(P_{uv}\),令 \((x, y)\) 满足 \(x \in \operatorname{ball}_j(u), y \in \operatorname{ball}_j(v)\)。当且仅当是这种情况时,上述的算法只能做到 \(\delta(u, v) \leq 2 d(u, v) + \omega(x, y)\)

此时,我们可以令 \(j\) 继续向下,直到 \(\operatorname{ball}_{j'}(u), \operatorname{ball}_{j'}(v)\) 不再覆盖 \(P_{uv}\) 上所有的点了,那么 \(P_{uv}\) 除了一条边 \((x, y)\) 都在 \(\mathcal E_{S_{j' + 1}}\) 中,而此时 \(\delta(u, p_j(u)) + \delta(v, p_j(v)) \leq \delta(u, v)\),这样我们就做到了 \(2\) 近似。

算法 2 (带权图上的 \(\tilde O(m \sqrt n)\)\(2\) 近似)

\(S_0 = V \supseteq S_1 \supseteq \ldots \supseteq S_{k - 1} \supseteq S_k = \emptyset\)\(k = \lceil \log n \rceil\)

\(0 \leq i < k\)

  • 对所有 \(u \in V\),计算 \(\delta(u, S_i)\)\(p_i(u)\)
  • 对所有 \(u \in V \setminus S_k\),计算 \(\operatorname{ball}_i(u)\)
  • 对每个 \(u \in V \setminus S_k\),每个 \(x \in \operatorname{ball}_i(u)\)\(x\) 的每个邻居 \(y\),令 \(d[p_i(u), y] \leftarrow \min(d[p_i(u), y], \delta(u, p_i(u)) + \delta(u, x) + \omega(x, y))\)
  • 对每个 \(s \in S_i\),在 \((V, \mathcal E_{S_{i + 1}} \cup d[s])\) 上跑 Dijkstra,结果记作 \(\hat \delta_i(s, *)\)

\(\min_{0 \leq i < k} (\delta(u, p_i(u)) + \hat \delta(p_i(u), v), \delta(v, p_i(v)) + \hat \delta(p_i(v), u))\) 作为 \(u, v\) 的答案。

\(j\) 满足 \((u, v)\) 最短路上所有的边 \(P_{uv}\)\(\mathcal E_{S_{j + 1}}\) 中但至少有一条边不在 \(\mathcal E_{S_j}\) 中,假设这一条边为 \((x, y)\),那么 \(x \in \operatorname{ball}_j(u), y \notin \operatorname{ball}_j(u)\),前者根据引理是显然的,后者是因为 \(\omega(x, y) \geq d(x, p_j(x)) \Rightarrow d(u, x) + \omega(x, y) \geq d(u, x) + d(x, p_j(x)) \geq d(u, p_j(u))\)。因此 \(\operatorname{ball}\)\(\mathcal E\) 是双向对应的关系。

  • 如果 \(y \notin \operatorname{ball}_j(v)\),我们有 \(\delta(u, p_j(u)) \leq \delta(u, y), \delta(v, p_j(v)) \leq \delta(y, v)\),因此 \(\delta(u, p_j(u)) + \delta(v, p_j(v)) \leq d(u, v)\)。不失一般性地假设 \(\delta(u, p_j(u)) \leq \delta(v, p_j(v))\),则有 \(\delta(u, p_j(u)) \leq \color{red}{\frac 12d(u, v)}\)

    由于 \(\mathcal E_{S_j} \subseteq \mathcal E_{S_{j + 1}}\)\((p_j(u), u)\) 的最短路将会在 \((\mathcal E_{S_{j + 1}} \cup E(s))\) 中被保留。因此有 \(\hat \delta(p_j(u), v) \leq \delta(p_j(u), u) + \delta(u, v)\)

    整理后有 \(\delta(u, p_j(u)) + \hat \delta(p_j(u), v) \leq 2 \delta(u, v)\)

  • 如果 \(y \in \operatorname{ball}_j(v)\),找到最大的 \(j' < j\) 使得 \(x \notin \operatorname{ball}_{j'}(u) \vee y \notin \operatorname{ball}_{j'}(v)\)。由于 \(S_0 = V, \forall u \in V, \operatorname{ball}_0(u) = \emptyset\),这样的 \(j'\) 总是存在。

    此时有 \(\delta(u, p_{j'}(u)) + \delta(v, p_{j'}(v)) \leq d(u, v)\)

    由于 \(P_{uv}\) 只有一条边 \((x, y) \notin \mathcal E_{S_{j' + 1}}\) 中,\(P_{yv} \subseteq \mathcal E_{S_{j' + 1}}\)。因此有 \(\hat \delta(p_j(u), v) \leq d[p_i(u), y] + \delta(y, v) \leq \delta(u, p_i(u)) + \delta(u, v)\)

    整理后有 \(\delta(u, p_j(u)) + \hat \delta(p_j(u), v) \leq 2 \delta(u, v)\)

因此这是一个 \(2\) 近似。

如果我们将图中每个点以 \(q\) 的概率选入 \(S\) 中(\(0 < q < 1\)),则 \(\forall u, \mathbb E[\operatorname{ball}(u)] \leq 1/q\)

\(x\) 出现在了 \(\operatorname{ball}_j(u)\) 中共 \(t(x)\) 次,那么计算 \(\operatorname{ball}(u)\) 以及枚举 \(y\) 的复杂度均为 \(O\left(\sum_{x \in V} t(x) \operatorname{deg}(x)\right)\)。易知 \(\{u \mid x \in \operatorname{ball}_j(u)\} = \{u \mid \delta(u, x) < \delta(u, S_j)\}\),称其为 \(C_{S_j}(x)\)

定理 给定 \(q\)\(0 < q < 1\)),可以在期望 \(O(m / q \log n)\) 的时间内找到一个大小为 \(O(nq \log n)\) 的集合 \(S\),使得 \(\forall x \in V, |C_S(x)| \leq 1 / q\)

\(S_i\) 的构造如下:先找到大小为 \(O(\sqrt n)\) 的集合 \(S\),满足 \(\forall x \in V, |C_S(x)| \leq \sqrt n \log n\),再构造 \(A_0 = V \supseteq A_1 \supseteq A_2 \supseteq \ldots \supseteq A_k\),其中 \(A_i\) 通过将 \(A_{i - 1}\) 中的每个元素以 \(n^{-1/2k}\) 的概率加入得到。最终令 \(S_i = A_i \cup S\)。这样 \(|A_i|\) 主导了集合大小,因此每两层之间的集合大小比例也得到了保证。

此时计算 \(S\) 的复杂度为 \(O(m \sqrt n)\),计算 \(\operatorname{ball}\) 的复杂度为 \(O(m \sqrt n)\),枚举 \(y\) 的复杂度为 \(\tilde O(m \sqrt n)\),运行最后一层 \(S_k\) 的复杂度为 \(\tilde O(m \sqrt n)\)。因此总复杂度为 \(\tilde O(m \sqrt n)\)

我们现在证明上文关于 \(C(x, S)\) 的定理。

定义 \(C_A(x) = \{v \in V \mid \delta(v, x) < \delta(v, A)\}, \operatorname{ball}_A(v) = \{x \in V \mid \delta(v, x) < \delta(v, A)\}\).

\(x \in \operatorname{ball}_A(v) \Leftrightarrow v \in C_A(x)\),因此

\[\mathbb E\left[\sum_{w \in W} |C_A(w)|\right] = \mathbb E\left[\sum_{v \in V} |\operatorname{ball}_A(w) \cap W|\right] \]

而对于右式,我们只要以 \(q'\) 的概率将 \(w \in W\) 选入 \(A\) 中,它就 \(\leq n / q'\)。因此我们可以很直接地得到 \(\mathbb E_{v \in V} \mathbb E\left[\sum_{w \in W} |C_A(w)|\right] \leq 1/q\)。问题在于这是一个平均意义的结果。

\(W_0 = V, A_0 = \emptyset\)\(W_i = \{w \in V \mid |C_{A_i}(w)| > n / q\}\),即不满足条件的所有 \(w\)。每次以 \(4q\) 的概率将 \(w \in W_i\) 加入 \(A_{i + 1}\)。则有

\[\mathbb E\left[\sum_{w \in W_i} |C_{A_i}(w)|\right] = \mathbb E\left[\sum_{v \in V} |B_{A_i}(w) \cap W_i|\right] = \frac{n|W_i|}{4q} \]

根据 Markov 不等式,有 \(\frac 12\) 的概率有

\[\sum_{w \in W_i}|C_{A_i}(w)| \leq \frac {n|W_i|}{2q} \]

\(W_{i + 1} \subseteq W_i\),因此

\[\frac{n|W_{i + 1}|}q \leq \sum_{w \in W_i} |C_{A_i}(w)| \leq \frac{n|W_i|}{2q} \]

因此每次有 \(\frac 12\) 的概率 \(|W_i|\) 减半。我们因此只需要 \(\log n\) 轮便能让 \(W_i = \emptyset\)。期望加入了 \(8nq \log n\) 个点。

也就是说,考虑那些没有满足条件的 \(W_i\) 和一个 \(x \in V\),如果最初有许多 \(w \in W_i\) 满足 \(x \in C_A(w)\),现在考虑离 \(x\) 最近的加入了 \(A\) 的那个 \(w^*\),在它之后的所有 \(w\) 都把 \(x\)\(C(w)\) 中剔除掉了,因此降速是根号的。

对于 \(3\) 近似,时间上做到 \(O(n^2)\) 是简单的,因为 \((2, \omega)\) 近似已经是一个 \(3\) 近似了。但是想要做到 \(O(n^{3/2})\) 空间查询,我们发现,第 \(i\) 层的空间为 \(O(n |S_i|)\),每一层的空间利用并不均匀。因此我们把前若干轮用另一种算法解决。选择一个大小为 \(n^{-\frac 12}\) 的集合 \(S\),计算 \(\operatorname{ball}_S(u)\),如果 \(v \in \operatorname{ball}_S(u) \vee u \in \operatorname{ball}_S(v)\),我们可以利用一个双层哈希表 \(O(1)\) 回答 \(\delta(u, v)\),其他情况通过令 \(S_0 = S\) 解决。

算法 2 (带权图上的 \(O(\min(m \sqrt n, n^2))\) 时间、\(O(n^{\frac 32})\) 空间 \(3\) 近似)

将图中每个点以 \(n^{-\frac 12}\) 的概率加入 \(S\) 中。

对所有的 \(u \in V\),计算 \(\operatorname{ball}_S(u)\)

\(S_0 = S \supseteq S_1 \supseteq \ldots \supseteq S_{k - 1} \supseteq S_k = \emptyset\),其中 \(S_i\) 通过将 \(S_{i - 1}\) 中的每个元素以 \(|S|^{-1/k}\) 的概率加入得到。\(k = \lceil \log |S| \rceil\)

\(0 \leq i < k\)

  • 对所有 \(u \in V\),计算 \(\delta(u, S_i)\)\(p_i(u)\)
  • 对每个 \(s \in S_i\),在 \((V, \mathcal E_{S_{i + 1}} \cup E(s))\) 上跑 Dijkstra,结果记作 \(\hat \delta_i(s, *)\)

\(v \in \operatorname{ball}_S(u)\),使用双层哈希表 \(O(1)\) 查询 \(\delta(u, v)\),否则将 \(\min_{0 \leq i < k} (\delta(u, p_i(u)) + \hat \delta(p_i(u), v), \delta(v, p_i(v)) + \hat \delta(p_i(v), u))\) 作为 \(u, v\) 的答案。

\(j\) 满足 \((u, v)\) 最短路上所有的边 \(P_{uv}\)\(\mathcal E_{S_{j + 1}}\) 中但至少有一条边不在 \(\mathcal E_{S_j}\) 中,如果不存在这样的 \(j\),说明 \(P_{uv} \subseteq \mathcal E_{S_0}\),因此 \(v \in \operatorname{ball}_S(u)\)。假设这一条边为 \((x, y)\)。根据引理,我们有 \(\delta(u, p_j(u)) \leq \delta(u, y)\)\(\delta(v, p_j(v)) \leq \delta(v, x)\),因此 \(\delta(u, p_j(u)) + \delta(v, p_j(v)) \leq d(u, v) + \omega(x, y)\)。不失一般性地假设 \(\delta(u, p_j(u)) \leq \delta(v, p_j(v))\),则有 \(\delta(u, p_j(u)) \leq \frac 12(d(u, v) + \omega(x, y))\)

由于 \(\mathcal E_{S_j} \subseteq \mathcal E_{S_{j + 1}}\)\((p_j(u), u)\) 的最短路将会在 \((\mathcal E_{S_{j + 1}} \cup E(s))\) 中被保留。因此有 \(\hat \delta(p_j(u), v) \leq \delta(p_j(u), u) + \delta(u, v)\)

整理后有 \(\delta(u, p_j(u)) + \hat \delta(p_j(u), v) \leq 2 \delta(u, v) + \omega_{uv} \leq 3 \delta(u, v)\)

因此这是一个 \(3\) 近似。

计算 \(\operatorname{ball}_S(u)\) 的复杂度为 \(O(m \sqrt n)\),为了加速,我们可以对于每个 \(x\),将所有出边 \((x, v)\) 按照 \(\delta(v, S) - \omega(x, v)\) 排序。从每个 \(u\) 开始 BFS 到 \(x\) 时,我们取出所有满足 \(\delta(u, x) + \omega(x, v) < \delta(v, S)\)\(v\),这是序列的一个前缀,而这同时是 \(v \in C_S(u)\) 的充要条件。而所有满足这个条件的 \(v\),由于 \(\omega(x, v) < \delta(v, S)\),复杂度不超过 \(\mathbb E[|\operatorname{ball}_S(u)||\mathcal E_S(u)|] \leq \mathbb E|\operatorname{ball}_S(u)|^2\),后者等于 \(\sum_{i=1}^{n - 1} i^2(1 - \sqrt n)^i \sqrt n \leq 2n\)。因此复杂度为 \(O\left(\min\left(m \sqrt n, n^2\right)\right)\)

总时间复杂度为 \(O\left(\min\left(m \sqrt n, n^2\right)\right)\),空间复杂度为 \(O(n^{3/2})\)

posted @ 2024-10-03 12:52  shiys22  阅读(164)  评论(0编辑  收藏  举报