1.Dynamic Connectivity
首先介绍了基本的关于dynamic connectivity的概念
两个操作: union command的作用是连接两个对象。find query是检查是否两个对象连通
然后 说明连接是一个等价关系(抽象代数中有具体的定义和延伸)
提到了connected components:数量最多的那组相互连通的对象组成的集合
定义了一个union find数据结构 以下是API
2.Quick Find
提出了quick find算法 下面是其数据结构
同样定义了两个操作:查找和连接
然后进行了一些动态展示和java代码实现
最后提出了这种算法的cost model
这里的N次指的是运行算法过程中需要进入数组的次数。可以想象 N*N此操作是平方的时间复杂度了,所以这个算法很慢。
3.Quick Union
介绍了新的一种算法。以下是数据结构以及不同的解释
在这样的情况下 新的union命令就只用将p的root的id改为与q的root id相等。所以只有一次union 只有一个改变
然后进行动态演示和java代码实现。下面是这个算法的cost
两种算法的对比
4.Quick Union Improvements
在这一小节 对quick union提出了一些改进。
第一个改进是weighed (也就是在union的时候把size比较小的那个tree的root连到大的tree的root上)有效防止tree太高)在数据结构的改进上加入了一个数组sz[]用来记录tree的size
再对算法进行了分析
第二个提升办法是路径压缩。只需要在计算出root之后 把每个node的id设为root就行
第三个结合了weighted quick-union和path compression
在理论上 这个算法是非线性。实际中是线性
最后总结以上算法
5.Application
讲述了动态连接解决percolation的过程