January 24, 2022
흔히 Union-Find로 알고있는 서로소 집합은 교집합이 공집합인 집합 들의 정보를 확인(Find)하고 조작(Union)할 수 있는 자료구조이다.
관련 코드는 아래 예제에서 보이도록 하겠다.
이떄 return부분에 arr[n] = find(arr[n])
을 해주었는데 이는 경로 압축이다.
static int[] arr;
public static int find(int n){
if(arr[n] == n) return n;
return arr[n] = find(arr[n]);
}
Union함수는 결국 find를 통해서 대표값을 찾아주는 것을 이용하여, 대표값을 같게 만들어줌으로써 합집합을 구현하는 것이다.
public static void union(int a, int b){
arr[find(a)] = find(b);
}