【发布时间】:2018-09-09 11:52:35
【问题描述】:
MAKE-SET(x)
x.p = x
x.rank = 0
UNION(x, y)
LINK(FIND-SET(x),FIND-SET(y))
LINK(x, y)
if x.rank > y.rank
y.p = x
else
x.p = y
if x.rand == y.rank
y.rank = y.rank +1
The FIND-SET procedure with path compression is quite simple:
FIND-SET(x)
if x != x.p
x.p = FIND-SET(x.p)
return x.p
您可以在第 21 章的算法简介第 3 章中找到伪代码。
这是具有秩和路径压缩的不相交集森林的伪代码。 从伪代码中可以看出,每次联合操作之前,都会先求出每个节点的集合数。在带有路径压缩的 FIND-SET 操作中,x 和 y 的高度总是只有 2。因为在 FIND-SET 之后 x.p 和 y.p 都会指向集合的根。为什么还需要按等级联合?
Shihab Shahriar 解决了我的问题,他的回答令人印象深刻!
【问题讨论】:
-
请不要在本站发布文字图片。
-
致 Josh Lee:对不起,我已将图片替换为文字
标签: algorithm minimum-spanning-tree kruskals-algorithm disjoint-sets