能否找到一个保证线性时间性能的算法,这个问题非常难。还有一些改进加权快速合并算法的简单方法。理想情况下,我们希望每个结点直接连到其树根,但又不想像快速合并算法那样改变大量连线。我们可以简单地把所检查的所有结点连到根上,从而接近理想情况。我们可以很容易地实现此方法,方法名为压缩路径,在合并操作时,经过每条路径就加一条连线,也就是把一路上遇到的对应于每个顶点的id数组值都设为连到树根上。净结果就是几乎完全把树变平坦了,逼近快速查找法所获得的理想状态。
还有其他许多方法来实现路径压缩下面程序实现路径压缩的方法是:使在通向树根的路中的每条连线都指向路径的下一个结点,此方法比全路径压缩要简单些,并能获得同样的净结果。我们把此算法称为“折半路径压缩的加权快速合并”。
public class QuickUW{ public static void main(String[] args) { int N=Integer.parseInt(args[0]); int id[]=new int[N],sz[]=new int[N]; for(int i=0;i