我一直在阅读有关联合查找问题的信息。两个主要改进是路径压缩和按等级联合。据我了解,按等级联合用于确定如何组合不相交的树。如果我们有两棵不相交的树 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
我在这里错过了什么吗?路径压缩和按等级联合如何相互补充?我知道等级只是树深度的上限,但我看不出按等级联合如何提高结构的整体性能。这比随机组合根的联合更好吗?
我在这里先向您的帮助表示感谢。