5

我一直在阅读有关联合查找问题的信息。两个主要改进是路径压缩和按等级联合。据我了解,按等级联合用于确定如何组合不相交的树。如果我们有两棵不相交的树 T1 和 T2,那么我们将具有较小等级的树的根附加到具有较高等级的树上。如果我们不使用路径压缩,那么排名只是树的深度。这是有道理的,因为我们不想增加输出树的深度,因为它直接影响查找和联合。

我的问题是当我们也使用路径压缩时。我一直在读到这两种优化相辅相成,但我没有看到。由于路径压缩,排名不再是树的深度(它成为深度的上限)。假设 T1 有 2 个分支(设 T1 的 rank 为 3),T2 的深度为 2,rank 为 2。现在假设我们在下面标有“*”的 T1 的叶子上执行查找操作(带有路径压缩)。现在,如果我们联合 T1 的根和 T2 的根,那么 T2 将附加到 T1 的根(因为查找不会更新排名)。结果树的深度为 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

我在这里错过了什么吗?路径压缩和按等级联合如何相互补充?我知道等级只是树深度的上限,但我看不出按等级联合如何提高结构的整体性能。这比随机组合根的联合更好吗?

我在这里先向您的帮助表示感谢。

4

2 回答 2

6

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

没有任何特殊联合的路径压缩规则每个操作的摊销成本的上限为 O(log N) ,但不限制最坏情况成本。(甚至可能对摊销成本有更严格的限制,但 O(log N) 是我知道如何证明的)

将两者结合使用,您可以在最坏的情况下获得 O(log N) 限制,并且摊销界限提高到 O((N)),这实际上是恒定的。这样,两种优化是互补的。

你是对的,有一些操作序列,按等级联合并不是绝对最优的,但保证比没有它时得到的要好,这才是最重要的。我们通常不会花精力优化最佳案例性能。我们优化最坏平均情况。

于 2017-01-17T04:31:33.613 回答
0

如果您使用按等级/权重联合,则无法首先形成问题中的图 T2。

自己试试 3 个节点,看看能不能得出图 T2。这是不可能的。甚至图 T1 也不能首先形成。

您可以从 N 个节点的示例开始,如果您从一开始就按等级/权重进​​行联合,您实际上会看到它会提供最佳合并结构(某些操作序列可能不会提供最佳合并,但大多数次它给出了最好的结果)。

换句话说,按等级/权重联合有助于查找方法(该方法又使用路径压缩进行进一步优化),这使得查找操作几乎是恒定时间操作。

于 2020-08-15T18:14:49.720 回答