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
- c언어 제어문
- 도커
- git 오류
- 1주차(1)
- 인텔리제이
- 자료구조
- python기본
- 인스타
- git기초
- 5장
- c언어
- DP
- 그리디
- Workbench
- 최단거리
- 백준
- 운체 1주차
- 스택
- 데베시 1주차
- #코린이 #코딩 #할 수 있다
- 4장
- 코딩테스트
- 코테
- git오류
- 파이썬 알고리즘 인터뷰
- python기초
- c언어 기본
- python자료형
- 참고X
- Git
Archives
- Today
- Total
하루살이 개발자
[알고리즘] union-find 알고리즘 본문
* 수학에서 서로소 집합
- 공통 원소가 없는 두 집합
* 서로소 집합 자료구조
- 서로소 부분 집합들로 나누어진 원소들의 데이터를 처리하기 위한 자료구조
- 연산: union + find
1) union
- 2개의 원소로 이루어진 집합을 하나의 집합으로 합치기(합집합)
2) find
- 특정 원소가 속한 집합이 뭔지 알려주는 연산
- 서로소 집합 자료구조는 union + find 연산으로 구성되어 union-find 자료구조라 불린다.
* 서로소 집합 계산 알고리즘
1) 동작 방법
(1) union 연산 확인
- 서로 연결된 두 노드 확인
-> A의 루트노드 A'와 B의 루트노드 B'찾기(find)
-> A'를 B'의 부모 노드로 설정하기(A' < B')
(2) 모든 union 연산을 처리할 때까지 (1) 반복
Code
# 특정 원소가 속한 집합을 찾기
def find_parent(parent, x):
# 루트 노드가 아니라면, 루트 노드를 찾을 때까지 재귀적으로 호출
if parent[x] != x:
return find_parent(parent, parent[x])
return parent[x]
# 두 원소가 속한 집합을 합치기
def union_parent(parent, a, b):
a = find_parent(parent, a)
b = find_parent(parent, b)
if a < b:
parent[b] = a
else:
parent[a] = b
# 노드의 개수와 간선(Union 연산)의 개수 입력 받기
v, e = map(int, input().split())
parent = [0] * (v + 1) # 부모 테이블 초기화하기
# 부모 테이블상에서, 부모를 자기 자신으로 초기화
for i in range(1, v + 1):
parent[i] = i
# Union 연산을 각각 수행
for i in range(e):
a, b = map(int, input().split())
union_parent(parent, a, b)
# 각 원소가 속한 집합 출력하기
print('각 원소가 속한 집합: ', end='')
for i in range(1, v + 1):
print(find_parent(parent, i), end=' ')
print()
# 부모 테이블 내용 출력하기
print('부모 테이블: ', end='')
for i in range(1, v + 1):
print(parent[i], end=' ')
* 관련 문제
https://thrainer.tistory.com/61
'CS > 알고리즘' 카테고리의 다른 글
[알고리즘] 최소 신장 트리(Kruskal, Prim 알고리즘) (0) | 2022.02.23 |
---|---|
[알고리즘] 최대공약수(유클리드 호제법) / 최소 공배수 (0) | 2022.02.23 |
[알고리즘] 소수찾기 - 에라토스테네스의 체 (0) | 2022.02.16 |
[알고리즘] 우선순위 큐 (Priority Queue) (0) | 2022.02.16 |
[알고리즘] 최단 경로 알고리즘(1) - 다익스트라(Dijkstra) 알고리즘 (0) | 2022.02.13 |