8. 그래프 - kocwcontents.kocw.net/kocw/document/2014/chungbuk/leechungse/...그래프(graph):...

36
8. 그래프 8.1 그래프의 개요 8.2 그래프의 표현 8.3 그래프의 운행 8.3 그래프의 트리화 8.3 그래프의 응용

Upload: others

Post on 13-Sep-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8. 그래프

8.1 그래프의 개요

8.2 그래프의 표현

8.3 그래프의 운행

8.3 그래프의 트리화

8.3 그래프의 응용

Page 2: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.1 그래프의 개요

8.1.1 그래프의 기본 개념 그래프(graph): 연결되어 있는 객체간의 관계를 표현하는 자료구조

그래프의 예: 전기회로, 프로젝트관리, 지도에서 도시들의 연결

그래프: 아주 일반적인 자료구조 (예) 트리도 그래프의 일종으로 볼수 있다.

그래프 이론(graph theory): 그래프를 문제해결의 도구로 이용하는 연구분야

Page 3: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.1.1 그래프의 기본 개념 (1)

1736년에 오일러에 의하여 창안

오일러 문제: 모든 다리를 한번만 건너서 처음 출발했던 장소로 돌아오는 문제

문제의 핵심만을 표현 위치: 정점(node)

다리: 간선(edge)

오일러 경로: 정점에 연결된 간선의 개수가 짝수이면 존재

Page 4: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.1.1 그래프의 기본 개념 (2)

그래프는 G(V, E)로 표시된다. V는 정점(vertices)들의 집합

E는 간선(edge)들의 집합

정점과 간선은 모두 관련되는 데이터를 가질수 있다.

8.2: 그래프의 예

1

2 3

4

1

2 3

4 5 6

1

2

3

(a) G1 (b) G2 (c) G3

V(G1)={1, 2, 3, 4} E(G1)={(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3.,4)}

V(G2)={1, 2, 3, 4, 5, 6} E(G2)={(1, 2), (1, 3), (2, 4), (2, 5), (3, 6)}

V(G3)={1, 2, 3, 4} E(G3)={<1, 2>, <2, 3>, <3, 2>, <2, 4>}

4

Page 5: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.1.2 그래프 관련 용어 (1)

완전 그래프(complete graph) 최대 수의 간선을 가진 그래프

정점이 n개일 때, 간선의 수는

무방향 그래프일 때 n(n-1)/2,

방향 그래프일 때 n(n-1)

다중 그래프(mutigraph) 두 정점사이 2개 이상의 간선이 존재하는 그래프

원칙적으로 그래프는 중복간선을 허용하지 않음

서브 그래프(subgraph) V(G’)⊆V(G)이고, E(G’)⊆E(G)인 그래프 G’를 그래프

G의 서브 그래프 또는 부분 그래프라 한다.

Page 6: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.1.2 그래프 관련 용어 (2)

인접 (adjacent)과 부속 (incident):

무방향 그래프의 한 간선 (vj, vk)에 대해 vj와 vk는 서로 인접한다.

간선 (vj, vk)는 정점 vj와 vk에 부속한다.

예1) 그래프 G1 정점 1, 3 : 정점 0에 인접.

간선 (0, 1), (1, 2), (1, 3) : 정점 1에 부속.

예2) 그래프 G2 정점 1 : 정점 2로 인접(adjacent to 2)

정점 2 : 정점 1로부터 인접(adjacent to 1)

아크 <0, 1>, <1, 2>, <1, 0> : 정점 1에 부속.

0

1

3

2 G1

0

1

2

G2

Page 7: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.1.2 그래프 관련 용어 (3)

경로(path)와 사이클(cycle) 경로: 정점 vj 로부터 vi 까지의 경로(path)

경로의 길이(path length): 경로를 구성하는 간선의 수

단순 경로(simple path): 모두 상이한 간선들로 구성된 경로

사이클(cycle): 첫 번째 정점과 마지막 정점이 동일한 단순 경로

그래프 G1

경로 0,1,3,2 : 길이 3, 단순경로

경로 0, 1, 3, 0 : 사이클

그래프 G2

경로 0,1,2 : 단순 경로

경로 0, 1, 0 : 사이클

0

1

3

2 G1

0

1

2 G2

Page 8: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.1.2 그래프 관련 용어 (4)

연결 그래프(connected graph) 서로 다른 모든 정점들 사이에 경로가 있는 무방향 그래프는

연결 그래프 아니면 단절 그래프(disconnected graph)

어느 한 정점에서부터 다른 어떤 정점에로의 경로 존재

트리 : 사이클이 없는 연결 그래프 (acyclic connected graph)

연결 요소(connected component): 최대 연결 부분 그래프(maximal connected subgraph)

최대 : 최대의 정점과 최대의 간선

예) G : H1, H2 두개의 요소를 가짐

0

1

3

2 G

4

5 6 H1

H2

Page 9: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.1.2 그래프 관련 용어 (5)

강력 연결(strongly connected) 방향 그래프 G에서 V(G)에 있는 서

로 다른 모든 정점의 쌍 u와 v에 대해 u에서 v까지, 또한 v에서 u까지의 방향 경로가 존재

예 : G4

약한 연결(weakly connected) 무방향그래프로 생각할때(에지방향

을 무시해서) 모든 정점사이에 경로가 존재

예 : G5

강력 연결 요소(strongly connected component) 강력 연결된 최대 부분 그래프

예) H1 , H2 : G2 의 강력연결요소

0 1 4

3 2

0 1 4

3 2 G4 G5

0

1

2 G2

0

1 H1

2

H2

방향그래프에 대해

Page 10: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.1.2 그래프 관련 용어 (6)

차수(degree)

무방향 그래프의 차수(degree) : 무방향 그래프에서 그 정점에 부속된 간선의 수

예) G1 의 정점 3의 차수 : 3

정점이 n개인 무방향 그래프의 간선 수 e = ( ∑i=0

n-1 degree(i) ) / 2

방향 그래프의 차수(degree)

진입 차수(indegree) : 방향 그래프에서 정점 v를 머리로 하는 간선의 수

진출 차수(outdegree) : 방향 그래프에서 정점 v를 꼬리로 하는 간선의 수

예) 그래프 G2

정점 0 : 진입 차수 = 진출 차수 = 1

정점 1 : 진입 차수 =1, 진출 차수 = 2

0

1

3

2 G1

0

1

2 G2

Page 11: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.2 그래프의 표현

그래프 표현 방법은 그래프에 수행시키려는 연산과 적용하려는 응용에 따라 선택 8.2.1 인접 행렬(adjacency matrix)

8.2.2 인접 리스트(adjacency list)

8.2.3 인접 다중 리스트(adjacency multilist)

Page 12: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.2.1 인접 행렬 (1)

인접 행렬(adjacency matrix) n≥1개의 정점을 가지는 그래프 G = (V, E)에 대해, 크기

가 nⅹn인 2차원 배열 a[n, n]

부속 행렬(incidence matrix)이라고도 함 인접 행렬로 표현하는데 필요한 공간 : n2 비트

무방향 그래프 : 행렬의 상위 삼각이나 하위 삼각만 저장한다면 거의 반 정도의 공간을 절약

인접 행렬의 정보 무방향 그래프 : 행 i 의 합은 정점 i 의 차수 방향 그래프 : 행 i의 합은 정점 i의 진출 차수, 열 i의 합은 정점 i의 진입 차수

∉∈

=E(G)j)(i, 0, E(G)j)(i, 1,

j]a[i,

Page 13: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.2.1 인접 행렬 (2)

0

1

3

2

0

1

2

0

1

3

4 2

G1 G2 G3

0 1 0 1

1 0 1 1

0 1 0 1

1 1 1 0

[0] [1] [2] [3] [0] [1] [2] [3]

a[4, 4]

0 1 0

1 0 1

0 0 0

[0] [1] [2] [0] [1] [2]

a[3, 3]

0 1 0 0 0

1 0 1 0 0

0 1 0 0 0

0 0 0 0 1

0 0 0 1 0

[0] [1] [2] [3] [0] [1] [2] [3]

a[5, 5]

[4]

[4]

그래프 G1, G2, G3에 대한 인접 행렬 표현

Page 14: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.2.2 인접 리스트 표현법 (1)

인접 리스트(adjacency list) n개의 정점 각각에 대한 인접한 정점들을 리스트로 만듦

인접 리스트의 구현

연결 리스트

순차 표현

연결 리스트로 표현한 인접 리스트 각각의 정점의 리스트 : 헤더 노드와 vertex 필드, link

필드로 구성된 리스트 노드로 이루어짐

n개의 정점과 e개의 간선을 가진 그래프에서

무방향 그래프는 n개의 헤더 노드와 2e개의 리스트 노드 필요

방향 그래프는 n개의 헤더 노드와 e개의 리스트 노드 필요

Page 15: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.2.2 인접 리스트 표현법 (2)

0

1

3

2

0

1

2

G1

G2

header vertex link [0]

[1] [2]

[3]

3 null

3 null

1

0 2

1 3 null

0 1 2 null

null

header [0]

[1] [2]

null 1

0 null 2

(a) G1에 대한 인접 리스트

(b) G2에 대한 인접 리스트

Page 16: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.2.2 인접 리스트 표현법 (3)

역인접 리스트(inverse adjacency list) 각 정점 i에 대해, 정점 i로 진입하는 모든 정점 각각에 대한 노드를 포함시킨 리스트

1

2 G2

header [0]

[1]

[2]

1 null

0 null

1 null

0 null

[0]

[1] [2]

null 1

0 null 2

인접리스트

역인접리스트

header

Page 17: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.2.3 인접 다중 리스트 표현법 (1)

인접 다중 리스트(adjacency multilist) 다중 리스트

노드들을 여러 리스트들이 공용하는 리스트

특정 간선에 대한 접근 여부를 표시하는 데 편리

간선에 부속된 두 정점 각각에 대한 인접 리스트를 다중 리스트로 유지하여, 하나의 간선을 두 개의 리스트가 공유하는 리스트

간선 (i, j)를 표현하는 노드 구조

M : 간선이 이미 검사되었는지 여부를 표시하는 마크 비트

i-link, j-link : 각각 정점 i, j에 대한 인접 리스트의 링크

M i j i-Link j-Link

Page 18: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.2.3 인접 다중 리스트 표현법 (2)

클래스 노드의 정의

Public class edge {

boolean M;

int i;

int j;

edge i-link;

edge j-link;

}

edge [] headnode new edge[n]

Page 19: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.2.3 인접 다중 리스트 표현법 (3)

G1에 대한 인접 다중 리스트의 식별

정점 0의 경우

정점 0의 헤더로부터 노드 E0를 따라감

노드 E0에서 정점 0을 포함한 필드 = i i-link를 따라 E1으로 감

노드 E1의 첫 번째 i 필드가 정점 0 포함 다시 i-link를 따라감

이 때 링크값이 널 여기서 리스트가 끝남

위의 방법으로 모든 정점들을 식별

[0] [1] [2] [3]

G1에 대한 인접 다중 리스트

header E2 E1 1 0 E0 E3 null 3 0 E1 E4 E3 2 1 E2 E4 null 3 1 E3 null null 3 2 E4

0

1

3

2 G1

E0

E1

E4 E3

E2

정점 0 : E0 E1 정점 1 : E0 E2 E3 정점 2 : E2 E4 정점 3 : E1 E3 E4

Page 20: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.3 그래프의 운행

그래프 운행(traverse) 주어진 어떤 정점을 출발하여 체계적으로 그래프의 모든 정점들을 방문하는 것

그래프 운행법의 종류 깊이 우선 탐색(Depth First Search)

넓이 우선 탐색(Breadth First Search)

그래프 운행의 응용 연결 요소(Connected component)

신장 트리(Spanning tree)

Page 21: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.3.1 깊이 우선 탐색 (1)

깊이 우선 탐색(depth first search : DFS) 1) 정점 i를 방문한다.

2) 정점 i에 인접한 정점 중에서 아직 방문하지 않은 정점이 있으면, 이 정점들을 모두 스택에 저장한다.

3) 스택에서 정점을 삭제하여 새로운 i를 설정하고, 단계 (1)을 수행한다.

4) 스택이 공백이 되면 연산을 종료한다

정점 방문 여부를 표시 배열 visited[n]을 이용하여 표현

=

않았음 방문하지 false, 방문하였음 true, visited[i]

Page 22: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.3.1 깊이 우선 탐색 (1)

깊이 우선 탐색(depth first search : DFS) 1) 정점 i를 방문한다.

2) 정점 i에 인접한 정점 중에서 아직 방문하지 않은 정점이 있으면, 이 정점들을 모두 스택에 저장한다.

3) 스택에서 정점을 삭제하여 새로운 i를 설정하고, 단계 (1)을 수행한다.

4) 스택이 공백이 되면 연산을 종료한다

정점 방문 여부를 표시 배열 visited[n]을 이용하여 표현

=

않았음 방문하지 false, 방문하였음 true, visited[i]

Page 23: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.3.1 깊이 우선 탐색 (2)

깊이 우선 탐색 알고리즘 Public void DFS(int vtx) { node w; marked[vtx]=true; for (w=graph[vtx]; w!=null; w=w.link) if (marked[w.vertex]!=true) DFS(w.vertex); }

Page 24: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.3.2 너비 우선 탐색 (2)

너비 우선 탐색 (breadth first search ; BFS) 시작 정점으로부터 가까운 정점을 먼저 방문하고 멀리 떨

어져 있는 정점을 나중에 방문하는 순회 방법

큐를 사용하여 구현됨

Page 25: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.3.2 너비 우선 탐색 (2)

너비 우선 탐색 알고리즘 Public class queue { int vertex; queue link; } Public void BFS(int vtx){ node w; queue front; queue rear; front=rear=null; marked[vtx]=true; ADDQ(front,rear,vtx);

while(front!=null){ vtx=DELETEQ(front); for(w=graph[vtx];w!=null;w=w.link) if (maked[w.vertex]!=true){ ADDQ(front,rear,w.vertex); marked[w.vertex]=true; } } }

Page 26: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.3.4 그래프 운행의 응용

연결 요소 연결 그래프 여부 판별

DFS나 BFS 알고리즘 이용

무방향 그래프 G에서 하나의 정점i에서 시작하여 DFS(or BFS)로 방문한 노드집합 V(DFS(G, i))가 V(G)와 같으면 G는 연결 그래프.

연결 요소 찾기

정점 i에 대해 DFS (or BFS) 수행

둘 이상의 연결 요소가 있는 경우, 나머지 정점 j에 대해 DFS(or BFS) 반복 수행

V(DFS(G, i)) = V(G) : 연결 그래프, 하나의 연결 요소 V(DFS(G, i))⊂ V(G) : 단절 그래프, 둘 이상의 연결 요소

Page 27: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.3.4 그래프 운행의 응용

연결 요소를 찾는 알고리즘 Public void CONCOMP(void) { int i; for(i=0;i<n;i++) marked[i]=false; for(i=0;i<n;i++) if(marked[i]!=true){

DFS(i); System.out.println(“\n”); } }

Page 28: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.4 그래프의 트리화

8.4.1 신장 트리

8.4.2 최소 비용 신장 트리

Page 29: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.4.1 신장 트리 (1)

신장 트리(spanning tree) 그래프 G에서 E(G)에 있는 간선과 V(G)에 있는 모든 정점

들로 구성된 트리

DFS, BFS에 사용된 간선 집합 T는 그래프 G의 신장 트리를 의미

주어진 그래프 G에 대한 신장 트리는 유일하지 않음

(a) 연결 그래프 G (b) 신장 트리

그래프 G에 대한 3개의 신장 트리

Page 30: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.4.1 신장 트리 (2)

신장 트리의 종류 깊이 우선 신장 트리(depth first spanning tree) : DFS

사용

너비 우선 신장 트리(breadth first spanning tree) : BFS 사용

0 1 3

2 4 5

6 (a) 연결 그래프 G

0 1 3

2 4 5

6 (b) DFS(0) 신장 트리

0 1 3

2 4 5

6 (c) BFS(0) 신장 트리

연결 그래프 G와 신장 트리

Page 31: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.4.2 최소 비용 신장 트리 (1)

최소비용신장트리(MST: minimu spanning tree): 네트워크에 있는 모든 정점들을 가장 적은 수의 간선과 비용으로 연결하는 신장트리

MST의 응용

도로 건설 - 도시들을 모두 연결하면서 도로의 길이가 최소가 되도록 하는 문제

전기 회로 - 단자들을 모두 연결하면서 전선의 길이가 가장 최소가 되도록 하는 문제

통신 - 전화선의 길이가 최소가 되도록 전화 케이블 망을 구성하는 문제

배관 - 파이프를 모두 연결하면서 파이프의 총 길이가 최

소가 되도록 연결하는 문제

Page 32: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.4.2 최소 비용 신장 트리 (2)

2가지의 대표적인 알고리즘 Kruskal의 알고리즘

Prim의 알고리즘

탐욕적인 방법(greedy method) 알고리즘 설계에서 있어서 중요한 기법 중의 하나

결정을 해야 할 때마다 그 순간에 가장 좋다고 생각되는 것을 해답으로 선택함으로써 최종적인 해답에 도달

탐욕적인 방법은 항상 최적의 해답을 주는지를 반드시 검증해야 한다.

Kruskal의 알고리즘은 최적의 해답을 주는 것으로 증명

Page 33: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.4.2 최소 비용 신장 트리 (3)

Prim의 MST 알고리즘 Prim의 알고리즘은 시작 정점에서부터 출발하여 신장 트리 집합

을 단계적으로 확장해나가는 방법

시작 단계에서는 시작 정점만이 신장 트리 집합에 포함

앞 단계에서 만들어진 신장 트리 집합에, 인접한 정점들 중에서 최저 간선으로 연결된 정점을 선택하여 트리를 확장

이 과정은 트리가 n-1개의 간선을 가질 때까지 계속된다.

간선 (a, b)와 간선 (f, e)의 가중치를 비교해보면

(f, e)가 27로서 (a, b)의 29보다 높다. 따라서 (f, e) 간선이 선택되고 정점 e가 신장 트리 집합에 포

함된다.

Page 34: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.4.2 최소 비용 신장 트리 (4)

Prim의 MST 알고리즘

Page 35: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.4.2 최소 비용 신장 트리 (5)

Kruskal의 MST 알고리즘 최소 비용 신장 트리가 최소 비용의 간선으로 구성됨과 동시에

사이클을 포함하지 않는다는 조건에 근거하여, 각 단계에서 사이클을 이루지 않는 최소 비용 간선을 선택

그래프의 간선들을 가중치의 오름차순으로 정렬한다.

정렬된 간선들의 리스트에서 사이클을 형성하지 않는 간선을 찾아서 현재의 최소 비용 신장 트리의 집합에 추가한다.

만약 사이클을 형성하면 그 간선은 제외된다.

Page 36: 8. 그래프 - KOCWcontents.kocw.net/KOCW/document/2014/Chungbuk/LeeChungse/...그래프(graph): 연결되어 있는 객체간의 관계를 표현하 는 자료구조 그래프의

8.4.2 최소 비용 신장 트리 (6)

Kruskal의 MST 알고리즘