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改进
一个使用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-Find | 1 | N |
Quick-Union | N | N+ |
WQUPC | lgN | logN+ |
相关文章推荐
- Algorithm, Part I Princeton University 公开课第一周 Introduction
- princeton algorithms part 1 第一周作业题
- 斯坦福大学公开课 :机器学习课程(Andrew Ng)——10、无监督学习:Mixture of Gaussians and the EM Algorithm
- Coursera Algorithms, Part 1 Week 1: Analysis of Algorithm
- 《PCL点云库学习&VS2010(X64)》Part 45 点云压缩算法—扫描线(DouglasPeuckerAlgorithm)
- 【学习笔记】斯坦福大学公开课:cs229 Part 6 Learning Theory【上】
- Princeton Algorithms: Part 1 [week 1:Analysis of Algorithms]
- 【第一周algorithm1】-minimum-depth-of-binary-tree
- LeetCode Longest Palindromic Substring Part Manacher ALGORITHM
- Week2 Assignment - Quicksort - Stanford - Algorithm: Design and Analysis Part I
- Algorithm Part I:Programming Assignment(2)
- 斯坦福大学公开课 :机器学习课程(Andrew Ng)——11、无监督学习:the derivation of EM Algorithm
- Stanford公开课之算法:设计与分析——II.渐进式分析(第一周)
- Andrew Ng机器学习公开课笔记 -- Mixtures of Gaussians and the EM algorithm
- Stanford公开课之算法:设计与分析——(第一周) Programming Question-1
- Sort Algorithm Part-1 Selection Sort
- Martin Odersky Scala编程公开课 第一周作业
- Sort Algorithm Part-2 Insertion Sort
- Algorithm Part I:Queues,Stacks
- SAP公开课笔记:基于HANA的软件开发 - 第一周总结