[论文阅读报告] $(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",其实质是更一般化的分层度数分治,参考文章。后文将用 spanner 和 hopset 来代替两篇论文。
这两篇论文相较于同问题下之前的论文,都强调了 \(\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\}\)。
令 \(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}\) 表示邻域半径。
|
当 \(\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\),
说明:在最后,我们让 \(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\)。
若第一项较大,对比命题中两式可知成立;若第二项较大,则
选取 \(\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}\)。因此
说明:做出这样的操作是因为,\(\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\),有
对边集大小的分析
仍然考虑 \((\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}}\),
其中,
实际上,\(t\) 的选取就是靠 \(1 + t_{J - j} - 2 t_{J - j + 1} = 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\),有
证明 使用归纳法。考虑长度为 \(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''\),有
同时,对任意和 \(u_j', u_j''\) 在同一个 cluster 里的 \(v_j', v_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\),则有
当 \(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}\) 的小段,可得
综合两种情况,可得
推论 3.14 对任意 \(u', u''\),\(d_H(u', u'') \leq \alpha d_G(u', u'') + \beta\),其中
引理 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\) 倍增长,因此
可知 \(\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\) 充分大的原因。
引理 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})\)。
证明
定理 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\)。
将 \(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,那么有
其中 \(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\)。
然后考虑 \(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 的中心,则有
使用的边数有
引理 对 \(\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}\)。