Algorithm 不相交集森林数据结构的无秩并并/查找算法

Algorithm 不相交集森林数据结构的无秩并并/查找算法,algorithm,data-structures,time-complexity,disjoint-sets,amortized-analysis,Algorithm,Data Structures,Time Complexity,Disjoint Sets,Amortized Analysis,下面是关于不相交集林的联合/查找算法的分解: 裸骨不相交集森林。。。(O(n)) 。。。通过等级联盟。。。(现在改进为O(log(n)) …使用路径压缩(现在改进为O(a(n)),有效地O(1)) 实现按秩联合需要每个节点保留一个rank字段以进行比较。我的问题是,按秩联合是否值得这个额外的空间?如果我跳过按秩联合而只进行路径压缩,会发生什么?这够好吗?现在分摊的复杂度是多少 有人评论说,没有路径压缩的按秩联合(摊销O(log(n)复杂度)对于大多数实际应用来说是足够的。这是正确的

下面是关于不相交集林的联合/查找算法的分解:

  • 裸骨不相交集森林。。。(
    O(n)
    • 。。。通过等级联盟。。。(现在改进为
      O(log(n)
      • …使用路径压缩(现在改进为
        O(a(n))
        ,有效地
        O(1)
实现按秩联合需要每个节点保留一个
rank
字段以进行比较。我的问题是,按秩联合是否值得这个额外的空间?如果我跳过按秩联合而只进行路径压缩,会发生什么?这够好吗?现在分摊的复杂度是多少


有人评论说,没有路径压缩的按秩联合(摊销
O(log(n)
复杂度)对于大多数实际应用来说是足够的。这是正确的。我想问的是另一种方式:如果你跳过按秩联合,而只做路径压缩,会怎么样

从某种意义上说,路径压缩是改进按秩并集的额外步骤,这就是为什么可以省略该额外步骤而不会产生灾难性后果。但是,按秩并集是路径压缩的必要中间步骤吗?我可以跳过它直接进行路径压缩吗,或者这将是灾难性的



还有人指出,如果没有按秩的并集,重复的并集可以创建类似链表的结构。这意味着单路径压缩操作可能需要
O(n)
在最坏的情况下。这当然会影响未来的操作,所以我更感兴趣的是在多个操作中摊销时这会如何进行。

路径压缩会使树结构变得平坦。按秩合并有助于合并。假设您跳过了后者。因此,现在,您有了一个没有秩信息的林来选择如何合并rge。现在,您可能会面临将深度较大的树合并为深度较小的树的风险,从而导致树结构不平衡。在最坏的情况下,您可能会得到一个链接列表。即使“查找”的时间复杂度保持不变,您的工会分摊时间复杂度也会增加

在我看来,最好跳过路径压缩,而不是排名。

我在谷歌上搜索了“未按排名合并”,出现的第二个链接是:

…我们用一个 联合分析——用路径查找 压缩,但不通过连接 排名

具有路径的联合查找数据结构 压缩但不按秩并集 处理m查找和n-1链接 时间O中的操作((m+n)日志n)


我同意你所说的,但如果有人能进行严格的分析,以显示路径压缩的性能,而不是按秩并集的性能,那会有所帮助。不幸的是,我不熟悉进行这种分析所涉及的技术。例如,我不知道逆阿克曼函数如何在完整的实现中发挥作用这是一个伟大的发现!我承认我没有首先用谷歌搜索它,因为我认为没有人会想到解决它。这意味着每个操作的摊销成本是
O(logn)
,而且没有额外的空间成本来跟踪排名!@Polygene润滑油:一个更酷的技巧是,如果你随机分配父母而不是按排名,你仍然会得到
O(An)
,而不是
O(log n)
而没有排名跟踪。这只是额外的一行代码:)请问什么是n,什么是m?“m查找和n-1链路操作”这是我最喜欢的论文:Yossi Shiloach,Uzi Vishkin:O(对数n)并行连接算法。另一方面,J.算法3(1):57-67(1982),即使未来的单路径压缩操作可能会出现最坏的情况
O(n)
time,最坏情况下的路径会因为该操作而被压缩,因此不会重复出现相同的最坏情况时间-至少不会出现在同一路径或其任何部分。因此,我想,对最坏情况下重复操作的分析可能与最坏情况下的单个操作不同?