以下是wikipedia上不相交集森林的联合/查找算法的细分:
- 准系统不相交的森林... (
O(n)
)- ...按等级联合...(现在改进为
O(log(n)
)- ... 带有路径压缩(现在改进为
O(a(n))
, 有效O(1)
)
- ... 带有路径压缩(现在改进为
- ...按等级联合...(现在改进为
按等级实现联合需要每个节点保留一个rank
字段以进行比较。我的问题是,按等级联合是否值得这个额外的空间?如果我按等级跳过联合而只进行路径压缩会发生什么?够好吗?现在的摊销复杂度是多少?
做了一个评论,暗示没有路径压缩(摊销O(log(n)
复杂性)的按等级联合对于大多数实际应用来说已经足够了。这是对的。我要问的是另一种方式:如果您按等级跳过联合并且只进行路径压缩怎么办?
从某种意义上说,路径压缩是按等级改进联合的额外步骤,这就是为什么可以省略该额外步骤而不会造成灾难性后果的原因。但是按等级联合是路径压缩的必要中间步骤吗?我可以跳过它并直接进行路径压缩,还是会是灾难性的?
还有人指出,如果没有按等级联合,重复联合可以创建类似链表的结构。这意味着单路径压缩操作可能会O(n)
在最坏的情况下进行。这当然会影响未来的运营,所以当摊销到许多运营中时,这将如何发挥作用是我更感兴趣的。