对于在线可用的不相交集结构,有许多不同的描述和示例。
在某些情况下,对于每个集合,它存储“等级”。当一个集合被合并到另一个集合中时,如果它们具有相同的等级,则前者的等级增加1。
在其他情况下,对于每个集合,它会存储其大小。当一个集合并到另一个集合时,它们的大小会被添加。
Here它存储了排名。
在the wikipedia article中,它会存储排名。
In the Cornell University lecture notes,它存储了排名。
在example的"Algorithms", by Sedgewick and Wayne中,它会存储尺寸。
Cormen等。写:
显而易见的方法是使树的根更少 节点指向具有更多节点的树的根。而不是 明确地跟踪以每个为根的子树的大小 节点,我们将使用一种简化分析的方法。对于每一个 节点,我们维持一个等级,这是高度的上限 节点。按等级联合,我们以较小的等级点建立根 在UNION操作期间到更大等级的根。
哪个更好/更合适?
答案 0 :(得分:0)
所有分析(是?)表明,当与树崩溃技术结合使用时,两种方法都能提供最佳的O(alpha)复杂度。
然后,唯一的实现特定差异来自size或rank变量所采用的大小。大小可以高达size_t
,但排名可以始终以三位编码。
有时,这三个位可以在要处理的数据/节点中的未使用位中进行编码,从而获得更好的性能(速度和大小)。