알고리즘 개요 및 소개
Union-Find는 그래프 알고리즘 중 하나로 서로소 집합(Disjoint-Set) 알고리즘이라고도 부른다. 여러 개의 노드가 존재할 때 두 개의 노드를 선택해서, 이 두 노드가 서로 같은 그래프에 속하는지 판단하는 알고리즘이다.
소스코드
#include<iostream>
constexpr int MAX_LIST = 11;
int g_nodeList[MAX_LIST];
void InitNode();
void UnionNode(int,int);
bool FindNode(int,int);
int CheckNode(int);
int main() {
InitNode();
UnionNode(1, 2);
UnionNode(2, 3);
UnionNode(3, 4);
UnionNode(5, 6);
UnionNode(6, 7);
UnionNode(7, 8);
std::cout << FindNode(1, 5) << "\n";
UnionNode(1, 5);
std::cout << FindNode(1, 5) << "\n";
}
void InitNode() {
for (int i = 1; i < MAX_LIST; ++i) {
g_nodeList[i] = i;
}
}
int CheckNode(int node) {
if (g_nodeList[node] == node)
return node;
else {
return g_nodeList[node] = CheckNode(g_nodeList[node]);
}
}
void UnionNode(int lhs, int rhs) {
lhs = CheckNode(lhs);
rhs = CheckNode(rhs);
if (lhs < rhs) {
g_nodeList[rhs] = lhs;
}
else {
g_nodeList[lhs] = rhs;
}
}
bool FindNode(int lhs,int rhs) {
lhs = CheckNode(lhs);
rhs = CheckNode(rhs);
return lhs == rhs;
}
후기
전에 작성했던 크루스칼 알고리즘에서 그래프의 사이클을 확인하는 방법에 사용되는 것이 합집합 찾기이다.
2020/02/11 - [자료구조 알고리즘/탐색 알고리즘] - 최소 비용 신장 트리(Minimum Cost Spanning Tree)
출처 및 레퍼런스
Wiki: https://ko.wikipedia.org/wiki/서로소_집합_자료_구조
Blog: https://blog.naver.com/ndb796/221230967614
'자료구조 알고리즘 > 탐색 알고리즘(Search)' 카테고리의 다른 글
[알고리즘] 백 트래킹(Backtracking) (0) | 2020.03.31 |
---|---|
[알고리즘] 다익스트라 알고리즘(Dijkstra algorithm) (0) | 2020.02.25 |
[알고리즘] 최소 비용 신장 트리(Minimum Cost Spanning Tree) (0) | 2020.02.11 |
[알고리즘] 깊이 우선 탐색(Depth First Search) (0) | 2020.02.03 |
[알고리즘] 너비 우선 탐색(Breadth First Search) (0) | 2020.01.31 |