路徑平分(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;
}