【发布时间】:2022-10-23 17:08:11
【问题描述】:
我有一个项目,我必须用路径压缩算法实现加权快速联合。在看到其他一些源代码后,我最终得到了:
public class UnionFind {
private int[] parent;
private int[] size;
private int maxItemCount; // maximum number of items from {0,1,...,N-1}
private int numItems; // number of items created
UnionFind(int N) {
this.N = N;
this.K = 0;
parent = new int[N];
size = new int[N];
for (int i = 0; i < N; i++) {
parent[i] = -1;
size[i] = 0;
}
}
void makeSet(int v) {
if (parent[v] != -1) return; // item v already belongs in a set
parent[v] = v;
size[v] = 1;
K++;
}
int find(int v) {
if (v == parent[v]) {
return v;
}
return parent[v] = find(parent[v]);
}
void unite(int v, int u) {
int x=find(v);
int y=find(u);
if(x!=y) {
parent[x]=y;
}
}
int setCount() {
int item=0;
for(int i=0;i<parent.length;i++) {
if(i==parent[i]) {
item++;
}
}
return item; // change appropriately
}
int itemCount() {
return K;
}
分配给我的任务是正确完成以下方法:
- int 查找(int v)
- 无效联合(int v,int u)
- setCount(int v)
好吧,算法似乎很慢,我找不到合适的解决方案。
【问题讨论】:
标签: java algorithm union-find