不相交集和联合数据结构

时间:2014-12-18 12:26:40

标签: algorithm tree union

union-find结构是一种数据结构 支持以下操作:

●find(x),返回代表 节点x和
●union(x,y),它合并包含x的集合 和y成一套。

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

的概念

即。 较大的连接组件会占用较小的连接组件
这会将时间复杂度提高到 O(logn)

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

请帮助我理解我根据他们的排名合并树木的概念。

1 个答案:

答案 0 :(得分:4)

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

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

基础:当我们开始时,我们有n个不同的树,大小为1 log(1) + 1 = 1 - 因此每棵树确实具有最大高度log(n) + 1

联盟(x,y):我们统一了两个大小为x的{​​{1}}和大小为n1的y。不失一般性,请n2
从归纳假设来看,代表n1<=n2的树的高度h1最多为x 因此,通过将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为基础。