728x90
서로소 집합에 대한 연산
makeSet(v)
유일한 노드 v를 포함하는 새로운 집합을 생성하는 연산입니다
왜 -1로 초기화 시키는 걸까?
index는 음수가 될 수 없기 때문에 편하게 나타내기 위해 음수로 나타냅니다.
그리고 음수는 해당 집합의 "대표자"를 나타내게 됩니다.
findSet(v)
v를 포함하는 집합을 찾는 연산입니다. 즉, 대표자를 찾는 연산이라고 생각하시면 됩니다.
unionSet(u, v)
u와 v를 포함하는 두 집합을 "통합"하는 연산, 즉, "대표자"를 같게 해줍니다
v를 포함한 집합의 대표자는 u를 포함하는 집합의 대표자를 가르키게 됩니다
해당 연산들은 나중에 "최소 신장 트리"를 구하는데 필요한 자료구조입니다
코드
static int parent[] = new int[6];
public static void main(String[] args){
//makeSet 부분
Arrays.fill(parent, -1);
}
static int findSet(int v) {
if(parent[v] < 0) return v;
return findSet(parent[v]);
/*parent[v] = findset(parent[v]);
return parent[v];*/
}
static void unionSet(int u, int v) {
u = findSet(u);
v = findSet(v);
if(u == v) return;
parent[u] += parent[v];
parent[v] = u;
//큰 쪽을 루트로 둔다?? 사용자 마음
}
static int getSize(int v) {
return -parent[findSet(v)];
}
728x90
'Algorithm 개념' 카테고리의 다른 글
최소 신장 트리(Minimum Spanning Tree) (0) | 2021.08.02 |
---|---|
그래프와 탐색 (0) | 2021.07.29 |
에라토스테네스의 체 & 유클리드 호제법 (0) | 2021.04.26 |
정렬 (0) | 2021.03.31 |
이분 탐색 (0) | 2021.01.13 |