路径平分(path halving)
通过使在从到根的路径上的每一个其他节点指向它的祖先(存在时)以实现对的偏路径压缩(partial path compression)。这叫做路径平分(path halving)。
一开对其性质理解的不够深,弄不清楚到底是从本身开始指向祖父,还是从的父节点才开始指向祖父,到最后是否连接在根上;到后来才弄清楚,执行时,就从开始指向其祖父,并且一路到根节点。
如下图所示,执行路径平分查找前后对比:
代码
SetType Find1(ElementType X, DisjSet S)
{
while (S[X] > 0 && S[S[X]] > 0)
{
S[X] = S[S[X]];
X = S[X];
}
if (S[X] > 0)
X = S[X];
return X;
}