티스토리 뷰

DSU

Disjoint Set (서로소 집합)이란 서로 공통된 원소가 없는 집합을 말한다.

 

= 유니온 파인드 (합집합 찾기)

공통 원소가 없는, 즉 상호 배타적인 부분 집합들로 나눠진 원소들에 대한 정보를 저장하고 조작하는 자료구

2가지 union, find 연산을 지원한다.

 

1. union은 2개의 set을 하나의 set으로 합쳐주는 것

2. find는 어떤 element가 주어질 때, 이 element가 속해져 있는 대표 원소를 반환

 

여러 개의 노드가 존재할 때 두 개의 노드를 선택해서, 현재 이 두 노드가 서로 같은 그래프에 속하는지 판별하는 알고리즘

 

Union : 부모를 합칠 때는 일반적으로 더 작은 값 쪽으로 합침 (root를 찾아서, 높이가 작은 쪽을 큰 쪽으로 합침)

→ 유니온 바이 랭크 (트리의 depth(height)르 기준으로 하여 트리를 합치며 트리의 높이가 커지는 것을 방지하기 위한 최적화 방법), 두 트리의 dpeth가 같을 경우에만 +1 증가하게 됨.

 

Find : 각 element에 저장된 포인터를 따라서 대표 원소를 반환해준다.

→ 경로 압축 (find 연산을 수행할 때마다 트리의 구조를 평평하게 만드는 방법 = 모든 대표 원소와 이어줌)

경로를 찾아가는 과정에서 원소에서 부모를 향해가며 원소와 루트 사이의 모든 원소를 방문한다.

이때 모든 원소들의 부모를 루트로 갱신해주며 경로에 존재하는 모든 원소의 부모가 루트로 이어지게 만드는 것

 

 

 

+ 이 방식의 unionParent 방식은 트리의 높이때문에 최악의 경우 O(n)이다.

이를 개선하기위해 Union-by-rank 최적화를 필요로한다.

'PS > 알고리즘' 카테고리의 다른 글

DFS (Depth First Search) - 깊이 우선 탐색  (0) 2023.08.18
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
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 31
글 보관함