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
- 알고리즘
- dfs
- SQL
- 브루트포스
- 스프링
- 다이나믹 프로그래밍
- 컴퓨터 네트워크
- 재귀
- github action
- 그리드 알고리즘
- BFS
- 그리드
- GIT
- HTTP
- 역방향 반복자
- 이분탐색
- 백준
- Spring
- 분할 정복
- 순열
- 다이나믹프로그래밍
- 트리
- AWS
- 그래프
- 분할정복
- 자료구조
- 자바
- TCP
- 도커
- CI/CD
Archives
- Today
- Total
코딩성장스토리
유니온 파인드(union find) 본문
유니온 파인드
두 노드가 같은 그래프에 있는지 찾는 방법
그래프 알고리즘의 일종으로서 상호 배타적 집합, Disjoint-set
- Find -노드 x 가 어느 집합에 포함되어 있는지 찾는 연산
- Union-노드 x가 포함된 집합과 노드 y가 포함된 집합을 합치는 연산
parent[i]는 i의 부모가 무엇인지 나타내는 것,
parent[i] =i 는 i가 루트 노드임을 나타냄(부모가 본인이므로)
find함수 구현
int find(int x){
if (x==parent[x]){
return x;
}
else {
return find[parent[x]];
}
}
루트를 찾아 반환 하지만 이 함수의 문제점은 한쪽방향으로 치우칠 수 있다.(트리의 장점 소실)
이를 고치기 위해 오른쪽노드를 모두 루트노드에 연결하게 구현
int find(int x){
if (x==parent[x]){
return x;
}
else{
int y = find(parent[x]);
parent[x] = y;
return y;
}
}
유니온 함수 구현
union(x,y)- y의 parent를 x로 삼는다
ex)union(1,2) 라는 함수는 2의 노드가 1의 노드 자식으로 붙게 됨을 의미
void union(int x,int y){
x = find(x);
y = find(y);
parent[y] = x;
}
'자료구조' 카테고리의 다른 글
set ,그리고 iterater 반복자 (0) | 2022.01.26 |
---|---|
순열 (0) | 2022.01.12 |
브루트 포스(Brute force search):완전탐색 (0) | 2021.10.19 |
트리 (0) | 2021.10.11 |
그래프 (0) | 2021.10.01 |