使用快速联合算法的路径压缩,java

时间:2014-02-12 13:37:56

标签: java algorithm compression

鉴于以下代码块,取自quickunion算法,我需要为方法find()添加一个循环,该方法链接从站点p到根的路径中的每个站点。我在这个网站上看到了一些其他类似的问题和答案,但答案似乎彼此不同,我不相信他们按照我尝试的方式执行压缩。任何帮助都将非常感谢!

public int find(int p)
{   //Find component name.      
while (p != id[p]) p = id[p];
return p;
}

public void union(int p, int q)
{   //Give p and q the same root.
int i = find(p);
int j = find(q);
if (i==j) return;

id[i] = j;

count--;
}   

1 个答案:

答案 0 :(得分:0)

你可以用双循环来做,首先找到根,然后将所有东西设置为指向它。

public int find(int p)
{   int curr = p;
    while (curr != id[curr]) curr = id[curr]; //find root
    //at this point, curr is the root
    while (p != id[p]) { 
        int next = id[p];
        id[p] = curr; //remember, curr is the root
        p = next;
    }
}