期望线性复杂度最小生成树算法学习笔记
huangjiarui · · 个人记录
鉴于网上关于此算法的信息较少,故作此文。
本文大部分内容为原论文的摘要翻译。
1.预备工作
本算法事实上可以解决一个不一定联通的图上的最小生成森林(联通性与原图相同)(以下为简便均称作最小生成森林)。
为了方便,假定图中没有孤立点,边权两两不等,于是最小生成森林唯一。
以下是两个喜闻乐见的 Lemma。
Lemma 1.1(Cycle Property) 对于图中的一个环 C,C 中边权最大的边不在最小生成森林中。
Lemma 1.2(Cut Property) 对于点集的一个非空真子集 X,恰有一个端点属于 X 的边权最小的边属于最小生成森林。
记
我们称一条边 (x,y) 是 F-heavy 当且仅当
对于原图 G 的一个给定的生成森林 F,可以在线性的时间求出 F_heavy 的边。有两种做法:第一种在原论文的参考文献中出现,是一种离线的做法;另一种出现于参考文献二的参考,通过实现O(n)-O(1)的在线链上最大值查询来得到。大致做法类似 Four Russians,先对树分块,然后块内和块间分别操作。
以下给出一个重要的 Lemma:
Lemma 1.3 对图 G 中每一条边独立地以 p 的概率选择,将选中的边和 G 的点集组成 G 的生成子图 H,记 H 为 G 的最小生成森林。则 G 中 F-light 的边的期望数量不多于
Proof 以如下的方式考虑 H 和 F 的产生:
初始置 F 的边集为空。按边权从小到大的顺序依次考虑 G 中的每一条边。假设当前考虑到边
那么:(1)若一条边在考虑时是 F-heavy,那么最终还是 F-heavy,因为 F 的边集只加不减。(2)若一条边在考虑时是 F-light,那么最终还是 F-light,因为在这条边后考虑的边的边权均大于当前边。于是最后的 F-light 的边即考虑时为 F-light 的边。
考虑的 F-light 边数量满足负二项分布,又因为最后选中在 F 中的边数不大于 n-1,则考虑的 F-light 边的期望数量,即 G 中 F-light 边期望数量不大于
2.算法
在描述算法之前,先介绍 Borůvka 算法:
-
初始置每一个点为一个联通块。
-
对于每一个连通块,选择与之相连的边中边权最小的边。这部分的时间是
O(m) 。 -
将选择的边两端的联通块合并为一个并删除两连通块间的其他边。因为每一条边至多被选择两次,故至少进行
\frac n2 次合并(n指当时联通块数量),于是连通块数量至少减少一半。 -
若还有边的两端不属于同一个联通块,回到2。
易知这个求最小生成森林的算法的最坏复杂度为
我们称进行一次第二步和第三步为一次 Borůvka step,则一次Borůvka step的时间为
-
若边集为空,则直接返回。
-
运行两遍 Borůvka step。这一步会使点数减少至原来的
\frac14 。 -
在收缩后的图 G 对每一条边独立地以
\frac12 的概率选取组成 G 的生成子图 H。调用该算法求出 H 的最小生成森林 F,找出所有 F-heavy 边并删除。 -
在剩余的图 G 中调用该算法求出最小生成森林 F。
正确性由归纳法知。通过 Cut Property,第二步中选的边一定在最小生成森林中。通过 Cycle Property,第三步删除的边一定不再最小生成森林中。
3.分析
我们将首先分析该算法的最坏情况,然后
先考虑单次该算法的调用。除了递归子问题外在第1-4步上的时间是关于边数线性的(其中第三步找出所有 H-heavy 边见前文),于是我们的目的是分析所有调用涉及到的边的总数。因为没有孤立点,所以
每一次调用至多会产生两个子问题。考虑所有递归子问题形成的二叉树(后文记为子问题树)。对于一个特定的图的边集非空的子问题,我们称在第三步的第一个递归子问题为其左儿子,第四步的第二个递归子问题为其右儿子。在深度为 d,子问题树的节点数至多为
Theory 3.1 该算法的最坏时间复杂度为
Proof 我们从两个不同的角度来说明这一点:
(1)深度为 d 的节点处理的图至多有
(2)考虑一个节点的图中的所有边。这些边可以分成三类:1.在第一步被删除的,不会在子节点的图中出现。2.未在第一步被删除,不在随机选边后生成子图 H 的最小生成森林 F 中的,只会在左子节点或右子节点中出现。3.在随机选边后生成子图 H 的最小生成森林 F 中的,会同时在左右子节点中出现。由于第三类边的数量严格不大于第一类边的数量,所以左右子节点中的边的总数严格不大于父节点的边的数量。故每一层的边的总数不大于初始图的边数 m,所以总边数不大于
以上说明了该算法的最坏时间复杂度为
Theory 3.2 该算法的期望时间复杂度为
Proof 我们将子问题树分割成若干 left path。其中 left path 定义为从根节点或一个节点的右儿子开始,一直沿着左儿子向下走直到叶子节点的路径。我们设某一个特定节点的图的边数为
于是我们只要考虑根节点和所有右子节点的边数和的期望值。根据 Lemma 2.1,右子节点的边数的期望值不大于点数的2倍。故所有右子节点的边数和的期望值不大于
接下来,我们先补一些概率论的知识,然后默认我们都会切诺夫界。
Theory 3.3 该算法以
Proof 我们先考虑所有右子节点的总边数。每一条右子节点的边,一一对应一条对应父节点的 F-light 边,一一对应一次 Lemma 1.3 中对 F-light 边的概率为
其次我们考虑所有左子节点的总边数。一个左子节点的边来源于其父节点的未被第一步删去的边的一次概率为
综合以上分析,所有节点的总边数为
Refrence
[1]Karger,Klein and Tarjan,1995.A Randomized Linear-Time Algorithm to Find Minimum Spanning Trees
[2]博客magic!期望线性 MST!by Ntokisq