-

이것이 코딩테스트다. 나동빈 신님의 강의를 바탕으로 작성하였습니다.
서로소 집합 이란
서로소 집합
공통 원소가 없는 두 집합을 의미.
{1,2} {3,4}는 서로소 관계
{1,2} {2,3}은 서로소 관계가 아님.서로소 집합 자료구조
'서로소 부분 집합들로 나누어진 원소들의 데이터를 처리하기 위한 자료구조' 이다.
서로소 집합 자료구조는 두 종류의 연산을 지원함.
합집합 : 두 개의 원소가 포함된 집합을 하나의 집합으로 합치는 연산.
찾기 : 특정한 원소가 속한 집합이 어떤 집합인지 알려주는 연산.
=> 서로소 집합 자료구조는 '합치기 찾기 자료구조'로 불리기도 함.
여러 개의 합치기 연산이 주어졌을 때, 서로소 집합 자료구조의 동작 과정은 다음과 같다.
1. 합집합 연사을 확인하여, 서로 연결된 두 노드 A, B를 확인한다.
1) A와 B의 루트 노드 A`, B`를 각각 찾는다.
2). A'를 B'의 부모 노드로 설정한다.
2. 모든 합집합 연산을 처리할 때까지 1번의 과정을 반복합니다.
기본적인 구현 방법의 문제점.
합집합 연산이 편향되게 이루어지게 되는 경우 찾기 함수가 비효율적으로 동작함.
최악의 경우에는 찾기 함수가 모든 노드를 다 확인하게 되어 시간 복잡도가 O(V)가 된다.
서로소 집합 자료구조 : 경로 압축
찾기 함수를 최적화하기 위한 방법으로 경로 압축을 이용할 수 있음.
찾기 함수를 재귀적으로 호출한 뒤에 '부모 테이블 값을 바로 갱신'한다.
경로 압축 기법을 적용하면 각 노드에 대하여 찾기 함수를 호출한 이후에 해당 노드의 루트 노드가바로 부모 노드가 된다.
동일한 예시에 대해서 '모든 합집합 함수를 처리한 후 각 원소에 대하여 찾기 함수를 수행하면 다음과
같이 부모 테이블이 갱신'된다.
기본적인 방법에 비해 시간 복잡도가 개선된다.
서로소 집합을 활용한 사이클 판별
서로소 집합은 '무방향 그래프 내에서의 사이클을 판별'할 때 사용할 수 있다.
-참고로 방향 그래프에서의 사이클 여부는 DFS 를 이용하여 판별할 수 있다.
'사이클 판별 알고리즘'은 다음과 같다.
1. 각 간선을 하나씩 확인하며 두 노드의 루트 노드를 확인한다.
1) 루트 노드가 서로 다르다면 두 노드에 대해 합집합 연산을 수행한다.
2) 루트 노드가 서로 같다면 사이클이 발생한 것 이다.
2. 그래프에 포함되어 있는 모든 간선에 대해 1번 과정을 반복한다.'개발 > 이코테' 카테고리의 다른 글
위상 정렬 알고리즘의 정의, 특징, 성능 분석 (0) 2022.04.22 크루스칼 알고리즘 정의 (0) 2022.04.22 플로이드 워셜 알고리즘 개요, 성능 분석 (0) 2022.04.22 우선순위 큐 구현 방식, 삽입 시간, 삭제 시간, 힙 정렬 (0) 2022.04.22 최단 경로 알고리즘, 다익스트라 알고리즘의 동작과정, 정의, 시간 복잡도 (0) 2022.04.21 댓글 (비로그인 댓글 허용하지 않습니다.)