您的位置:首页 > 产品设计 > UI/UE

Algs4 union-find算法 带路径压缩的加权Quick-Union实现

2015-05-30 19:28 375 查看

Code

package sed.algorithm.chapter1.section5;

public class PathCompressWeightedQuickUnionUF {

private int[] id;
private int[] sz;
private int count;

public PathCompressWeightedQuickUnionUF(int max) {
id = new int[max];
sz = new int[max];

for (int i = 0; i < id.length; i++) {
id[i]=i;
}
for (int i = 0; i < id.length; i++) {
sz[i]=1;
}
count = max;
}

public int count(){
return count;
}

public int find(int p){
int pParent = p;
while(id[pParent]!=pParent){
pParent=id[pParent];
}

while(id[p]!= p){
p=id[p];
id[p]=pParent;
}

return pParent;
}

public boolean connected(int p, int q){
return find(p)== find(q);
}

public void union(int p, int q){
int pRoot = find(p);
int qRoot = find(q);

if (pRoot!=qRoot) {
if (sz[pRoot] < sz[qRoot]) {
id[pRoot] = qRoot;
sz[qRoot] += sz[pRoot];
}else {
id[qRoot] = pRoot;
sz[pRoot] += sz[qRoot];
}
count--;
}
}

}


Input

100 million points , 200million links


Notes:

速度不是一般的快,之前用quick union 算法 跑了一个多小时。。。
(其实我也不想的,因为测试代码里面类引用错了,一直以为用的是这个算法,其实用的是最简单的quick union)。TT 改了以后还没要一分钟。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  quick union find