유니온-파인드(Union-Find) 또는 서로소 집합(Disjoint Set)은 서로 중복되지 않는 부분 집합들로 나누어진 원소들에 대한 정보를 저장하고 조작하는 자료구조.

핵심 연산

구현 방법

기본 구현 (배열 기반)

각 원소가 자신이 속한 집합의 대표 원소(부모)를 가리키는 배열을 사용

// 부모 테이블 초기화
int[] parnet = new int[n];
for (int i = 0; i < n; i++) {
	parent[i] = i; // 처음에는 자기 자신이 부모
}

// Find 연산
int find(int x) {
	if (parnet[x] == x) return x;
	return find(parent[x]);
}

// Union 연산
void union(int a, int b) {
	a = find(a);
	b = find(b);
	
	if (a < b) parent[b] = a;
	else parent[a] = b;
}

최적화 기법

시간 복잡도