신장 트리의 예

Download Report

Transcript 신장 트리의 예

신장 트리


신장트리
최소 비용 신장 트리
–
–
–
프림 알고리즘
크루스컬 알고리즘
솔린 알고리즘
■ 신장 트리란?

그래프내의 모든 정점을 포함하는 트리이다.

신장 트리는 트리의 특수한 형태이므로 모든 정점들이 연결
되어 있어야 하고

사이클을 포함해서는 안 된다.

신장 트리는 그래프에 있는 n개의 정점을 정확히 (n-1)개의
간선으로 연결하게 된다.

그래프에서 신장 트리를 찾으려면 깊이 우선 탐색이나 너비
우선 탐색을 사용할 수 있다.

하나의 그래프에는 많은 신장 트리가 존재 가능
■ 신장 트리의 예
a
b
e
c
d
G
a
a
b
b
e
e
c
d
c
d
a
b
a
b
e
e
c
c
d
신장 트리의 예
d
■ 신장 트리의 응용

신장 트리는 통신 네트워크 구축에 사용된다.

예를 들어 n개의 위치를 연결하는 통신 네트워크를 최소의
링크를 이용하여 구축하고자 할 경우

최소 링크수는 n-1이 되고 따라서 신장 트리들이 가능한
대안이 된다

예를 들어, 회사 내의 모든 전화기를 가장 적은 수의 케이
블을 사용하여 연결하고자 한다면

신장 트리를 구함으로써 해결할 수 있다.
■ 최소 비용 신장 트리

통신망, 도로망, 유통망 등은 대개 길이, 구축비용, 전송시간
등의 가중치를 간선에 할당한 그래프인 네트워크로 표현될
수 있다.

이러한 도로망, 통신망, 유통망을 가장 적은 비용으로 구축
하고자 한다면

네트워크에 있는 모든 정점들을 가장 적은 수의 간선과 비용
으로 연결하는 최소 비용 신장 트리(MST : minimum
spanning tree)가 필요하게 된다.

최소 비용 신장 트리는 신장 트리 중에서 사용된 간선들의
가중치 합이 최소인 신장 트리를 말한다.
■ 최소 비용 신장 트리 응용의 예

최소비용 신장 트리의 응용의 예를 들면 다음과 같다.
–
도로건설 : 도시들을 모두 연결하면서 도로의 길이가 최소가
되도록 하는 문제
–
전기회로 : 단자들을 모두 연결하면서 전선의 길이가 가장
최소가 되도록 하는 문제
–
통신 : 전화선의 길이가 최소가 되도록 전화 케이블 망을 구성
하는 문제
–
배관 : 파이프를 모두 연결하면서 파이프의 총 길이가 최소가
되도록 연결하는 문제
■ 프림(Prim) 알고리즘

Prim의 알고리즘은 시작 정점에서부터 출발하여 신장 트리
집합을 단계적으로 확장해나가는 방법이다.

시작 단계에서는 시작 정점만이 신장 트리 집합에 포함된다.

Prim의 방법은 앞 단계에서 만들어진 신장 트리 집합에

인접한 정점들 중에서 최저 간선으로 연결된 정점을 선택하
여 확장한다.

이 과정은 트리가 n-1개의 간선을 가질 때까지 계속된다.
■ 프림(Prim) 알고리즘의 예

(a)의 그래프를 프림(Prim)의 방법을 이용하여 신장 트리로
만드는 과정인 (b)
10
1
50
2
40
4
30
45
3
35
5
15
55
(a) 그래프
20
6
25
■ 프림(Prim) 알고리즘의 예(계속)
간 선
(1,2)
(2,6)
(3,6)
비 용
10
25
15
정점 집합W
{1,2}
{1,2,6}
{1,2,3,6}
신장 트리(T)
1
2
3
4
5
6
1
2
3
4
5
6
1
2
3
4
5
6
■ 프림(Prim) 알고리즘의 예(계속)
(6,4)
(1,4)
(3,5)
20
30
35
{1,2,3,4,6}
{1,2,3,4,6}
{1,2,3,4,5,6}
(b) 알고리즘의 각 단계
1
2
3
4
5
6
1
2
3
4
5
6
1
2
3
4
5
6
■ 크루스컬(Kruskal) 알고리즘






Kruskal의 알고리즘은 최소 비용 신장 트리가 최소 비용의 간
선으로 구성됨과 동시에 사이클을 포함하지 않는다는 조건에
근거하여,
각 단계에서 사이클을 이루지 않는 최소비용 간선을 선택함
이러한 과정을 반복함으로써 네트워크의 모든 장점을 최소비
용으로 연결하는 최적 해답을 구할 수 있다.
Kruskal의 알고리즘은 먼저 그래프의 간선들을 가중치의 오
름차순으로 정렬한다.
정렬된 간선들의 리스트에서 사이클을 형성하지 않는 간선을
찾아서 현재의 최소 비용 신장 트리의 집합에 추가한다.
만약 사이클을 형성하면 그 간선은 제외된다.
■ 크루스컬(Kruskal) 알고리즘의 예
간 선
(1,2)
(3,6)
(4,6)
비 용
10
15
20
신장 숲
1
2
3
4
5
6
1
2
3
4
5
6
1
2
3
4
5
6
■ 크루스컬(Kruskal) 알고리즘의 예
(2,6)
(1,4)
(3,5)
25
30
35
알고리즘 수행과정
1
2
3
4
5
6
1
2
3
4
5
6
1
2
3
4
5
6
■ 솔린(Solin) 알고리즘

크루컬스 및 프림의 알고리즘은 각 단계에서 한 개의 간선이
신장 트리의 구성을 위해 선택된다.

이와는 달리 단계마다 여러 개의 간선이 선택되는 방법이 솔
린 알고리즘의 기본 개념이다.

시작 단계에는 그래프의 모든 정점들로 구성된 숲이 형성됨

단계가 거듭되면서 숲 내의 각각의 트리에 대하여 최소 경비
를 갖는 간선이 하나씩 선택되며

이러한 과정을 더 이상의 간선이 없거나 완전한 하나의 트리
가 생성될 때까지 반복한다
■ 솔린(Solin) 알고리즘의 예
간 선
신장 숲
(1,2)(3,6)
(3,5)(2,6)(6,4)
1
2
3
4
5
6
1
2
3
4
5
6
솔린 알고리즘의 간 단계