유니온 파인드 :
노드를 UNION하고 부모를 FIND해서 서로소 집합을 찾아내는 알고리즘
UNION연산은 두 원소를 뽑아 원소가 포함된 집합의 부모노드를 비교한다.
만약 다르다면 같은 부모를 가리키도록 만든다.
FIND 연산은 특정한 원소가 속한 집합이 어떤 집합인지 알려주는 연산이다.
부모노드를 찾아 반환하게 만들면 전부 돌면서 찾아야하는 수가 있다. (시간이 너무 오래걸릴수도)
그래서 일일이 거슬러 부모노드를 찾는 것보다 한번에 빠르게 부모 노드에 갈 수 있도록 하는 경로 압축기법을 사용하면 빠르다. < 해당 노드의 루트노드가 부모노드가 되게 만들어주면된다.>
코드 :
def union(a,b) :
a = find(a)
b = find(b)
if a > b :
parent[a] = b
elif a < b :
parent[b] = a
def find(x) :
if x!=parent[x] :
# 경로압축
parent[x] = find(parent[x])
return parent[x]
관련 문제 :
백준 _ 여행가자 : https://www.acmicpc.net/problem/1976
1976번: 여행 가자
동혁이는 친구들과 함께 여행을 가려고 한다. 한국에는 도시가 N개 있고 임의의 두 도시 사이에 길이 있을 수도, 없을 수도 있다. 동혁이의 여행 일정이 주어졌을 때, 이 여행 경로가 가능한 것인
www.acmicpc.net
내 포스팅 : https://what-am-i.tistory.com/372
[Python/BOJ] 백준 1976 여행가자_유니온파인드
처음 DFS로 풀었다가 recursion Error로 까였다. 이렇게 생긴문제는 유니온파인드를 꼭 생각해서 풀어야겠다. 간단하게 유니온 파인드를 정리해서 포스팅 해봤다. https://what-am-i.tistory.com/371?category=100.
what-am-i.tistory.com
'알고리즘 > 알고리즘 개념' 카테고리의 다른 글
[Python]다익스트라_최단경로알고리즘 (feat. heap) (0) | 2022.09.22 |
---|---|
여러 알고리즘 시간복잡도_재귀의 시간복잡도가 O(2^n)인 이유 (0) | 2022.09.14 |
비트마스크? 그게 뭔데 (0) | 2022.08.11 |
[python]이차원 배열을 뒤집는 방법_zip(*list) (0) | 2022.08.03 |
순열을 구해보자. (중복 순열과 그냥 순열) (0) | 2022.07.19 |