티스토리 뷰
교집합이 존재하지 않는 둘 이상의 집합을 말하고 데이터 집합을 다룰 때 유용하게 쓰인다.
트리 구조와 차이점
- 트리 구조는 부모 노드가 자식 노드를 가리키는 형태
- 분리 집합은 자식 노드가 부모 노드를 가리키는 형태
또한 교집합이 없는 집합이기 때문에 차집합은 의미가 없다.
- Union-find 알고리즘을 사용
- 비트 벡터, 배열, 연결 리스트를 이용하여 구현이 가능하나 트리 구조가 가장 효율적
분리 집합의 연산은 다음과 같다.
- make-set(x)
- 초기화 작업, x를 유일한 원소로 새로운 집합을 만든다.
- find(x)
- x가 속한 최상위 부모 노드(루트 노드)를 반환한다.
- union(x, y)
- x가 속한 집합과 y가 속한 집합을 합친다. (합집합)
static int[] parent; // 유니온 파인드 루트 노드 배열
// make-set 초기화 진행
parent = new int[N+1];
for(int i = 0;i<=N;i++) {
parent[i] = i;
}
private int find(int x) {
// 루트 노드는 부모 노드 번호로 자기 자신을 가지므로 같으면 리턴
if(parent[x] == x) {
return x;
}
// 각 노드의 부모 노드를 찾아 올라간다.
return find(parent[x]);
}
private void union(int u, int v) {
// 각 원소가 속한 트리의 루트 노드를 찾는다.
u = find(u);
v = find(v);
if(u != v) {
parent[v] = u;
}
}
분리집합 연습 문제
'알고리즘 > 이론' 카테고리의 다른 글
최소 신장 트리 - 크루스칼 (0) | 2022.01.31 |
---|---|
다이나믹 프로그래밍과 분할 정복 (0) | 2022.01.29 |
위상정렬 java (0) | 2022.01.22 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- kotest
- BOJ
- 코테
- programmers
- C++
- Effective Java
- 클린 아키텍처
- Java
- 프로그래머스
- Algorithm
- kkoon9
- 알고리즘
- node.js
- BAEKJOON
- 이팩티브 자바
- Spring Boot
- JPA
- Spring
- 객체지향
- 백준
- AWS
- Olympiad
- MSA
- 테라폼
- 정규표현식
- Kotlin
- 디자인 패턴
- 클린 코드
- 디자인패턴
- 이펙티브 자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함