Union-Find 알고리즘은 Disjoint-Set Data Structure(서로소 집합 자료구조)를 구현하는 알고리즘입니다. 이 자료구조는 여러 개의 원소로 이루어진 집합을 표현하고, 두 집합을 합치거나 주어진 원소가 어떤 집합에 속하는지를 빠르게 찾는 작업을 수행합니다.
#include <stdio.h>
int parent[1000];
int find(int x) {
if(parent[x] == x) return x;
return parent[x] = find(parent[x]);
}
void union_set(int a, int b) {
a = find(a);
b = find(b);
if(a != b) parent[b] = a;
}
int main() {
// 초기화
for(int i = 0; i < 1000; i++) parent[i] = i;
// 예시
union_set(1, 2);
union_set(2, 3);
printf("%d\n", find(1) == find(3)); // 출력: 1 (True)
return 0;
}
parent = {}
def find(x):
if parent[x] == x:
return x
parent[x] = find(parent[x])
return parent[x]
def union_set(a, b):
a = find(a)
b = find(b)
if a != b:
parent[b] = a
# 초기화
for i in range(1000):
parent[i] = i
# 예시
union_set(1, 2)
union_set(2, 3)
print(find(1) == find(3)) # 출력: True
두 언어 모두에서 Union-Find는 구현하기 상대적으로 간단하고, 빠른 시간 안에 효과적인 연산을 수행할 수 있습니다. 언어 선택은 주로 선호도나 특정 목적에 따라 달라질 수 있습니다.