개발하는SM

Union-Find 알고리즘 본문

Algorithm - 이론

Union-Find 알고리즘

개발하는SM 2021. 4. 20. 22:20

Union-Find

 - Disjoint Set( 서로소 집합 자료구조 ) 을 표현하기 위해 사용하는 알고리즘

 - 아래 3가지 연산을 이용하여 Disjoint Set 을 표현한다.

 

Union-Find 연산

1. make-set(x)

  • 초기화, 인자 x 를 원소로 가지는 새로운 집합을 만든다.

2. union(x, y)

  • 합연산, x가 속한 집합과 y 가 속한 집합을 합한다.

3. find(x)

  • 탐색. x가 속한 집합의 대표 값(루트 값) 을 찾는다. x가 어떤 집합에 속해있는지 확인하는 연산

Union-Find 의 기본적인 구현

/*make-set(x)*/
int parent[MAX_SIZE];

for(int i=0; i<MAX_SIZE; i++){
	parent[i] = i;
}

/* find(x) : x의 최상위 부모 노드(루트 노드) 반환 */
int find(int x){

	// 루트 노드인 경우
	if(parent[x] == x){
    	return x;
	}
    
    return find(parent[x]);
}

/* union(x,y) : y를 x 집합에 포함시킨다 */
void union(int x, int y){

	parent[find(y)] = find(x);

	return;
}

 

References

gmlwjd9405.github.io/2018/08/31/algorithm-union-find.html