개요
- 신장 트리 : 그래프의 모든 정점을 포함하는 트리
- 최소 신장 트리 : 신장 트리들 중 가장 간선들 가중치의 합이 최소인 신장 트리입니다. 가장 큰 특징으로 트리 내 사이클이 존재하지 않습니다.
최소 신장 트리를 찾는 알고리즘
* Kruskal
- 각 간선의 가중치가 낮은 순으로 정렬
- 가장 가중치가 낮은 간선 순으로 탐색
- 해당 간선을 트리에 포함할 때 사이클이 없는 경우 -> 포함
- 해당 간선을 트리에 포함할 때 사이클이 있는 경우 -> 제외
* Prim
- 시작 정점에서 이동 가능한 간선 탐색
- 가장 가중치가 낮은 간선 순으로 탐색
- 해당 간선을 트리에 포함할 때 사이클이 없는 경우 -> 포함
- 해당 간선을 트리에 포함할 때 사이클이 있는 경우 -> 제외
최소 신장 트리 판단을 위해 사용하는 자료구조, 알고리즘
해당 트리가 최소 신장 트리인지 판단하기 위해 Disjoint-set 자료구조 및 Union Find 알고리즘을 활용할 수 있습니다.
* Disjoint-set
서로소 집합
- 서로 같은 원소를 가지지 않는 두개 이상의 집합
- 트리의 사이클 존재 여부 판별에 활용
* Union Find
합집합 찾기, 해당 신장 트리가 최소 신장 트리인지 판단하기 위해 트리 내 모든 노드가 다른 트리에 포함되는 지 (== 합집합) 확인하는 방법을 사용합니다.
- Disjoint-set 에서 합집합을 찾는 알고리즘
- 두 개의 정점이 동일한 집합에 속하는 지 판단할 때 활용
참고 자료
https://www.acmicpc.net/problem/1197
[백준 1197번 / C++ / 크루스칼] 최소 스패닝 트리
"운영체제 CS 전공" 준비하시는 분께 도움을 드리고자 포스팅 하고 있습니다! 관심 있으신 분들은 아래 링크 클릭! '남이 읽는 CS/운영체제' 카테고리의 글 목록 baebalja.tistory.com 최소 스패닝 트리(M
baebalja.tistory.com
[알고리즘] 최소 신장 트리(MST, Minimum Spanning Tree)란 - Heee's Development Blog
Step by step goes a long way.
gmlwjd9405.github.io
크러스컬 알고리즘 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 컴퓨터 과학에서 크러스컬 알고리즘(영어: Kruskal’s algorithm)은 최소 비용 신장 부분 트리를 찾는 알고리즘이다. 변의 개수를 E {\displaystyle E} , 꼭짓점의 개수를 V
ko.wikipedia.org
17. Union-Find(합집합 찾기)
Union-Find(유니온-파인드)는 대표적인 그래프 알고리즘입니다. 바로 '합집합 찾기'라는 의미를 ...
blog.naver.com
'컴퓨터공학 & 정보통신' 카테고리의 다른 글
[알고리즘] 에라토스테네스의 체 (0) | 2024.09.28 |
---|---|
[알고리즘] 비잔틴 장애 허용 (Byzantine Fault Tolerance) (0) | 2024.08.23 |
[알고리즘] Strict Weak Ordering C++ 에 대한 이해 (0) | 2024.08.10 |
[알고리즘/메모] C++ STL sort compare 함수 템플릿 (0) | 2023.10.19 |
[알고리즘/메모] 이분 탐색 binary search 코드 작성 템플릿 (1) | 2023.09.15 |