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

使用快速联合算法的路径压缩,java,java,algorithm,compression,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,

给定以下代码块(取自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--;
}   

您可以使用双循环,首先找到根,然后将所有内容设置为指向它

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;
    }
}

我假设你找到了很多不同的方法来执行路径压缩,对吗?这是个问题吗?当然,做这件事的方法不止一种——事实往往如此。(你)试图(或想要)做这件事的方式是什么?你看到的其他例子是什么?它们有什么不同?是的,肯定有很多种方式。我看到的其他示例将通过将站点链接到其祖父母来执行压缩。