프로그래밍[Univ]/알고리즘

[알고리즘] 탐욕적 알고리즘 Part 2 - 최소신장트리 Phase 3 - Kruskal 알고리즘

Cloud Travel 2011. 11. 25. 12:11
* Kruskal 알고리즘은 다음의 순서대로 실행한다.
 1. 연결선들을 가중치 순서대로 정렬하여 배열 EDGELIST[1...e]에 저장한다.
 2. sizeT = 0 // 트리에 있는 정점들의 수
 3. eCount = 0 // 트리에 있는 연결선들의 수 
 4. while ( sizeT < n-1 ) {
      eCount = eCount + 1;
      (v,w) = EDGELIST[ecount];
      if ( not together (v,w) ){
         // together(v,w)함수는 v와 w가 이미 합쳐져 있으면 true이다.
        "연결선 (v,w)를 트리에 추가한다."
        v와 w를 합친다.
        sizeT = sizeT + 1;
      }
       // 트리에 이미 추가된 노드들 끼리의 선이면 아무것도 실행하지 않고 다음 선으로 넘긴다.
    }    
 - 분석
  "1."번과정에서 Merge Sort를 사용 세타 eloge
  "4."번과정에서 n-2번 수행 세타 n
  통상적으로 eloge가 더 크므로 세타의 eloge로 한다.

 --------------------------------------------------------------------------------------
Kruskal 알고리즘은 어려운 것이 없으므로 추가적 설명은 하지 않는다.