상호 배타적인 집합을 표현할 때 사용.
유니온 파인드,서로소 집합 알고리즘이라고 하기도 한다.
상호 배타적 인 부분 집합 들로 나눠진 원소들에 대한 정보를 저장하고 조작하는 자료구조
아래와 같은 원소들이 있다고 가정 했을 때
각각의 원소들이 (1-2, 1-3, 2-4, 5-6, 6-7) 연결 되어있을 때 아래와 같이 3개의 서로소 집합이 나온다.
배열과 트리를 이용해서 나타낼 수 있는데 트리를 이용하여 구현 해보겠다.
각 집합의 최상단 노드인 root 노드가 집합을 구분하는 원소가 된다. 즉, 부모 노드 1, 5, 8 이 집합을 구분하는 원소.
parent[i]:원소 i 의 부모노드가 있는 배열, parent[i]의 값은 i의 부모 노드
for(int i=1;i<=n;i++){
parent[i]=i;
}
int find(int a){
//root인 경우 a를 반환
if(a == parent[a]){
return a;
} else{
//아니면 root를 찾는다
int p = find(parent[a]);
parent[a]=p;
return p;
}
}
int Union(int a,int b){
a = find(a);
b = find(b);
if(a != b){
parent[b]=a;
}
}
https://bowbowbow.tistory.com/26
https://twpower.github.io/115-union-find-disjoint-set