Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- java
- useContext
- BOJ2042
- 프로그래머스
- 섬 연결하기
- Greedy
- 객체지향 설계 5원칙
- Lifting State Up
- react
- Kruskal Algorithm
- 프로그래머스#JAVA
- Modern Javascript
- rest operator
- state update scheduling
- Segment Tree
- codility
- 리액트의 작동방식
- useReducer
- MST구현
- heap
- DFS
- JS Array Functions
- useState
- 리액트 성능 최적화
- State
- DB Navigator
- React 훅 사용규칙
- batch udpate
- 리액트 상태값 업데이트
- spread operator
Archives
- Today
- Total
개발하는SM
Union-Find 알고리즘 본문
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
'Algorithm - 이론' 카테고리의 다른 글
[트리] 세그먼트 트리 - 부분 합 효율적으로 구하기 (0) | 2021.08.22 |
---|---|
[그래프] MST 구현 알고리즘 - Kruskal Algorithm (0) | 2021.03.13 |
[그래프] 최소 신장 트리(MST, Minimum Spanning Tree) (0) | 2021.03.13 |