할머니의 콤퓨타 도전기
크루스칼 (Kruskal) 알고리즘, 최소 신장 트리 (MST) 본문
Kruskal Algorithm
- 그래프 내의 모든 정점들을 가장 적은 비용으로 연결하기 위해 사용 (간선에 가중치가 포함)
- 그래프 내의 모든 정점을 포함하고 사이클이 없는 연결 선을 그렸을 때, 가중치의 합이 최소가 되는 상황을 구하고 싶을 때 사용
- 최소 신장 트리를 구하기 위한 알고리즘
신장 트리 (Spanning tree)
- 그래프에서 모든 정점을 포함하고 정점 간 서로 연결이 되며 사이클 (cycle)이 존재하지 않는 그래프
- 연결 관계에서 사이클 형성 안함
- 모든 정점이 포함되어 있으면서 모든 노드는 적어도 하나의 간선으로 연결되어 있음
- 신장 트리는 정점이 n개일 때, 간선이 n-1개
- 신장 트리들 중 가중치의 합이 최소가 되는 신장트리를
최소 신장 트리 (Minimum Spanning Tree, MST)
라고 함 - 이 최소 신장 트리를 구하기 위한 알고리즘이 크루스칼 알고리즘
MST를 구하는 문제 예시
- 여러 개의 네트워크 지점들이 있는데, 모든 지점들을 유선으로 연결하되 연결선의 총 길이가 최소가 되어야 하는 문제
- 도시를 모두 연결하되, 연결하는 도로의 길이 합이 최소가 되어야 하는 문제
Kruskal Algorithm 과정
- 그리디 알고리즘의 일종
- 그래프 간선들을 가중치의 오름차순으로 정렬한 뒤, 사이클을 형성하지 않는 선에서 정렬된 순서대로 간선 선택
- 그래프 간선을 가중치 오름차순 정렬
- 가중치(비용)가 적은 간선부터 그래프에 포함
- 포함시키기 전에는 사이클 형성 확인
- 사이클을 형성하는 경우 간선 포함시키지 않음
- 선택된 간선의 수가 정점의 수 - 1 만큼 되면 종료
사이클 발생 여부
Union-Find 알고리즘
사용- Disjoint Set (서로소 집합)을 표현하는 자료구조
- 서로 다른 두 집합을 병합하는 union 연산, 집합 원소가 어떤 집합에 속해있는지 찾는 find 연산
- 각 노드의 부모가 동일한지 아닌지 확인하는 것으로 사이클 발생 여부 알 수 있음
'Algorithm > Algorithm 정리' 카테고리의 다른 글
문자배열을 이용한 큰 수 덧셈 (0) | 2021.03.10 |
---|---|
하노이 탑 알고리즘 (0) | 2021.02.18 |
최소공배수(LCM)와 최대공약수(GCD) (0) | 2021.02.12 |
Floyd Warshall 알고리즘 (1) | 2021.02.06 |
위상 정렬 (Topology Sort) (0) | 2021.01.30 |
Comments