Search
Duplicate
🪧

크루스칼

정의

크루스칼 알고리즘이란 그래프 내의 모든 정점들을 가장 적은 비용으로 연결하기 위한 알고리즘이다.
그래프 내의 모든 정점을 포함하고 사이클이 없을 때, 가중치의 합이 최소가 되는 상황을 구하고 싶을때 사용한다.
즉 최소 신장 트리를 구하기 위한 알고리즘이다.

신장 트리와 최소 신장 트리

신장 트리는 다음과 같이 정의된다.
그래프에서 모든 정점을 포함하고, 정점 간 서로 연결이 되며 싸이클이 존재하지 않는 그래프
따라서 신장 트리는 정점의 갯수가 n이라면 이를 연결하는 간선의 갯수는 n-1개가 된다.
이런 신장 트리들 중에서 가중치의 합이 최소가 되는 신장 트리를 최소 신장 트리라고 한다.

구현

크루스칼 알고리즘은 그리디 알고리즘의 일종으로 정렬을 사용한다.
그래프의 간선을 가중치를 기준으로 오름차순으로 정렬한다.
사이클을 형성하는지 검사한 후, 연결에 추가한다.
부모가 같다면 이는 싸이클을 형성하게 된다. 이미 연결되어있기 때문이답..!