[论文阅读报告] $(1 + \epsilon, \beta)$-Spanner Constructions for General Graphs, SICOMP '04 & Hopsets with Constant Hopbound, and Applications to Approximate Shortest Paths, FOCS '16

本篇文章同时介绍两篇论文,分别是

  • 任意无向无权图上的大小为 \(O(\epsilon^{-\log \kappa} n^{1 + 1 / \kappa})\)\((1 + \epsilon, \beta)\)-spanner 做法,其中 \(0 < \epsilon < 1\)\(\beta = \beta(\kappa, \epsilon) = \kappa^{\max(\log \log \kappa - \log \epsilon, 3)}\)\(n\) 无关,\(2 \leq \kappa = O(\log n)\) 为可自由调节的平衡常数。
  • 任意无向有权图上的大小为 \(O(n^{1 + 1 / \kappa} \log \Lambda)\)\((\beta, \epsilon)\)-hopset 做法,其中 \(\Lambda\) 表示图的直径,\(\beta\)\(n\) 无关。

一张图 \(G\)\((1 + \epsilon, \beta)\)-spanner 是一个子图 \(H\),满足对每一对 \(u, v\)\(\operatorname{dist}_H(u, w) \leq \alpha \cdot \operatorname{dist}_G(u, w) + \beta\)。一张图 \(G\)\((\beta, \epsilon)\)-hopset 是一个边的集合,使得其加入原图后,每一对点都存在一条路径条数不超过 \(\beta\)\(1 + \epsilon\) 近似最短路。

他们共用了相同的 trick,称作 "superclustering-interconnection procedure",其实质是更一般化的分层度数分治,参考文章。后文将用 spannerhopset 来代替两篇论文。

这两篇论文相较于同问题下之前的论文,都强调了 \(\beta\)\(n\) 无关的特性,以及 \(\epsilon, \kappa\) 可以同时尽可能小。spanner 强调的是,对于任意接近 \(1\)\(1 + \epsilon\),以及同时任意接近线性的 \(O(n^{1 + 1 / \kappa})\),都存在与 \(n\) 无关的 \(\beta = \beta(\kappa, \epsilon)\),使得对所有无向无权图,都存在大小为 \(O(\epsilon^{-\log \kappa} n^{1 + 1 / \kappa})\)\((1 + \epsilon, \beta)\)-spanner。hopset 类似,不过在此之前已经有论文达到了同时尽可能小的 \(\epsilon, \kappa\),因此其最重要的改进在于于此同时令 \(\beta\)\(n\) 无关。注意 spanner保留 \(O(n^{1 + 1 / \kappa})\) 条原图的边,而 hopset添加 \(O(n^{1 + 1 / \kappa})\) 条新边。

在这两个问题中,有四件事情需要分析

  • 如何让近似比达到 \(1 + \epsilon\)
  • 如何让边数达到 \(\tilde O(n^{1 + 1 / \kappa})\)
  • 如何让 \(\beta\)\(n\) 无关。
  • 时间复杂度。

前三者是硬性要求。时间复杂度虽然也有方法优化到尽可能接近输入规模的 \(\tilde O(n^{2 + \mu})\),但这并不影响算法思路,可以最后再考虑。

之前我们看到过,对于 \(+2\) 近似,我们会选出一条最短路,对比我们找出的某一条路和这条最短路的差异,用三角形不等式来证明近似效果。同样地,\(1 + \epsilon\) 近似我们并没有太多的操作空间,于是我们也是先把一条最短路作为模板,在其之上我们能够找到一条略有偏离的路,用三角形不等式来证明近似效果。考虑到我们需要对 \(\frac 12 n(n - 1)\) 条最短路进行近似,但保留/加入的边只有 \(O(n^{1 + 1 / \kappa})\) 条,因此必定有许多条最短路共用了许多相同的边。结合这两个因素,我们设计

  • 为距离较长的路径加入一些共用的长边,此时,当我们近似 \(d(u, v)\) 时,我们想先先让 \(u, v\) 走到一条长边的两端 \(u', v'\),用 \(d(u, u') + d(u', v') + d(v', v)\) 做近似,其中 \(d(u, u')\), \(d(v', v)\) 较短,\(d(u', v')\) 较长。按照三角形不等式,两者的比例 \(\leq \epsilon / 4\) 时有 \(1 + \epsilon\) 近似。

  • \(d(u, v)\) 拆为 \(d(u_0 = u, u_1) + d(u_1, u_2) + \ldots + d(u_{k-1}, u_k = v)\),如果每一段有 \(1 + \epsilon\) 近似则 \((u, v)\) 也有 \(1 + \epsilon\) 近似。

这两个 trick 是这个算法的出发点。

对第一个 trick 来说,为了保证短边的距离足够短,同时降低加入的短边的条数,我们选择一部分点作为跳转点,将从这些跳转点同时开始进行 bfs / Dijkstra 得到的最短路树加入边集(仅对 spanner 来说,hopset 不需要再加一次),每个点只到离它最近的跳转点,而跳转点之间多多连边。此时,我们将点集划分为了若干个 cluster(连通的点的子集),每个 cluster 有一个中心,表示跳转点,cluster 内部用一棵生成树连接,中心与中心之间两两连接。

但是,这种做法有两个问题。首先,对于所有的点对,无论 \(d(u, v)\) 距离多远,\(d(u, u'), d(v', v)\) 的上界总是固定的,因此近似比随着 \(d(u, v)\) 变化,距离短的点对近似比更差,长的近似比更好。若 cluster 的半径是 \(r\),对于 \(d(u, v) < 4r / \epsilon\),这样的近似比并不能做到 \(1 + \epsilon\)。其次,如果我们想要在跳转点之间两两连边,跳转点的个数就不能超过 \(n^{1/2 + 1 / 2 \kappa}\),那么 cluster 的平均大小就至少得是 \(n^{1 / 2 - 1 / 2 \kappa}\),此时 cluster 内部的边并没有很短,而长边也并没有很长。事实上,我们并不能按照大小来划分 cluster,因为实际起作用的是直径。

也就是说,我们想要一种能够构造较为稳定的长短边比例的算法。

第一个问题是乘法近似比的问题,两篇文章的处理方式不同。因为在最终的算法里,cluster 的直径均为常数(\(\leq \kappa\),之后会详细展开),因此对于距离特别短的 \((u, v)\),在 spanner 中我们可以将短边算作加法误差。hopset 原本并没有引入加法误差,但我们可以把 \(d(u, v)\) 的值域分成若干段,每一段只考虑值域在这个区间内的 \((u, v)\),单独建立一个 hopset,最后将这些 hopset 的并集作为最终的集合,那么每一次考虑的距离有了下界,便可以把加法误差转化为乘法误差(注意由于我们会递归地使用分段近似,所谓的“距离太短”是相对的,因此并非把距离分段就能解决问题)。当距离分了 \(k\) 段时,边集大小会乘 \(k\),但这并不会影响其他参数与 \(n\) 无关的性质(之后会详细展开)。

第二个问题是边集大小的问题,我们使用一般化的分层度数分治方法来解决。首先我们需要使用分段近似的方法,让跳转点的两两连边变为距离不超过 \(\delta\) 的才连边,之后将分层度数分治方法一般化到每个点的一个邻域上(而不是邻居)。

较为粗糙地说,我们将很长的 \(d(u, v)\) 拆为 \(d(u_0 = u, u_1) + d(u_1, u_2) + \ldots + d(u_{k-1}, u_k = v)\),如果每一小段都有 \(1 + \epsilon\) 近似,那最终也可以达到 \(1 + \epsilon\) 近似。考虑其中每一小段时,我们可以限制,仅对于距离不超过 \(\delta\) 的两个 cluster 中心之间连边,这样我们大概使用 \(\lceil d(u, v) / \delta\rceil\) 次近似。

若每个点都向其距离不超过 \(\delta\) 的邻域连边,那么有一些点的邻域度数很大,连边条数太多,不过覆盖到很多的点;有一些点的邻域度数很小,连边条数有保证。因此我们回顾度数分治的方法:选择一些点作为关键点,这样当一个点的度数很大时,其中高概率会有一个关键点。因此关键点向周围的点连边,度数小的点两两连边,两种连边都远小于点数平方。近似一条路径时,要么是整条路径都是度数小的点,那么这些边都存在,要么是路径上有一些度数大的点,那么可以一步走到关键点,用关键点向其他点的连边来走。

我们选择一些 cluster 的中心作为关键点,关键点向 \(\delta\) 邻域内的 cluster 连边,邻域点数小的距离不超过 \(\delta\) 的 cluster 之间连边。近似一条路径时,要么是整条路径都是邻域点数小的 cluster,要么是路径上有一些邻域大的 cluster,可以用不超过 \(\delta\) 的代价走到关键点,用关键点的连边来走。

关键点并不需要向其他所有点连边。因为我们可以有多次误差累积,我们可以参考 surplus \((2k - 1)\)\(k\) 层的模式,把关键点之间的连边当作一个子问题,关键点只需要和一些关键点连边,两个关键点之间用再深一层的关键点近似其路径即可。因此我们回顾分层度数分治的方法:\(S_0 = V \supseteq S_1 \supseteq \ldots S_{k - 1} \supseteq S_k = \emptyset\) 表示每一层的关键点集,其中 \(S_i\) 通过将 \(S_{i - 1}\) 中的每个元素以一定概率加入得到。之后令 \(S_i\)\(\mathcal E_{S_{i + 1}}\) 上跑 Dijkstra,其中 \(\mathcal E_{S_{i + 1}}\) 表示所有边权小于 \(d(u, S_{i + 1})\) 的边 \((u, v)\)

我们令 \(\hat {\mathcal P}_i\) 表示第 \(i\) 轮的 cluster,则 \(\hat {\mathcal P}_i\) 之间的连边应该取决于 \(\hat {\mathcal P}_{i + 1}\)\(\delta_{i + 1}\),即,\(\hat {\mathcal P}_i\) 之间的连边应该是在第 \(i + 1\) 轮那些邻域点数小的距离不超过 \(\delta_{i + 1}\) 的连边。

我们来简要描述这个过程。当我们已经有一些 cluster \(\hat{\mathcal P}_i\) 时,我们将每个中心以 \(1 / \operatorname{deg}_i\) 的概率选入关键点集。之后考虑每个非关键点的 \(\delta_i\) 邻域,如果邻域中的点很多(\(c \operatorname{deg}_i \ln n\)),那么高概率至少有一个关键点。由此,我们依次进行如下操作

  • (superclustering) 从所有关键点开始进行 Dijkstra,限制其最大搜索深度为 \(\delta_i\)。将一个关键点 \(r_C\) 和其所有访问到的 cluster 中心对应的 cluster 合并为一个更大的 cluster(spanner 原论文并不用中心距离 \(\leq \delta_i\),而是两个 cluster 的距离 \(\leq \delta_i\),但并不重要因为第 \(i-1\) 轮 cluster 的半径是 \(\delta_i\) 的小量),中心设为 \(r_C\),将 \(r_C\) 和这些 cluster 中心连边(对于 hopset,建立一条新的边,直接连接两者;对于 spanner,保留 Dijkstra 走出来的最短路树上对应的边)。令 \(\hat {\mathcal S}_i\) 为所有这些新的 cluster,\(\hat {\mathcal U}_i\) 为没有被合并的旧的 cluster。
  • (interconnection) 将 \(\hat {\mathcal U}_i\) 中所有距离不超过 \(\delta_i\) 的 cluster 中心(spanner:距离不超过 \(\delta_i\) 的 cluster 的中心;hopset:距离不超过 \(\delta_i\) 的 cluster 中心)连边。

我们令 \(\hat {\mathcal P}_{i + 1} := \hat{\mathcal S}_i\),也即,\(\hat {\mathcal U}_i\) 不再进行合并。这样的过程进行 \(i_0\) 轮,之后进行最后一轮 \(\ell = i_0 + 1\),跳过 superclustering 只进行 interconnection,也即 \(\hat {\mathcal S}_\ell = \emptyset, \hat {\mathcal U}_\ell = \hat {\mathcal P}_\ell\)hopset 令轮数为 \(\ell\)spanner 令轮数为 \(J\)),那么 \(\{\hat {\mathcal U}_i\}\) 构成了对 \(V\) 的一个划分,我们将其作为最终的 cluster。

在 interconnection 中,每个点期望连出 \(\operatorname{deg}_i\) 条边,因为如果其 \(\delta_i\) 邻域的点很多,它高概率会包含在 \(\hat {\mathcal S}_i\) 中而非 \(\hat{\mathcal U}_i\)。而 superclustering 的连边构成了一棵森林。因此总的连边数为 \(O\left(|\hat {\mathcal P}_i| \operatorname{deg}_i\right)\)。我们发现这里 interconnection 的边数与 \(\delta_i\) 无关完全是由于首先进行了 superclustering,使得每个点的邻域在期望意义下较为松散。(spanner 的作者使用了更为确定性的做法,将 superclustering 的过程改为当图中存在点 \(u\) 使得其邻域的中心个数 \(\geq \operatorname{deg}_i\) 时,就将它们划为一个 cluster,再在剩下的点集上考虑。此时 interconnection 一个点至多连出 \(\operatorname{deg}_i - 1\) 条边)。在经典的分层度数分治中,分层是为了降低 Dijkstra 的复杂度,因为第 \(i\) 轮的关键点只需要在第 \(i + 1\) 轮得到的边集上进行 Dijkstra。这里分层是为了让连边数能够降到 \(O(n^{1 + 1 / \kappa})\),因为第 \(i\) 轮的 cluster 的邻域密度被第 \(i + 1\) 轮的关键点限制住。这个优化与近似比、\(\beta\) 的优化无关,但这会影响我们处理路径的模式,因此甚至会让近似比、\(\beta\) 更差。需要注意的是,最后一轮由于没有 superclustering,我们只能估计边数的上界为 \(|\hat {\mathcal P}_\ell|^2\)

现在我们考虑 \(\operatorname{deg}_i\) 的选取。考虑我们已知 \(|\hat {\mathcal P}_1| = n, \mathbb E|\hat{\mathcal P}_{i+1}| = \mathbb E|\hat{\mathcal P}_i| / \operatorname{deg}_i\),要求是 \(|\hat {\mathcal P}_\ell| \leq n^{(1 + 1 / \kappa) / 2}\),边数为 \(\sum_i |\hat {\mathcal P}_i| \operatorname{deg}_i = n \prod_{j < i} \frac 1{\operatorname{deg}_j} \cdot \operatorname{deg}_i\) 要尽可能小。如果要均衡每一轮的边数为 \(O(nD)\),那么有 \(\operatorname{deg}_i = D \cdot \prod_{j < i} \operatorname{deg}_{j}\)。如果想要让边数线性,可以令 \(D = 2\),得到 \(\operatorname{deg}_i = 2^{2^i}\),但是递归轮数就有 \(O(\log \log n)\),这样会破坏 \(\beta\)\(n\) 无关的性质,并且会让乘法误差累积。因此令 \(D = n^{1 / \kappa}\),得到 \(\operatorname{deg}_i = n^{2^i / \kappa}\),轮数为 \(\lfloor \log \kappa \rfloor\),边数为 \(O(n^{1 + 1 / \kappa} \log \kappa)\),并非线性但可以任意趋近于线性。如果想要消去 \(\log \kappa\),也可以让 \(D = n^{1 / \kappa} / 2^i\),这样边数为 \(O(n^{1 + 1 / \kappa})\)\(\operatorname{deg}_i = n^{2^i / \kappa} / 2^{2^i - 1}\),轮数为 \(\lfloor \log \kappa \rfloor + 1\)

若两个 cluster 是第 \(i\) 轮的 superclustering 新得到的,那么它们之间的连边是在第 \(i+1\) 轮的 interconnection 做出的,而这两者的比值需要是 \(O(\epsilon)\),这决定了 \(\delta_i\) 的选取。\(\delta_i\) 决定了每一层 superclustering 的速度,当 \(\delta_i\) 大时,新的 cluster 更大,连的边集中在一些点上;\(\delta_i\) 小时,新的 cluster 更小,连的边均摊到更多点上。整体来看,总连边条数并不会受影响(对 spanner 来说,这里的一条边对应图上的一条路径,因此 \(\delta_i\) 会线性地影响边数)。

具体来说,对 spanner,令 \(\hat D(\mathcal C_j)\) 表示第 \(j\) 轮输入的 cluster 的最大直径,\(\mathcal C_j\) 表示第 \(j\) 轮 superclustering 后得到的 cluster 集合,则 \(\hat D(\mathcal C_1) = 0, \hat D(\mathcal C_j') \leq 3 \hat D(\mathcal C_j) + 2 \delta_j\),因为要跨过三个 cluster 内部和两条连接 cluster 的路,最终的比值为 \(\hat D(\mathcal C_{j-1}) / \delta_j\),令其为 \(\epsilon\),解得当 \(\epsilon < 1/3\) 时有 \(\delta_j = O((1 / \epsilon)^j)\);对于 hopset 来说,令 \(R_i\) 表示 cluster 中心到最远点的距离(称为半径),则有 \(R_{i + 1} = R_i + \delta_i\),最终的比值为 \(R_{i - 1} / \delta_i\),解得 \(\delta_i = O(\delta_0 (1 / \epsilon)^i)\)。注意 \(\delta_0 = O(n)\)

在这个算法中,只有相同层的两个 cluster 之间会连边,但对一个任意的 \((u, v)\) 来说,它们所属的 cluster 可能是不同层的,因此我们不能直接地使用长边或是直接地分段近似,只能尽可能多地寻找相同层的 cluster。

在最坏情况下,我们应该将一条路径 \((u, v) = (u_0 = u, u_1, u_2, \ldots, u_d = v)\) 视作每个点包含在一个不同的 cluster 里 \(u_j \in U_{c_j}\),每个 cluster 属于一个层级 \(i_j\)

当所有的 \(u_i\) 都属于 \(\hat {\mathcal U}^{(i)} = \bigcup_{j \leq i} \mathcal U_j\) 时,我们称这条最短路为 \(\hat{\mathcal U}^{(i)}\)-clustered。此时我们将路径的点划分为若干小段 \(\hat L_1 \circ \hat L_2 \circ \ldots \circ \hat L_q\),满足 \(\bigcup_i L_i = \{u_0, \ldots, u_d\}\),每个 \(\hat L_i\) 的长度不超过 \(\delta_{i+1}\),但再加上 \(\hat L_i, \hat L_{i + 1}\) 中间的那一条边就不小于 \(\delta_{i+1}\)(也即,在不超过 \(\delta_{i+1}\) 的条件下尽可能远地划分),除了最后一段 \(\hat L_q\) 的长度任意。每一小段得到了一条近似最短路后,我们将它们连起来。

对于 hopset 来说,其保留了原图的所有边,因此只需要加上 \(\hat L_i, \hat L_{i + 1}\) 中间的那些边即可。对于 spanner 来说,两个 cluster 挨着并不代表可以从前一个 cluster 直接走到下一个 cluster,因此我们需要一个额外的处理。称一个 cluster 向外一圈的所有点的集合为其外壳,对于最终的 cluster 集合,有可能 cluster 的个数很多或者它们的外壳都很大,因此我们并不能对每个 cluster 的外壳全部连边。但是在一开始,当 cluster 还都是单点时,如果存在一个 cluster \(S\) 的外壳的单点 cluster 的个数超过 \(n^{1 / \kappa} |S|\),我们就把 \(S\) 向外扩一圈,作为一个新的 cluster \(S'\)。直到所有 cluster 的外壳点数都没有 \(n^{1 / \kappa}\) 倍,此时连边,连边条数不超过 \(n^{1 + 1 / \kappa}\)。但由于对外壳中的每个点只能让一个 cluster 内部的点向其连边(这样才能点数等于边数),我们并不能从任意位置跨越 cluster。

现在跨越 cluster 性质描述如下 (adjacency-preservation property):对两个通过 \(e = (u_1, u_2)\) 相邻的 cluster \(S_1, S_2\),要么存在 \(u_1' \in S_1\) 使得 \((u_1', u_2)\) 有边,要么存在 \(u_2' \in S_2\) 使得 \((u_1, u_2')\) 有边。这对应了我们先得到 \(S_1\) 并把 \(u_2\) 作为外壳的一个点还是先得到 \(S_2\) 并把 \(u_1\) 作为外壳的一个点。并且,两个 cluster 合并成一个大的 cluster 时这个性质仍然成立。此时在跨越两个 cluster 时,我们需要修改原本在 \(S\) 中的路线,使其先走向 \(u'\),这会导致误差增加,不过由于 cluster 的直径总是 \(\delta_{i+1}\) 的小量,这只会影响参数的常数系数,不会影响最终结果。

现在我们观察其中一小段 \(\hat L = (x, \ldots, y)\) 的情况。如果其是 \(\hat {\mathcal U}^{(i-1)}\)-clustered,可以使用归纳法直接得到结果。否则,其至少存在一个点 \(z \in \hat {\mathcal U}_{i}\)。如果只有一个这样的点,设 \(w_1, w_2\) 为与 \(z\) 相邻的靠近 \(x\) 方向和靠近 \(y\) 方向的点,那么 \((x, w_1), (w_2, y)\)\(\hat {\mathcal U}^{(i - 1)}\)-clustered,\(w_1 \to z \to w_2\) 可以直接花两步到达。否则,设 \(z_1, z_2\) 为最左和最右的 \(\hat {\mathcal U}_i\) 中的点,\(w_1, w_2\)\(z_1\) 靠近 \(x\) 方向和 \(z_2\) 靠近 \(y\) 方向相邻的点,则 \((x, w_1), (w_2, y)\)\(\hat {\mathcal U}^{(i - 1)}\)-clustered,\(w_1 \to z_1, z_2 \to w_2\) 可以花两步到达,\(z_1, z_2\) 之间可以用长边。

按照这样对最短路分类的话,有可能 \(d(u, v)\) 很短,但有一些点在很高的 \(\hat {\mathcal U}_i\) 之中,不过任何一段的近似误差都可以放到加法近似里,只有 \(\hat L_1 \circ \hat L_2 \circ \ldots \circ \hat L_q\)\(q > 1\) 我们才需要把加法转化为乘法近似。因此只有 \(d(u, v)\)\(\delta_{i+1}\) 匹配上时才会有乘法误差。

我们此时发现乘法误差随着递归的轮数线性地增长,若第 \(i\) 轮的乘法误差为 \(\epsilon_i\),则第 \(i + 1\) 轮的乘法误差为 \(\epsilon_i + k\epsilon\)。而轮数不管是多少近似总是成立的,因此轮数 \(\log \kappa\) 只起到了保证最后一轮 interconnection 的连边数的作用。

最后附上完整的算法流程和关键引理。


算法 1 (无向无权图 \(O(\epsilon^{-\log \kappa} n^{1 + 1 / \kappa})\)\((1 + \epsilon, \beta)\)-spanner)

\(\Gamma_{\ell}^{G'}(v) = \{u \in G' \mid d_{G'}(u, v) \leq \ell\}\) 表示 \(v\)\(G'\) 上距离阈值为 \(\ell\) 的的邻域,\(\Gamma^{G'}(v) = \Gamma^{G'}_1(v)\) 表示 \(v\) 的邻居,\(\Gamma_\ell(v) = \Gamma^G_\ell(v)\)。令 \(\Gamma^{G'}(U) = \{z \mid \exists u \in U \text{ s.t. } (u, z) \in E(G')\}\) 表示点集 \(U\) 的邻居。

如果一个点集的子集 \(C \subseteq V\) 是连通的,我们称它是一个 cluster。一个三元组 \((v, S, T)\) 被称为 spanned cluster,其中 \(S\) 是一个 cluster,\(v \in S\) 表示中心点,\(T\)\(S\) 的一棵生成树。

\(\Gamma_\ell^{\mathcal U}(S) = \{(v_i, S_i, T_i) \in \mathcal U \mid d(S_i, S) \leq \ell\}\) 表示一个 cluster \(S\) 的邻域。其中 \(d(U_1, U_2) = \min\{d(u_1, u_2) \mid u_1 \in U_1, u_2 \in U_2\}\)

Down part

  1. \(U \leftarrow V\) 表示未被处理的点,\(\mathcal G \leftarrow \empty\) 表示 cluster 集合,\(\mathcal S' \leftarrow \emptyset\)\(E(H) \leftarrow \emptyset\)

  2. \(U \neq \emptyset\) 时,

    • 任意选出一个点 \(v \in U\)\(S \leftarrow \{v\}\)
    • 重复操作:当 \(|S \cup \Gamma(S) \cap U| \geq n^{1 / \kappa}|S|\) 时,令 \(S \leftarrow S \cup \Gamma(S) \cap U\)
    • \(\hat S = S \cup \Gamma(S) \cap U\),令 \(T\)\(S\) 的任意一棵生成树,\(\mathcal S' \leftarrow \mathcal S' \cup \{(v, \hat S)\}\)\(\mathcal G \leftarrow \mathcal G \cup \{(v, S, T)\}\)\(U \leftarrow U \setminus S\)
  3. 对所有 \((v, \hat S) \in \mathcal S'\),将从 \(v\) 开始的任意一棵 BFS 树 \(T'\) 的所有边加入边集 \(H\)

\(J \leq \lceil \log \kappa \rceil\) 表示轮数,\(\Upsilon\) 表示一个充分大的常数,\(t_j = (\kappa - 2^{j - 1}) / (2^{j - 1} \kappa)\) 表示指数,\(\sigma_j = n^{t_{J - j} - t_{J - j+ 1}} = n^{2^{j - J}}\) 表示度数阈值,\(\tau_j = [\kappa t_{J + 1 - j}, \kappa t_{J - j})\ (1 \leq j < \kappa), \tau_J = [\kappa t_1, \kappa)\) 表示每一轮处理的半径区间,\(\delta_j = \Upsilon^{j / J}\) 表示邻域半径。

procedure Superclustering-Interconnection

输入:spanned partition \(\mathcal C\),参数 \(\sigma, \delta\)

输出:spanned partition \(\mathcal C'\),边集 \(H'\),未合并的 cluster 集合 \(\mathcal R\)

  1. \(\mathcal U \leftarrow \mathcal C\) 表示未被处理的 cluster 集合,\(\mathcal C' \leftarrow \emptyset\)

  2. 重复操作:当存在 \((v, S, T) \in \mathcal U\) 使得 \(|\Gamma_\delta^{\mathcal U}(S) \cap \mathcal U| \geq \sigma\) 时,

    • \(S' \leftarrow \bigcup_{(v_i, S_i, T_i) \in \Gamma_\delta^{\mathcal U}(S)} S_i\)
    • \(T' \leftarrow T\),之后对每个 \((v_i, S_i, T_i) \in \Gamma_{\mathcal U}(S)\)\(S_i\),求出 \(S\)\(S_i\)\(G\) 中的最短路 \(P_i\)\(E(T') \leftarrow E(T') \cup E(P_i) \cup E(T_i)\)
    • \(\mathcal C' \leftarrow \mathcal C' \cup \{(v, S', T')\}\)\(\mathcal U \leftarrow \mathcal U \setminus \Gamma_\delta^{\mathcal U}(S)\)\(E(H') \leftarrow E(H') \cup E(T')\)
  3. \(\mathcal R \leftarrow \mathcal U\)。对每一对满足 \(d_G(S_i, S_j) \leq \delta\)\((v_i, S_i, T_i), (v_j, S_j, T_j) \in \mathcal R\),计算 \(S_i, S_j\)\(G\) 中的最短路 \(P_{ij}\)\(E(H') \leftarrow E(H') \cup E(P_{ij})\)

  4. 返回 \((\mathcal C', \mathcal H', \mathcal R)\)

procedure Spanner-Constructions

  1. 通过 Down part 得到 \(\mathcal G, H\)

  2. \(\mathcal C' \leftarrow \emptyset\)。从 \(j = 1\)\(J - 1\)

    • \(\mathcal C_j \leftarrow \mathcal C' \cup \bigcup_{i \in \tau_j} \mathcal A_i(\mathcal G)\)
    • \((\mathcal C'_j, H'_j, \mathcal R_j) \leftarrow \textbf{Super.-Inter.}(\mathcal C, \sigma_j, 2 \delta_j)\)
    • \(E(H) \leftarrow E(H) \cup E(H'_j)\)
    • \(\mathcal C' \leftarrow \mathcal C'_j\)
  3. \(\mathcal R_J \leftarrow \mathcal C' \cup \bigcup_{i \in \tau_J} \mathcal A_i(\mathcal G)\)。对每一对满足 \(d_G(S_i, S_j) \leq 2\delta_J\)\((v_i, S_i, T_i), (v_j, S_j, T_j) \in \mathcal R\),计算 \(S_i, S_j\)\(G\) 中的最短路 \(P_{ij}\)\(E(H) \leftarrow E(H) \cup E(P_{ij})\)

  4. \(H\) 为最终的边集。

\(\Upsilon, J\) 恰当选取时,\(H\) 是一个 \((1 + \epsilon, \beta)\)-spanner。

分析

对 Down part 的分析

\(\operatorname{rad}(v, S, T) = \max\{d_{G(T)}(v, u) \mid u \in S\}\)\(\check S(\mathcal S) = \min_{S \in \mathcal S} |S|\)\(\mathcal A_i(\mathcal S) = \{(v, S, T) \in \mathcal S \mid \operatorname{rad}(v, S, T) = i\}\)\(\operatorname{diam}(v, S, T) = \max\{d_{G(T)}(u, w) \mid u, w \in S\}\)

引理 2.1\(0 \leq j \leq \kappa - 1\)\(\check S(\mathcal A_j(\mathcal G)) \geq n^{j / \kappa}\)

引理 2.2 \(|E(H)| = O(n^{1 + 1 / \kappa})\)

如果 \(\mathcal S\) 满足任意两个 \((v, S, T)\)\(S\) 不交,且 \(\cup S = V\),那么称 \(\mathcal S\) 是一个 spanned partition。

定义 2.3 若对于一个 spanned partition \(\mathcal S\) 和边集 \(H\)

  • 对于任意 \((v, S, T) \in \mathcal S\),在 \(H\) 中存在从 \(v\) 开始,覆盖 \(S\) 的 BFS 树 \(T'\)
  • 对于任意相邻的 \((v_1, S_1, T_1), (v_2, S_2, T_2) \in \mathcal S\),以及任意的 \(e = (u_1, u_2)\) 满足 \(u_1 \in S_1, u_2 \in S_2\),要么存在 \(u_2' \in S_2\) 使得 \((u_1, u_2') \in H\) 要么存在 \(u_1' \in S_1\) 使得 \((u_1', u_2) \in H\)。前者称为 \(e\)\(S_2\) 生成,后者称为由 \(S_1\) 生成。

则我们称 \(S\) 对边集 \(H\) 满足 adjacency-preserving 性质。此时有 \(d_H(u_1, u_2) \leq \operatorname{diam}(S) + 1\)

引理 2.4 \(\mathcal G\)\(H\) 满足 adjacency-preserving 性质。

引理 2.5 若 spanned partition \(\mathcal C\) 中一些 cluster 进行了合并,并把 BFS 树加入 \(H\) 得到 \(H'\),得到了 \(\mathcal C'\),且 \(\mathcal C\)\(H\) 满足 adjacency-preserving 性质,则 \(\mathcal C'\) 也满足。

\(\hat D(\mathcal C) = \max_{(v, S, T) \in \mathcal C} \operatorname{diam}(v, S, T)\)

对 cluster 直径的分析

引理 3.1 对于 \((\mathcal C', H', \mathcal R) \leftarrow \textbf{Super.-Inter.}(\mathcal C, \sigma, \delta)\),有 \(\hat D(\mathcal C') \leq 3 \hat D(\mathcal C) + 2 \delta\)

引理 3.3\(1 \leq j \leq J - 1\)

\[\begin{aligned}\hat D(\mathcal C_j') &\leq 2\left(3^j \kappa t_{J - 1}+ \sum_{l=1}^j 3^{j - l} \Upsilon^{l / J}\right) \\ \hat D(\mathcal C_j) &\leq 2\left(3^{j-1} \kappa t_{J - 1}+ \sum_{l=1}^{j-1} 3^{j - 1 - l} \Upsilon^{l / J}\right)\end{aligned} \]

说明:在最后,我们让 \(J = \lceil \log \kappa \rceil\)\(\lfloor \kappa t_j \rfloor = 0, \kappa t_{J - 1} < 2\),这说明 \(j = 1\) 时我们只选取单点 cluster 进行合并。\(J\) 尽可能大似乎是显而易见的,但论文仍然先保留了这一个参数。其次,我们应让 \(\Upsilon > 3\),这样 \(\hat D(\mathcal C_j')\) 和最大一层的 \(\delta_j\) 同阶,符合前文叙述。

证明 使用归纳法。对 \(j = 1\),有 \(\hat D(\mathcal C) < \hat D(\mathcal A_{t_{J - 1} \kappa}(\mathcal G)) \leq 2 t_{J - 1}\kappa\)

假设命题对 \(j\) 成立,考虑 \(j + 1\)

\[\hat D(\mathcal C_{j + 1}) = \max\left(\hat D(\mathcal C_j'), \hat D\left(\bigcup_{i \in \tau_{j+ 1}} \mathcal A_i(\mathcal G)\right)\right) \]

若第一项较大,对比命题中两式可知成立;若第二项较大,则

\[\hat D\left(\bigcup_{i \in \tau_{j+ 1}} \mathcal A_i(\mathcal G)\right) \leq 2 \kappa t_{J - (j+ 1)} \leq \frac \kappa{2^{J - j - 3}} = 2^{j-1} \frac \kappa{2^{J - 4}} \]

选取 \(\Upsilon^{1 / J} \geq \max(\kappa / 2^{J - 4}, 2)\),则有 \(\Upsilon^{j / J} \geq \Upsilon^{1 / J} \Upsilon^{(j - 1) / J} \geq (\kappa / 2^{J - 4})\cdot 2^{j-1}\)。因此

\[\hat D\left(\bigcup_{i \in \tau_{j+ 1}} \mathcal A_i(\mathcal G)\right) \leq \Upsilon^{j / J} \leq \sum_{l=1}^j 3^{j - l} \Upsilon^{l / j} \]

说明:做出这样的操作是因为,\(\delta\) 的选取是与 \(1 / \epsilon\) 相关的,并不在这一步做控制。最终我们的目的是覆盖完所有由 Down part 得到的 \(\mathcal G\),实际上只需要 \(\log_{1 / \epsilon} \kappa\) 步即可完成,但为了方便叙述,我们使用了 \(\log_2 \kappa\) 步,这样每一步引入的 \(\mathcal A\)(每轮直径变为 \(2\) 倍)就不会比上一轮的 \(\hat D(\mathcal C_j')\)(每轮直径变为 \(\Upsilon^{1 / J}\) 倍) 还要大,因此要求 \(\Upsilon^{1 / J} \geq 2\)。同时对 base case 也要成立,因此要求 \(\Upsilon^{1 / J} \geq \kappa / 2^{J - 4}\)

因此 \(\mathcal C_j' \to \mathcal C_{j+ 1}\) 的归纳过程成立。\(\mathcal C_{j + 1} \to \mathcal C_{j + 1}'\) 直接使用引理 3.1 即可得到。

推论 3.4\(1 \leq j \leq J\),有

\[\hat D(\mathcal R_j) \leq 2\left(3^{j - 1} \kappa t_{J - 1}+ \sum_{l = 1}^{j - 1} 3^{j - 1 - l} \Upsilon^{l / J}\right) \]

对边集大小的分析

仍然考虑 \((\mathcal C', H', \mathcal R) \leftarrow \textbf{Super.-Inter.}(\mathcal C, \sigma, \delta)\)

引理 3.5 \(\check S(\mathcal C') \geq \sigma \check S(\mathcal C)\)

引理 3.6 \(|E(H')| = O(n \sigma \delta / \check S(\mathcal C))\)

证明 根据定义有 \(|\mathcal C| \leq n / \check S(\mathcal C)\)。所有 superclustering 连接的最短路在以 cluster 为点,cluster 之间最短路为边形成的图中构成了一个森林,因此至多只有 \(|\mathcal C|\) 条边。每条最短路长度不超过 \(\delta\)。因此 superclustering 至多连了 \(n \delta / \hat S(\mathcal C)\) 条边。interconnection 时每个 cluster 至多向外连出 \(\sigma\) 条最短路,因此至多连了 \(n \sigma \delta / \hat S(\mathcal C)\) 条边。

说明:我们发现 superclustering 使用了很少的边,相比之下 interconnection 使用了 \(\sigma\) 倍的边,但我们并不需要平衡二者。因为 superclustering 的边对应着短边,interconnection 的边对应着长边,长边本就比短边更难构建。

引理 3.7\(1 \leq j \leq J - 1\)\(\check S(\mathcal C_j) \geq n^{t_{J - j + 1}}\)

证明 \(\sigma_j\)\(n^{t_{J - j + 1}}\) 的差分。\(\hat S(\mathcal C_j') \geq \hat S(\mathcal C_j) \sigma_j \geq n^{t_{J + 1 - j}} \cdot n^{t_{J - j} - t_{J + 1 - j}}\)

引理 3.8 procedure Spanner-Constructions 的第 2 步完成后,\(|E(H)| = O(\Upsilon n^{1 + 1 / \kappa})\)

证明 \(|\mathcal C_j| \leq n / \check S(\mathcal C_j) \leq n^{1 - t_{J - j + 1}}\)

\[|E(H_j)| \leq \delta_j n^{1 - t_{J - j+ 1}} \sigma_j = n^{1 - t_{J - j + 1}} n^{t_{J - j} - t_{J - j + 1}} \delta_j = n^{1 + t_{J - j} - 2t_{J - j + 1}} \delta_j \]

其中,

\[1 + t_{J - j} - 2 t_{J - j + 1} = 1 + \frac{\kappa - (2^{J - j - 1} - 1)}{2^{J - j - 1}\kappa} - 2 \cdot \frac{\kappa - (2^{J - j} - 1)}{2^{J - j} \kappa} = \frac{\kappa + 1} \kappa \]

实际上,\(t\) 的选取就是靠 \(1 + t_{J - j} - 2 t_{J - j + 1} = 1 + 1 / \kappa\) 解方程得到的。

\[|E(H)| \leq n^{1 + 1 / \kappa} \sum_{j=1}^J \delta_j \leq n^{1 + 1 / \kappa} \sum_{j=1}^J (\Upsilon^{1 / J})^j = O(\Upsilon n^{1 + 1 / \kappa}) \]

引理 3.9 procedure Spanner-Constructions 的第 3 步添加的边数是 \(O(\Upsilon n^{2 / \kappa})\)

说明:我们只需要让 \(|\mathcal R_J| = O(n^{(1 + 1 / \kappa) / 2})\) 即可,与现在的流程相比至多少一轮,不会影响最终结果。

推论 3.10 算法结束后,\(|E(H)| = O(\Upsilon n^{1 + 1 / \kappa})\)

对近似比的分析

引理 3.11 \(\bigcup_i \mathcal R_i\) 构成了一个 spanned partition,其对 \(H\) 满足 adjacency-preserving 性质。

引理 3.12\((u, w)\) 的一条最短路为 \(P_{u, w} = (u = u_0, u_1, \ldots, u_x = w)\),令 \((v_i, S_i, T_i)\) 为满足 \(u_i \in S_i\) 的 cluster。则对于任意 \(u_0' \in S_0, u_x' \in S_x\),有

\[d_H(u_0', u_x') \leq \sum_{i=0}^x (\operatorname{diam}(v_i, S_i, T_i) + 1) - 1 \]

证明 使用归纳法。考虑长度为 \(x + 1\) 的路径中 \(u_x\) 跨越到 \(u_{x+1}\) 的过程,若存在 \(u_x'\) 使得 \((u_x', u_{x + 1}) \in H\),则先将结论应用到 \(P_{u, u_x'}\),再从 \(u_x'\) 走到 \(u_{x + 1}\),这样只需要多一条边;若存在 \(u_{x+ 1}'\) 使得 \((u_x, u_{x + 1}') \in H\),则先走到 \(u_{x + 1}'\) 再走回 \(u_{x + 1}\),代价是 \(\operatorname{diam}(v_{x + 1}, S_{x+ 1}, T_{x + 1})\)

\(\mathcal Z = \bigcup_{i < t_J\kappa} \mathcal A_i(\mathcal G)\) 表示 \(\mathcal G\) 中没有被主程序处理的太小的 cluster(实际上不存在)。若路径 \(P\) 的所有点都在 \(\mathcal Z \cup \bigcup_{i=1}^j \mathcal R_i\) 中,我们称路径 \(P\) 是一条 class-\(j\) 路径。设 \(\gamma_j = \sum_{i=1}^j 2^i \hat D(\mathcal R_{j - i + 1})\)

引理 3.13\(1 \leq j \leq J\),任意存在 class-\(j\) 最短路的两点 \(u_j', u_j''\),有

\[d_H(u_j', u_j'') \leq d_G(u_j', u_j'')\left(2 \lfloor t_J \kappa \rfloor + 1 + \sum_{i=1}^j \frac {\gamma_i}{\Upsilon^{i / J}}\right) + \gamma_j \]

同时,对任意和 \(u_j', u_j''\) 在同一个 cluster 里的 \(v_j', v_j''\)

\[d_H(v_j', v_j'') \leq d_G(u_j', u_j'')\left(2 \lfloor t_J \kappa \rfloor + 1 + \sum_{i=1}^j \frac {\gamma_i}{\Upsilon^{i / J}}\right) + \gamma_j \]

证明 使用归纳法。

\(j=1\)\(d_G(u_1', u_1'') \leq 2 \Upsilon^{1 / J}\)

  • 若路径上不存在 \(\mathcal R_1\) 中的点,那么它们均为 \(\mathcal Z\) 中的点,因此有

    \[d_H(v_1', v_1'') \leq (d_G(u_1', u_1'') + 1)(\hat D(\mathcal Z) + 1) - 1 \leq d_G(u_1', u_1'')(2\lfloor t_J \kappa \rfloor + 1) + 2\lfloor t_J \kappa \rfloor \]

  • 若只有一个 \(\mathcal R_1\) 中的点,我们有

    \[d_H(v_1', v_1'') \leq d_G(u_1', u_1'')(\hat D(\mathcal Z) + 1) + \hat D(\mathcal R_1) + 1 - 1 \leq d_G(u_1', u_1'')(2\lfloor t_J \kappa \rfloor + 1) + \hat D(\mathcal R_1) \]

  • 若至少有两个 \(\mathcal R_1\) 中的点,设 \(w_1' \in S_1', w_1'' \in S_1''\) 为最靠近 \(u_1'\) 和最靠近 \(u_1''\)\(\mathcal R_1\) 中的点,则存在 \(z_1' \in S_1', z_1'' \in S_1''\) 使得 \(d_H(z_1', z_1'') = d_G(w_1', w_1'') = l\),而 \(d_H(u_1', w_1'), d_H(w_2', u_2'')\) 可以用第二种情况的结论。因此有

    \[d_H(v_1', v_1'') \leq (d_G(u_1', u_1'') - l)(2 \lfloor t_J \kappa \rfloor + 1) + 2 \hat D(\mathcal R_1) + l \leq d_G(u_1', u_1'')(2 \lfloor t_J \kappa \rfloor + 1) + 2 \hat D(\mathcal R_1) \]

    说明:寻找 \(d_H(z_1', z_1'') = d_G(w_1', w_1'')\)\(z_1', z_1''\) 似乎并没有直观意义上的道理,只是为了式子的方便起见。

\(j = 1\)\(d_G(u_1', u_1'')\) 无限制,将路径划分为 \(\Upsilon^{1 / J}\) 的小段,除了最后一段的长度 \(\Upsilon' \in (\Upsilon^{1 / J}, 2 \Upsilon^{1 / J})\),令 \(a = \lfloor d_G(u_1', u_1'') / \Upsilon^{1 / J} \rfloor\),则有

\[\begin{aligned} d_H(v_1', v_1'') &\leq (a - 1)(\Upsilon^{1 / J}(2\lfloor t_J \kappa \rfloor + 1) + 2 \hat D(\mathcal R_1)) + \Upsilon'(2\lfloor t_J \kappa \rfloor + 1) + 2 \hat D(\mathcal R_1) \\ &= d_G(u_1', u_1'')(2\lfloor t_J \kappa \rfloor + 1) + 2a \cdot \hat D(\mathcal R_1) \\ &\leq d_G(u_1', u_1'')(2\lfloor t_J \kappa \rfloor + 1) + 2d_G(u_1', u_1'') \cdot \hat D(\mathcal R_1) / \Upsilon^{1 / J} \\ &= d_G(u_1, u_1'')\left(2 \lfloor t_J \kappa \rfloor + 1 + \frac{\gamma_1}{\Upsilon^{1 / J}}\right) \end{aligned}\]

\(j\) 成立时考虑 \(j + 1\),对 \(d_G(u', u'') \leq \Upsilon^{(j + 1) / J}\)

  • 若路径上不存在 \(\mathcal R_{j+1}\) 的点,可以直接使用归纳假设。

  • 若只有一个 \(\mathcal R_{j + 1}\) 的点 \(w \in S\),设 \(w' \in S', w'' \in S''\)\(w\) 靠近 \(u'\)\(u''\) 的邻居。考虑 \(w' \to w \to w\) 的过程,

    • 若存在 \(z, y \in S\),使得 \((w', z), (y, w'') \in H\),那么 \(d_H(w', w'') \leq 2 + \hat D(\mathcal R_{j + 1})\)
    • 若存在 \(z' \in S', z'' \in S''\) 使得 \((z', w), (w, z'') \in H\),那么对 \(d_H(u', z'), d_H(z'', u'')\) 使用第 \(j\) 层的结果。
    • 若存在 \(z' \in S, z \in S\) 使得 \((z', w), (z, w'') \in H\),那么对 \(d_H(u', z'), d_H(w'', u'')\) 使用第 \(j\) 层的结果。

    综上,

    \[d_H(v', v'') \leq (d_H(u', u'') - 2)\left(2\lfloor t_J \kappa \rfloor + 1 + \sum_{i=1}^j \frac{\gamma_i}{\Upsilon^{i / J}}\right) + 2 \gamma_j + \hat D(\mathcal R_{j + 1}) \]

  • 若至少有两个 \(\mathcal R_{j + 1}\) 的点,设 \(w' \in S', w'' \in S''\) 为最靠近 \(u_1'\) 和最靠近 \(u_1''\)\(\mathcal R_{j + 1}\) 中的点,使用同 \(j=1\) 相同的模式,以及继续分情况讨论两边跨越 cluster 的情况,可以得到

    \[\begin{aligned} d_H(v', v'') &\leq (d_G(u', u'') - d_G(x', x'')) \left(2 \lfloor t_J \kappa \rfloor + 1 + \sum_{i=1}^j \frac {\gamma_i}{\Upsilon^{i / J}}\right) + 2 \gamma_j + 2 \hat D(\mathcal R_{j + 1}) + d_G(x', x'') \\ &\leq d_H(u', u'')\left(2\lfloor t_J \kappa \rfloor + 1 + \sum_{i=1}^j \frac{\gamma_i}{\Upsilon^{i / J}}\right) + \gamma_{j+1}\end{aligned} \]

    其中 \(x', x''\) 表示经过分类讨论后的和 \(w', w''\) 同属一个 cluster 的两个点。

\(j + 1\)\(d_G(u', u'')\) 无限制,分成 \(\Upsilon^{(j + 1) / J}\) 的小段,可得

\[\begin{aligned}d_H(v', v'') &\leq d_G(u', u'')\left(2\lfloor t_J \kappa \rfloor + 1 + \sum_{i=1}^{j} \frac{\gamma_i}{\Upsilon^{i / J}}\right) + \gamma_{j + 1} \cdot d_G(u, u'') / \Upsilon^{(j + 1) / J} \\ &= d_G(u', u'')\left(2\lfloor t_J \kappa \rfloor + 1 + \sum_{i=1}^{j+1} \frac{\gamma_i}{\Upsilon^{i / J}}\right)\end{aligned} \]

综合两种情况,可得

\[d_H(v', v'') \leq d_G(u', u'')\left(2\lfloor t_J \kappa \rfloor + 1 + \sum_{i=1}^{j+1} \frac{\gamma_i}{\Upsilon^{i / J}}\right) + \gamma_{j + 1} \]

推论 3.14 对任意 \(u', u''\)\(d_H(u', u'') \leq \alpha d_G(u', u'') + \beta\),其中

\[\alpha = 2 \lfloor t_J \kappa \rfloor + 1 + \sum_{i=1}^J \gamma_i / \Upsilon^{i / J},\ \beta = \gamma_J \]

引理 3.15\(\Upsilon^{1 / J} \geq 6, \gamma_j = O(t_{J - 1} \kappa 3^j + \Upsilon^{(j - 1) / J})\)

证明 \(\gamma_j = \sum_{i=1}^j 2^i \hat D(\mathcal R_{j - i + 1})\),其中 \(\delta_*\)\(\hat D(\mathcal R_{*})\) 中以每层 \(3\) 倍增长,因此

\[\begin{aligned}\gamma_j / 4 &\leq 2^{j - 1} t_{J - 1}\kappa + 2^{j - 2}\left(3 t_{J - 1}\kappa + \Upsilon^{1 / J}\right) + \ldots + 2^0\left(3^{j - 1} \kappa t_{J - 1} + \sum_{i=1}^{j - 1} 3^{j - 1 - i}\Upsilon^{i / J}\right) \\ &= t_{J - 1} \kappa \sum_{i=0}^{j - 1} 3^i 2^{j - 1 - i} + \sum_{l=1}^{j - 1}\left(\Upsilon^{l / J} \sum_{i=0}^{j - l - 1} 3^i 2^{j - l - 1 - i}\right) \end{aligned}\]

可知 \(\sum_{i=0}^p 3^i 2^{p - i}\) 是一个等比数列求和,其不超过 \(3^p \frac 1{1 - 2 / 3} = 3^{p + 1}\)。因此括号里不超过 \(\Upsilon^{l / J} 3^{j - l}\),而这又是一个等比数列,由于 \(\Upsilon^{1 / J}\) 更大,\(\Upsilon^{(j - 1) / J}\) 会主导。这便是我们让 \(\Upsilon\) 充分大的原因。

\[\begin{aligned}\gamma_j / 4 &\leq t_{J - 1} \kappa \sum_{i=0}^{j - 1} 3^i 2^{j - 1 - i} + \sum_{l=1}^{j - 1}\left(\Upsilon^{l / J} \sum_{i=0}^{j - l - 1} 3^i 2^{j - l - 1 - i}\right) \\ &\leq t_{J - 1}\kappa 3^j + \sum_{i=1}^{j - 1} \Upsilon^{i / J} 3^{j - i} \\ &\leq t_{J - 1} \kappa 3^j + \Upsilon^{(j - 1) / J} \cdot 3 \sum_{i=0}^{j - 2}\left(\frac 3{\Upsilon^{1 / J}}\right)^i \\ &< t_{J - 1} \kappa 3^j + 6 \Upsilon^{(j - 1) / J} \end{aligned}\]

引理 3.16 对任意 \(\Upsilon^{1 / J} \geq 6\)\(\alpha = 1 + 2 \lfloor t_J \kappa \rfloor + O\left(\frac{J + t_{J - 1} \kappa}{\Upsilon^{1 / J}}\right), \beta = O(t_{J - 1} \kappa 3^J + \Upsilon^{(J - 1) / J})\)

证明

\[\begin{aligned} \alpha &\leq 1 + 2 \lfloor t_J \kappa \rfloor + \sum_{j = 1}^J \frac{\gamma_j}{\Upsilon^{j / J}} \\ &\leq 1 + 2 \lfloor t_J \kappa \rfloor + O\left(t_{J - 1} \kappa \sum_{j=1}^J \frac{3^j}{\Upsilon^{j / J}}\right) + O\left(\frac J{\Upsilon^{1 / J}}\right) \\ &\leq 1 + 2 \lfloor t_J \kappa \rfloor + O\left(\frac{J + t_{J - 1} \kappa}{\Upsilon^{1 / J}}\right) \end{aligned}\]

定理 3.17\(0 < \epsilon < 1\)\(2 \leq \kappa = O(\log n)\),存在固定的 \(\beta = \kappa^{\max(\log \log \kappa - \log \epsilon, 4)}\),使得算法在 \(J = \lceil \log \kappa \rceil\) 下输出大小为 \(O(\kappa^{-\log \epsilon} n^{1 + 1 / \kappa})\)\((1 + \epsilon, \beta)\)-spanner。

证明 \(J = \lceil \log \kappa \rceil\) 时,\(\lfloor t_J \kappa \rfloor = 0\)\(\alpha = 1 + O\left(\frac{\log \kappa} {\Upsilon^{1 / \log \kappa}}\right), \beta = O\left(\Upsilon^{(\log \kappa - 1) / \log \kappa} + \kappa ^{\log 3}\right)\)

我们在前文要求 \(\Upsilon^{1 / J} \geq \max\left(6, \kappa / 2^{J - 4}\right) = 16\),这里要求 \(\Upsilon^{1 / \log \kappa} = \epsilon^{-1} \log \kappa\),解得 \(\Upsilon = \kappa^{\max(\log \log \kappa - \log \epsilon, 4)}\)


算法 2 (无向带权图 \(O(n^{1 + 1 / \kappa} \log \Lambda)\)\((\beta, \epsilon)\)-hopset)

\(d_G^{(t)}(u, v)\) 表示使用至多 \(t\) 条边时 \(u, v\)\(G\) 中的最短路。

我们对距离在 \((2^k, 2^{k + 1}]\) 中的路径构建一个 hopset \(H_k\)\(1 \leq k \leq \log \Lambda\)。令 \(\hat R = 2^{k + 1}\)。对 \(\hat R \leq \beta\)\(H_k = \emptyset\) 即可,因此我们考虑 \(k > \log \beta - 1\)

Single-scale Hopset Construction

\(\hat {\mathcal P}_i\) 表示第 \(i\) 轮的 cluster,\(\hat {\mathcal P}_0 = \{\{v\} \mid v \in V\}\)。每个 cluster 有一个中心,最开始 \(\{v\}\) 的中心是 \(v\)

\(i_0 = \lfloor \log \kappa \rfloor\)\(\ell = i_0 + 1\) 表示轮数上界。

\(\alpha = \epsilon^\ell \hat R\)。对 \(0 \leq i \leq i_0\),令 \(\delta_i = \alpha(1 / \epsilon)^i + 4R_i, R_{i + 1} = \delta_i + R_i = \alpha(1 / \epsilon)^i + 5R_i\)\(\operatorname{deg}_i = n^{2^i / \kappa}\)

  1. \(0 \leq i \leq i_0\)

    • \(1 / \operatorname{deg}_i\) 的概率从 \(\hat {\mathcal P}_i\) 中独立采样。设选出的 cluster 集合为 \(\mathcal S_i\)
    • \(\mathcal S_i\) 的所有中心 \(\{r_C \mid C \in \mathcal S_i\}\) 同时开始 Dijkstra,限制搜索深度为 \(\delta_i\) 条边。对所有被 \(r_C\) 访问到的中心 \(r_{C'}\)\(C' \in \hat {\mathcal P}_i \setminus \mathcal S_i\)),将 \((r_C, r_{C'})\) 加入 \(H_k\)。将 \(C\) 和所有被其访问到的 \(C'\) 合并为一个新的 cluster \(\hat C\),中心为 \(r_C\)
    • 令所有新的 cluster 集合为 \(\hat {\mathcal S}_i\),未被合并的集合为 \(\hat{\mathcal U}_i\)。对每个 \(\hat{\mathcal U}_i\) 的 cluster 中心 \(r_C\) 单独进行一次 Dijkstra,限制搜索深度为 \(\delta_i / 2\),对所有访问到的中心 \(r_{C'}\)\(C' \in \hat{\mathcal U}_i\)),将 \((r_C, r_{C'})\) 加入 \(H_k\)。令 \(\hat {\mathcal P}_{i + 1} \leftarrow \hat {\mathcal S_i}\)
  2. \(i = \ell\)

    • 对每个 \(\hat{\mathcal P}_{i_0}\) 的 cluster 中心 \(r_C\) 单独进行一次 Dijkstra,限制搜索深度为 \(\delta_\ell / 2\),对所有访问到的 \(r_{C'}\),将 \((r_C, r_{C'})\) 加入 \(H_k\)

\(H = \bigcup_{k} H_k\) 作为最终的边集。

\(H\) 是一个大小为 \(\tilde O(n^{1 + 1 / \kappa})\)\((\beta, \epsilon)\)-hopset。

分析

声明 3.1 对任意 \(C \in \hat{\mathcal P}_i\)\(u \in C\)\(H_k\) 中存在一条边数为 \(i\) 长度不超过 \(R_i\) 的路径 \((r_C, u)\)

证明 使用归纳法。若在第 \(i\)\(r_C\)\(u\) 来自不同的 cluster,那么 \(r_C\) 可以一步走到 \(u\) 所在的中心 \(r_{C'}\),长度为 \(\delta_i\),而 \(\delta_i + R_i = R_{i + 1}\),因此最终距离不超过 \(R_i\)

引理 3.2 每个点 \(v \in V\) 在第 \(0 \leq i \leq i_0\) 轮的 interconnection 时期望被连边的次数不超过 \(\operatorname{deg}_i\)

证明 如果 \(v\) 周围 \(\delta_i / 2\) 的邻域存在一个 \(\mathcal S_i\) 中的中心点,那么 \(v\) 将会被合并,不会被任何 cluster 连边。否则,设 \(v\) 周围 \(\delta_i / 2\) 的邻域有 \(l\) 个中心点,它们都不属于 \(\mathcal S_i\) 的概率为 \((1 - 1 / \operatorname{deg}_i)^l\),因此期望连边数为 \(l \cdot (1 - 1 / \operatorname{deg}_i)^l \leq \operatorname{deg}_i\)

推论 3.3 对任意常数 \(c > 1\),有 \(\geq 1 - 1 / n^{c - 1}\) 的概率满足对所有 \(v \in V\),在其 \(\operatorname{deg}_i \cdot c \cdot \ln n\) 个最近的中心点中,至少有一个点属于 \(\mathcal S_i\)

引理 3.4\(0 \leq i \leq i_0 + 1\)\(|\hat {\mathcal P}_i| \leq 2 n^{1 - \frac{2^i - 1}\kappa}\)

因此 \(|E(H_k)| = O\left(\sum_i |\hat {\mathcal P}_i| \deg_i\right) = O(n^{1 + 1 / \kappa})\)

\(\hat {\mathcal U}^{(i)} = \bigcup_{j=0}^i \hat {\mathcal U}_j\),若一条最短路上的所有点都在 \(\hat{\mathcal U}\) 中,我们称其是 \(\hat{\mathcal U}\)-clustered 的。

引理 3.5\(d_G(x, y) \leq \frac 12 \alpha (1 / \epsilon)^i\) 且最短路是 \(\hat{\mathcal U}^{(i)}\)-clustered,那么有

\[d^{(h_i)}_{G \cup H}(x, y) \leq d_G(x, y)(1 + 16 c(i - 1) \epsilon) + 8 \alpha c(1 / \epsilon)^{i - 1} \]

其中 \(h_0 = 1, h_{i + 1} = (h_i + 1)(1 / \epsilon + 2) + 2i + 5\)

证明 使用归纳法。对 \(i=0\),考虑 \(d_G(x, y) \leq \alpha / 2\),最短路 \(\hat{\mathcal U}^{(0)}\)-clustered,则有 \(d_{G \cup H}^{(h_0)}(x, y) = d_G(x, y) \leq d_G(x, y)(1 - 16 c \epsilon) + 8 \alpha c (1 / \epsilon)^{-1}\)

若其对 \(i\) 成立,考虑 \(i + 1\)

首先先对 \(\hat {\mathcal U}^{(i)}\)-clustered 消除距离限制,把其分为 \(\frac 12 \alpha (1 / \epsilon)^i\) 的小段 \(\hat L_1 \circ \hat L_2 \circ \ldots \circ \hat L_q\),每个 \(\hat L_i\) 的长度不超过 \(\frac 12 \alpha (1 / \epsilon)^i\),但再加上 \(\hat L_i, \hat L_{i + 1}\) 中间的那一条边就不小于 \(\frac 12 \alpha (1 / \epsilon)^i\)

\[\begin{aligned} d_{G \cup H}^{(h_i + 1) \cdot \left\lceil \frac{d_G(u, v)}{\frac 12 \alpha (1 / \epsilon)^i}\right\rceil}(u, v) &\leq d_G(u, v)(1 + 16c\cdot (i - 1) \epsilon) + \left \lceil \frac{d_G(u, v)}{\frac 12 \alpha (1 / \epsilon)^i}\right\rceil \cdot 8 \alpha c (1 / \epsilon)^{i - 1} \\ &\leq d_G(u, v) (1 + 16 c \cdot i \epsilon) + 8\alpha c(1 / \epsilon)^{i - 1} \end{aligned}\]

然后考虑 \(d_G(x, y) \leq \frac 12 \alpha(1 / \epsilon)^{i + 1}\),且最短路 \(\hat {\mathcal U}^{(i + 1)}\)-clustered,让 \(z_1, z_2\) 为最左和最右的 \(\hat {\mathcal U}_{i + 1}\) 的点,\(w_1, w_2\)\(z_1, z_2\) 分别靠近 \(x, y\) 的邻居。令 \(b_1 = (h_i + 1) \left \lceil \frac{d_G(x, w_1)}{\frac 12 \alpha (1 / \epsilon)^i} \right \rceil, b_2 = (h_i + 1) \left \lceil \frac{d_G(w_2, y)}{\frac 12 \alpha (1 / \epsilon)^i} \right \rceil\)\(r_1, r_2\)\(z_1, z_2\) 所在 cluster 的中心,则有

\[\begin{aligned}d^{(h_{i + 1})}_{G \cup H}(x, y) &\leq d_{G \cup H}^{(b_1)}(x, w_1) + d_G^{(1)} (w_1, z_1) + d_G^{(i + 1)}(z_1, r_1) \\ &\hphantom{{}\leq{}}+ d_H^{(1)}(r_1, r_2) + d_G^{(i + 1)}(r_2, z_2) + d_G^{(1)}(z_2, w_2) + d_{G \cup H}^{(b_2)}(w_2, y) \\ &\leq (1 + 16 c \cdot i\epsilon) d_G(x, w_1) + d_G(w_1, z_1) + R_{i + 1} + (d_G(z_1, z_2) + 2R_{i + 1}) \\ &\hphantom{{}\leq{}} + R_{i + 1} + d_G(z_2, w_2) + (1 + 16 c \cdot i\epsilon) d_G(w_2, y) + 2 \cdot (8 \alpha c (1 / \epsilon)^{i-1})\\ &\leq (1 + 16 c \cdot i\epsilon) d_G(x, y) + 4 R_{i + 1} + 16 \alpha c(1 / \epsilon)^{i - 1} \\ &\leq (1 + 16 c \cdot i\epsilon) d_G(x, y) + 8 \alpha c(1 / \epsilon)^i \end{aligned}\]

使用的边数有

\[\begin{aligned}&\hphantom{{}={}} (h_i + 1)\left(\left \lceil \frac{d_G(x, w_1)}{\frac 12 \alpha (1 / \epsilon)^i} \right \rceil + \left \lceil \frac{d_G(w_2, y)}{\frac 12 \alpha (1 / \epsilon)^i} \right \rceil\right) + 2i + 5 \\ &\leq (h_i + 1) \left(\frac{d_G(x, y)}{\frac 12 \alpha (1 / \epsilon)^i} + 2\right) + 2i + 5 \\ &\leq (h_i + 1)(1 / \epsilon + 2) + 2i + 5 \\ &= h_{i + 1}\end{aligned} \]

引理\(\epsilon < 1 / 10\),有 \(h_i \leq 3(1 / \epsilon + 2)^i\),令 \(\zeta = 16 c(\ell + 1) \epsilon, \beta = 2h_\ell + 1 \leq 6 (1 / \epsilon + 2)^\ell + 1\)

引理 3.6\(d_G(x, y) \in (\hat {\mathcal R} / 2, \hat{\mathcal R}]\)\(d^{(\beta)}_{G \cup H}(x, y) \leq (1 + \zeta)d_G(x, y)\)

引理 3.7\(2 \leq \kappa \leq (\log n) / 4\),算法给出期望大小为 \(O(n^{1 + 1 / \kappa} \log \Lambda)\)\((\beta, \epsilon)\)-hopset,其中 \(\beta = O\left(\frac{\log \kappa}\epsilon\right)^{\log \kappa}\)

posted @ 2025-04-18 20:34  shiys22  阅读(195)  评论(0)    收藏  举报