[论文阅读报告] 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)\),令
对每个 \(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)\),令
用 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)\),也即只考虑一侧。
因此这是一个 \((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\),
将 \(\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\),
将 \(\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\) 是双向对应的关系。
因此这是一个 \(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)\),因此
而对于右式,我们只要以 \(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}\)。则有
根据 Markov 不等式,有 \(\frac 12\) 的概率有
而 \(W_{i + 1} \subseteq W_i\),因此
因此每次有 \(\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\),
若 \(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})\)。 |