繁体   English   中英

不相交的集合和联合数据结构

[英]Disjoint Set and Union Data Structure

联合查找结构是一种支持以下操作的数据结构:

● find(x),返回节点x的代表,以及
● union(x, y),将包含x 和y 的集合合并为一个集合。

Find(x) 的时间复杂度为O(n) ,因此为了改进这一点,我们建议使用Ranks 的概念

较大的连接组件吃掉较小的组件

这将时间复杂度提高到O(logn)

我无法理解我们如何通过合并树的 Rank(Depth) 基础来提高时间复杂度,以及如何实现 O(logn) 时间复杂度。

请帮助我理解我根据等级合并树的概念。

关键是要理解表示集合的树的最大高度是log(n) + 1的大小,因此,从任何给定节点到其根节点的后续节点是通过O(log(n))步骤完成的。

我们现在必须证明不相交集森林中每棵树的高度最多为log(n) + 1 - 其中n是这棵树中的节点数。 我们将通过归纳证明它并表明在每个union(x,y) - 这个属性保持不变。

基数:当我们开始时,我们有n不同的树,所有的大小都是 1。 log(1) + 1 = 1 - 所以每棵树确实是最大高度log(n) + 1

Union(x,y) :我们合并两个集合,大小为n1 x和大小为n2 y。 不失一般性,令n1<=n2
根据归纳假设,表示x的树的高度 h1 至多为log(n2)+1因此,联合运算是通过将x的根更改为指向y的根来完成的。 这意味着x中任何节点的最大高度现在最多为

h1+1 = log(n1)+1 + 1 = log(n1) + log(2) + 1 = log(2*n1) + 1 = log(n1 + n1) + 1 <= log(n1 + n2) + 1

所以,我们刚刚发现,对于正式在x每个节点,到根的最大距离是log(n1+n2) + 1 ,并且新树的大小( xy合并)现在是n1+n2 ,所以我们证明了对于任何形式上在x节点,所需的属性仍然存在。
对于y - 到根的距离保持不变,而树的大小不会缩小 - 因此该属性在那里也有效。
总之 - 对于所有在xy节点,根据需要,新根的最大深度现在是log(n1+n2)+1
QED


备注 - 此答案中的所有log均以 2 为基数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM