학부 내용 정리/[ 2-2 ] 알고리즘

[ 알고리즘 ] MST(2) : Kruskal Algorithm

haena02 2022. 10. 11. 23:34
반응형

1. Kruskal Algorithm

 

크루스칼 알고리즘의 기본 아이디어는 가장 작은 weight의 edge부터 하나씩 추가하는것이다.

단 사이클이 생기면 버리고 다음 weight의 edge를 확인한다.

 

graph

위으 그림으로 예를 들어보겠다.

가장 작은 비용을 가진 edge는 1노드와 6노드를 잇는 10짜리 노드이다. 

이것을 선택한다. 그 뒤로도 작은 순서대로 선택한다.

10, 12, 14, 16 이 다음으로 비용이 적은건 18이지만 18을 선택하면 사이클이 생기기에 그 다음인 22를 선택한다.

 

위와같이 사이클이 생기지 않게 작은 것들만 골라 spanning tree가 만들어지게 하면 된다.

 

증명 (proof by induction)

 

증명하기 전에 몇가지 가정을 이해해야한다.

  • Tmst는 많은 정답 Edge set 중 하나 이다.
  • T는 prim이 만들어가고 있는 Edge set이다. 알고리즘이 끝나면 Tmst가된다.

TTmst 를 유지한다는 것을 보이자.

 

Base : 알고리즘 시작 시 node 1개, edge 0개이므로 T=∅ 이다. 따라서,  가 항상 성립한다.

Step : T에 k개의 노드가 들어있을 때, T⊆Tmst라고 성립하자. 그 다음 순서를 진행하면 새로운 edge가 하나 추가될 것이다. 그 edge를 e 라고 하자. 다음 단계의 T를 T′라고 하면 

 

  • Case 1 이면 명제 성립한다.
  • Case 2:  이면 반드시 e를 포함하는 사이클이 생성된다. 사이클 안에는 T에 들어있지 않으면서 e가 아닌           edge가 존재한다. 그 중 하나를 e'라고 하겠다.

e'의 weight에 따라 또 3 case로 나뉜다.

  • Case 2-1:  이면 알고리즘은 e'를 추가했을 것이다. 알고리즘은 작은 것부터 선택하기 때문이다.
  • Case 2-2: 이면 인 더 좋은 답이 존재하게 되므로 T가 성립된다는 것이 모순
  • Case 2-3: 이면 또 다른 정답!

 

2. 성능

  • weight에 따라 정렬해서 저장할 배열 생성해서 구현 : 사용 시간: 
  • Union Find: 노드가 사이클을 만드는지 확인 : 사용 시간: 거의상수 시간

O(mlogm)

 

 

4. Prim, Kruskal can find any solution

Prim Algorithm 과 Kruskal Algorithm 은 항상 모든 솔루션을 찾을 수 있다.

증명은 각 알고리즘의 정당성 증명과 유사하다.

 

알고리즘의 정답을 여러가지 답들 중 하나를 .

알고리즘이 진행되면서 Tmst로 가고 있다는 것을 보이면 된다.

알고리즘이 까지 만든 상태에서 에 속하지 않는 Edge 를 넣었다면, 

는 반드시 Cycle이 되고 이때 Cycle 내에 다른 엣지  존재한다.

 

  •  이면 알고리즘은 e'를 추가했을 것이다. 알고리즘은 작은 것부터 선택하기 때문이다.
  • 이면 인 더 좋은 답이 존재하게 되므로 T가 성립된다는 것이 모순
  • 이면 또 다른 Case의 정답

위와같은 이유로 반드시 를 만족해야한다.

 도 원래 고려 대상이였고, 이 때 을 추가했다면 다른 에 속하게 되었을 것이다.

따라서 Prim 알고리즘은 반드시 를 찾을 수 있다.

마찬가지로 Kruskal 알고리즘도 모든 Solution을 반드시 찾아낼 수 있다. 

 

이 사실을 이용하여 "그래프의 모든 엣지들의 weight 가 다를 경우 답은 유일함" 을 증명할 수 있다.

Prim, Kruskal 은  인 경우에만 답을 여러개 구할 수 있다.

모든 Edge들의 weight가 다르면 이런 경우가 존재하지 않으므로, 에 속하지 않는 Edge  자체가 존재하지 않는다.

알고리즘에게는 선택권이 없다.

따라서 답은 유일하게  하나로만 정해진다

반응형