반응형
SMALL

02. 최소신장트리

최소신장 트리의 정의

트리 : 사이클이 없는 단순 그래프

-> 트리는 그래프이기는 하지만 루트를 가지기 때문에 (일반 그래프에는 없는)계층 개념이 있고, 사이클이 없어서 한 정점에서 다른 정점으로 가는 경로가 유일한 독특한 구조

 

신장 트리(spanningtree) : 그래프 G의 모든 정점과 간선의 일부(또는 전부)를 포함하는 트리

-> 주어진 그래프의 정점을 모두 포함함

-> 최소 n-1개의 간선으로 구성한 그래프

 

- G 의 최소 부분 그래프 : 그래프 G의 부분 그래프 중에서 간선의 수가 가장 작은 것

 

프림(Prim)알고리즘

- n개의 정점을 갖는 연결 그래프 G에 대한 최소 비용 신장 트리 T를 구하는 알고리즘

- 그래프 전체에서 최소 비용을 갖는 간선 { u, v }를 선택하여 이 간선을 최소 비용 신장 트리 T에 추가함

     - > 이 간선을 최소 비용 신장 트리 T에 추가하였을 때 사이클을 형성하지 않으면 T에 추가하고 아니면 무시함

void prim(){ 
	T =φ; 
    W =φ; 
    E 로부터 최소 비용인 간선 { v, w }를 선택 ;
	while(T는 n-1개 이하의 간선 포함 &&E는 공집합 아님){ 
    	E 에서 간선 {v, w}를 제거 ;
		if({v, w}가 T 내에서 사이클을 생성 안함){ 
        	T = T ∪ v, w}}; //선택한 간선 추가 
        	W = W ∪ v, w}; //선택한 정점 추가 
            }
		  else 간선 {v, w}를 버림 ; 
       	E 로부터 W내의 정점과 최소 비용으로 연결된 간선 { v, w }를 선택 ;  }  }

 

크루스컬(Kruskal)알고리즘

- 남은 간선 중에서 무조건 최소 비용인 간선을 선택 한 후 사이클을 형성하지 않으면 그 간선을 선택함

- 중간 과정에 있는 T는 하나의 트리가 아니고 여러 개의 분리된 트리, 즉 숲일 수 있음

void kruskal(){
  while(T 가 n-1개 이하의 간선을 포함 && E 가 공집합 아님) 
  {
    E 로부터 최소 비용인 간선 { v,w }를 선택; 
    E 에서 간선 { v,w }를 제거;
	if({ v,w }가 T 내에서 사이클을 생성 하지 않음) 
      T = T ∪ v,w } };
	else
		간선 {v,w}를 버림;  }  }

 

솔린(Sollin)알고리즘

간선이 하나도 없는 그래프의 모든 정점들로 구성된 숲에서 시작함

-> 단계가 거듭되면서 숲 내의 트리들이 최소 비용을 갖는 간선으로 연결

void sollin(){
#집합 E의 초기 상태는 주어진 그래프의 간선 집합
#집합 F의 초기 상태는 그래프의 모든 정점들로 구성된 간선이 없는 숲

  T =φ;
	while(T는 완전한 하나의 트리가 아님 && E 는 공집합이 아님){
	  for(F내의 각각의 트리 T 에 대하여){
		T 와 다른 트리를 연결하는 E의 간선 {,}중에서 최소비용 간선{,} 선택 ;
		T = T ∪ {,}};
		E에서 간선 {,}를 제거 ;
		}
	  T에 새로 추가된 간선을 포함하여 F를 수정 ;
	}

반응형
LIST

'방송통신대학 > 자료구조' 카테고리의 다른 글

15-1. 그래프의 탐색  (0) 2021.01.15
14-2. 그래프 표현법, 추상자료형  (0) 2021.01.14
14-2. 그래프 표현법, 추상자료형  (0) 2021.01.14
14-1. 그래프  (0) 2021.01.13
13-3. 레드 블랙 트리  (0) 2021.01.12

+ Recent posts