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 | 31 |
Tags
- 백준 17779
- AVL 시간 복잡도
- c#
- 구현
- 조세퍼스 순열
- 스택의 특징
- 5397
- 백준
- C/C++ 구현
- 백준 5397
- 버킷 정렬
- 해시 구현
- 풀이
- 게리멘더링2
- 시간 복잡도
- qorwns
- 자료구조
- 백준 17471
- Stack 이란
- 백준 1158
- 백준 2447
- ㅣ풀이
- 별 찍기 10
- 1764
- heap
- 백준 17822
- 백준 1406
- dfs
- 원판 돌리기
- 해시구현
Archives
- Today
- Total
홍시홍의 프로그래밍
유니온-파인드 자료구조(C/C++ 구현, 시간복잡도) 본문
1. 정의
컴퓨터 과학 분야 에서 서로소 집합(disjoint-set) 자료 구조, 또는 합집합-찾기(union–find) 자료 구조, 병합-찾기 집합(merge–find set)은 많은 서로소 부분 집합들로 나눠진 원소들에 대한 정보를 저장하고 조작하는 자료 구조이다.
출처 : 위키피디아
내 해석 : 묶음으로 되어있지 않은 집합을 찾아내는 것, 사이클이 없음
한 노드의 부모를 찾거나 두 노드가 한 집합이 되도록 합치거나.
2. 구현
1) find(x) : x의 부모를 찾는 함수
- 경로 압축 : 시간 복잡도 상수 복잡도를 가진다고 함.
2) Union(a,b) : a와 b를 연결하는 함수(한 쪽으로 연결시켜줌)
- 한 쪽으로 연결 시켜주는것이 헷갈리지 않음 ( 작은 쪽 or 큰 쪽)
3. 시간 복잡도
1) Find : 상수복잡도
아크만 함수로 그렇다고 함
아크만 함수의 시간 증가율은 상수복잡도를 가진다고 함....
2) Union : O(logn) 경로의 길이가 O(logn)인 기준
두개의 부모를 찾개되면 트리의 높이는 최대 2로 오르게 되므로 log 시간 복잡도를 가짐
//원래 자기 자신이 부모. 연결되면서 부모를 정함
void init()
{
for (int i = 1; i <= n; i++)
parent[i] = i;
}
//부모를 찾는 함수 (이렇게 구하는걸 경로 압축이라고 한다)
//모든 경로가 부모를 가르키게 함
//상수 시간의 복잡도를 가짐
int Find(int x)
{
if (parent[x] == x) return x;
return parent[x] = Find(parent[x]);
}
//두 노드를 연결 시키는 것
//기준을 정해서 연결시키는 것이 헷갈리지 않음
//작은쪽이 부모 or 큰쪽이 부모
void Union(int x, int y)
{
x = Find(x);
y = Find(y);
if (x != y)
{
if (x < y)
parent[y] = x;
else
parent[x] = y;
}
}
'자료구조' 카테고리의 다른 글
AVL 균형 이진 탐색 트리(20200515 수정) (0) | 2019.09.25 |
---|---|
트리란?(Tree) (0) | 2019.09.25 |
연결리스트(List - 종류/정의/시간 복잡도) (0) | 2019.09.24 |
큐의 특징(Queue) (0) | 2019.09.24 |
스택의 특징(Stack) (0) | 2019.09.24 |
Comments