【发布时间】:2020-11-25 17:24:50
【问题描述】:
简而言之:按等级联合是否仅在某些情况下有效?
例如,输入是:
(1, 2), (3,4), (3,5),在我们对它们运行不相交集算法之后:
其中一个正确的输出应该是(1,2), (3,4,5)。而根(2组的代表)分别是2和4。森林应该是这样的:
2 4
\ / \
1 3 5
问题来了,如果我需要按输出的大小按降序对输出进行排序(所以首先是更大的大小):
如果我使用 union by size(只是它的后代数量,包括节点本身),size(2) == 2,size(4) == 3,那么正确的集合应该放在第一位。一切都好;
如果我使用 按等级联合(其高度的上限),rank(2) == 1,rank(4) == 1,左右集是相等的,这不是我想要的。所以union by rank在这种情况下失败了,NO good!
这是为什么呢?这是否意味着按等级联合有其局限性?如果是这样,在什么情况下我们可以使用union by rank? union by size 是否更通用?
【问题讨论】:
-
我不清楚你在问什么。您是否尝试按大小升序输出不相交的集合? “按等级联合”在什么意义上不起作用?您是说对于某些根 A 和 B,您可以有 rank(A) size(B)?
-
@PaulHankin 嗯,很抱歉造成混乱。我打算按大小降序输出不相交的集合;如果我使用 union by rank,则 2 个集合的等级均为 1,这不是正确的输出。因此,在这种情况下,按等级联合 不起作用。我想知道这是 union by rank 的限制还是我执行错了?
标签: algorithm graph disjoint-sets union-find