-
합집합 찾기(Union-Find)알고리즘/탐색 2021. 12. 25. 01:16728x90
서로소 집합 알고리즘 : 여러 개의 노드가 존재할 때 두 개의 노드를 선택해서, 현재 이 두 노드가 서로 같은 그래프에 속하는지 판별.
(1) 자기 자신을 부모로 가진다.
(2) A,B가 연결되어 있을 때 더 작은 값을 부모로 합친다 (Union)
(3) A,B,C가 연결되어 있을 때 재귀함수를 이용해서 가장 작은 값인 A로 부모를 지정한다.(Union-Find)
Find 알고리즘 : 두 개의 노드의 부모 노드를 확인하여 현재 같은 집합에 속하는지 확인하는 알고리즘.
Union-Find는 최소 비용 신장 트리를 만들기 위한 알고리즘인 Kruskal 알고리즘에 주로 사용됨.
//부모 노드를 찾는 함수 int getParent(int parent[], int x){ if(parent[x] == x) return x; return parent[x] = getParent(parent, parent[x]); } //두 부모 노드를 합치는 함수 int unionParent(int parent[], int a, int b){ a = getParent(parent, a); b = getParent(parent, b); if(a < b) parent[b] = a; else parent[a] = b; } // 같은 부모를 가지는지 확인 int findParent(int parent[], int a, int b){ a = getParent(parent, a); b = getParent(parent, b); if(a==b) return 1; return 0; }
728x90'알고리즘 > 탐색' 카테고리의 다른 글
완전 탐색(Brute Force - with. 백준 일곱난쟁이) (0) 2023.02.19 이분 탐색(binary search) (0) 2021.12.25 깊이 우선 탐색(DFS) (0) 2021.12.25 너비 우선 탐색(BFS) (0) 2021.12.25