路径压缩和按等级合并如何相辅相成? [英] How do path compression and union by rank complement each other?

查看:12
本文介绍了路径压缩和按等级合并如何相辅相成?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在读有关工会发现问题的文章。两个主要的改进是路径压缩和按等级合并。据我所知,按等级合并是用来确定如何组合不相交的树的。如果我们有两棵不相交的树T1和T2,那么我们将排名较小的树的根附加到排名较高的树上。如果我们不使用路径压缩,那么排名就是树的深度。这是有意义的,因为我们不想增加Out树的深度,因为它直接影响Find和UNION。

我的问题是当我们也使用路径压缩时。我一直读到这两个优化是相辅相成的,但我看不到这一点。由于路径压缩,等级不再是树的深度(它成为深度的上限)。假设T1有2个分支(设T1的秩为3),T2的深度为2,秩为2。现在假设我们在T1的叶子上执行查找操作(带有路径压缩),下面标有"*"。现在,如果我们并集T1的根和T2的根,那么T2将附加到T1的根(因为Find不会更新排名)。生成的树的深度为3。但是,如果我们将T1附加到T2,我们可能会有更好的性能。

T1:   o   (Rank = 3)    T2:   o  (Rank = 2)
     /                       |
    o   o                     o
    |                         |
    o                         o
    |   
    *   

在T1("*")的叶上求和,然后在T1和T2的根上并得到

T1:    o       (Rank = 3)      T2: o  (Rank = 2)       
     /| |                         |
    * o o o                        o
                                   |
                                   o
Result of T1 union T2
       o
   / | | |
  * o o o  o   Rank = 3 and Max Depth = 3
           |
           o
           |
           o

我是不是漏掉了什么?路径压缩和按等级合并如何相辅相成?我知道等级只是树深度的上限,但我看不出逐个等级的联合如何改善结构的整体性能。这怎么会比随机组合词根的联合更好呢?

提前感谢您的帮助。

推荐答案

UNION by RANK确保树的最大深度为LOG N,因此它为每个操作设置了O(LOG N)的最坏情况上限。

没有任何特殊并集的路径压缩规定了每个操作的摊销成本的上限为O(LogN),但不限制最坏情况下的成本。(摊销成本甚至可能有更严格的界限,但我知道如何证明O(LogN))

将两者结合使用,可以得到最坏情况下的O(LogN)极限,摊销界改进为O(𝛼(N)),这实际上是恒定的。在这种情况下,这两个优化是互补的。

您说得对,对于某些操作序列,按等级联合并不是绝对最优的,但保证比没有它时获得的结果更好,这才是最重要的。我们通常不会花费精力优化最佳案例性能。我们优化最差平均案例。

这篇关于路径压缩和按等级合并如何相辅相成?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆