您的位置:首页 > 编程语言 > Go语言

Algorithm, Part I Princeton University 公开课第一周 Union-Find算法

2016-09-07 08:19 260 查看
Union-Find with Weighted Union and find path compression

一个使用Union-Find的例子  使用Java语言描述

public class SocialNetwork{
public void main(String[] args){

}

public class UnionFind{
private int[] id;
private int[] sz;
private int nCount;
private boolean bAllConnected;

// we use the path compress
private int root(int i){
while(i != id[i]){
id[i] = id[id[i]];
i = id[i];
}
return i;
}

public UnionFind(int n){
nCount = n;
bAllConnected = false;
id = new int
;
sz = new int
;
for(int i = 0; i < n; i++){
id[i] = i;
sz[i] = 1;
}
}
public boolean connected(int p, int q){
return root(p) == root(q);
}

public boolean linkPair(int p, int q){
int rp = root(p);
int rq = root(q);
if(rp == rq) return bAllConnected ;
if(sz[rp] < sz[rq]){
sz[rq] += sz[rp];
id[rp] = rq;
if(sz[rq] == nCount)
bAllConnected = true;
}else{
sz[rp] += sz[rq];
id[rq] = rp;
if(sz[rp] == nCount)
bAllConnected = true;
}
return bAllConnected;
}
}
}


该算法基于Quick-Find 和Quick-Union改进

 Find复杂度Union复杂度
Quick-Find1N
Quick-UnionNN+
WQUPClgNlogN+
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  coursera