10 장 . 그래프 (graph) 1 절 . 그래프 2 절 . 그래프 표현 3 절 . 그래프 탐색 4...

65
이 이 이 ([email protected] ) 2010 이 1 이이 10 장 . 장장장 (Graph) 1 장 . 장장장 2 장 . 장장장 장장 3 장 . 장장장 장장 4 장 . 장장장장 장 장장장장 장장장장

Upload: leah-mcclain

Post on 30-Dec-2015

130 views

Category:

Documents


0 download

DESCRIPTION

10 장 . 그래프 (Graph) 1 절 . 그래프 2 절 . 그래프 표현 3 절 . 그래프 탐색 4 절 . 신장트리 및 최소비용 신장트리. 이 완 직 ( [email protected] ) 2010 년 1 학기. 1. 그래프. 선형 자료구조나 트리 자료구조로 표현하기 어려운“多 : 多”의 관계를 가지는 원소들을 표현하기 위한 자료구조 정점 (vertex) 과 간선 (edge) 들의 집합. 1.1 그래프 종류. 무방향 그래프 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

이 완 직 ([email protected])2010 년 1 학기

10 장 . 그래프 (Graph)1 절 . 그래프2 절 . 그래프 표현3 절 . 그래프 탐색4 절 . 신장트리 및 최소비용 신장트리

Page 2: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

• 선형 자료구조나 트리 자료구조로 표현하기 어려운“多 :多”의 관계를 가지는 원소들을 표현하기 위한 자료구조– 정점 (vertex) 과 간선 (edge) 들의 집합

1. 그래프

2

Page 3: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

• 무방향 그래프– 두 정점을 연결하는 간선의 방향이 없는 그래프로서 양방향으로

갈 수 있다 .

1.1 그래프 종류

3

V(G1) ={A, B, C, D} E(G1)={(A, B), (A, C), (A, D), (B, C), (C, D)}V(G2) ={A, B, C, D} E(G2) ={(A, B), (A, C)}

Page 4: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

• 방향 그래프– 간선이 방향을 가지고 있는 그래프로서 도로의 일방통행 길처럼

간선을 통하여 한쪽 방향으로만 갈수 있다 .

1.1 그래프 종류

4

V(G3)={A, B, C, D}       E(G3)={<A, B>, <A, D>, <D, B>, <C, D>} V(G4)={A, B, C, D}       E(G4)={<A, B>, <A, C>}

Page 5: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

• 완전 그래프 – 각 정점에서 다른 모든 정점을 연결하여 가능한의 최대 간선수를

가진 그래프이다 .

1.1 그래프 종류

5

Page 6: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

• 부분 그래프– 원래의 그래프에서 일부의 정점이나 간선을 제외하여 만든

그래프– 그래프 G 와 부분 그래프 G' 는 다음과 같은 관계를 갖는다 .

1.1 그래프 종류

6

V(G')⊆V(G),  E(G')⊆E(G)

Page 7: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

• 가중치 그래프 (weighted graph) 또는 네트워크(network) 간선에 비용이나 가중치가 할당된 그래프

1.1 그래프 종류

7

Page 8: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

• 인접 정점 (adjacent vertex)– 간선에 의해 연결된 정점을 의미한다 .

• 차수 (degree)– 정점에 부속되어 있는 간선의 수를 말한다 .

• 방향 그래프의 진입차수 (in-degree)– 정점을 머리로 하는 간선의 수로서 외부에서 오는 간선의 수

• 방향 그래프의 진출차수 (out-degree)– 정점을 꼬리로 하는 간선의 수의 수로서 외부로 향하는 간선의 수

• 경로 (path) – 그래프에서 간선을 따라 갈 수 있는 길을 순서대로 나열한 것 .

1.2 그래프 관련 용어

8

Page 9: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

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

• 사이클 (cycle)– 단순경로 중에서 경로의 시작 정점과 마지막 정점이 같은 경로

• 그래프와 트리의 차이점– 트리는 사이클을 허용하지 않는다 .

1.2 그래프 관련 용어

9

Page 10: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

• 그래프를 표현– 정점에 대한 집합과 정점에 부속된 간선이 집합을 표현

• 그래프를 구현하기 위해서 필요한 연산

2. 그래프의 표현

10

Page 11: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

• 행렬에 대한 2 차원 배열을 사용하는 순차 자료구조 방법으로서 그래프를 메모리에 표현한 것

2.1 인접 행렬 (adjacent matrix)

11

Page 12: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

• [ 예제 10-1] 인접 행렬

12

Page 13: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

• 각 정점에 대한 인접 정점들을 단순 연결 리스트로 표현한 것

2.2 인접 리스트 (adjacent list)

13

Page 14: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

14

• [ 예제 10-2] 인접 리스트

Page 15: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

15

• [ 예제 10-2] 수행 결과

Page 16: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

• 그래프의 가장 기본적인 연산으로 , 하나의 정점으로부터 시작하여 차례대로 모든 정점들을 한 번씩 방문하는 것

• 그래프 탐색의 2 가지 방법– 깊이 우선 탐색 (DFS: depth-first search)– 너비우선 탐색 (BFS: breadth-first search)

3. 그래프 탐색

16

Page 17: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

• 한 방향으로 갈 수 있을 만큼 계속 가다가 더 이상 갈 수 없게 되면 ,가장 마지막에 만났던 갈림길 간선이 있는 정점으로 되돌아온 후 , 이곳으로부터 다른 방향의 간선으로 탐색을 계속 반복하여 결국 모든 정점을 방문하는 방법이다 .

① 그래프의 시작 정점 v 를 결정하여 방문하고 방문하였다는 표시를 한다 .

② 정점 v 에 인접한 정점 중에서 아직 방문하지 않은 정점 w 가 있으면 정점 v 를 스택에 push 하고 w 를 방문한다 . 그리고 w 를 v 로 하여 다시 를 반복한다 . 방문하지 않은 정점이 없으면 ,탐색의 방향을 바꾸기 위해 스택을 pop 하여 받은 가장 마지막 방문 정점을 v 로 하여 다시 를 수행한다 .

③ 스택이 공백이 될 때까지 를 반복한다 .

3.1 깊이우선 탐색 (DFS)

17

Page 18: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

• 그래프 G 에 대한 깊이우선 탐색 알고리즘

• 초기상태– 배열 visited 를 false 로 초기화하고 공백 스택을 생성

3.1 깊이우선 탐색 (DFS)

18

Page 19: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

① 정점 A 를 시작으로 깊이우선 탐색을 시작한다 .

visited[A] ← true;A 방문 ;

3.1 깊이우선 탐색 (DFS)

19

Page 20: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

② 정점 A 에 방문하지 않은 정점 B, E 가 있으므로 A 를 스택에 push 하고 인접정점 B 와 E 중 , 오름차순에 따라 B 를 선택하여 탐색을 계속

push(stack, A);visited[B] ← true;B 방문 ;

20

Page 21: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

③ 정점 B 에 방문하지 않은 정점 C, D 가 있으므로 B 를 스택에 push 하고 인접정점 C 와 D 중에서 오름차순에 따라 C 를 선택하여 탐색을 계속

push(stack, B);visited[C] ← true;C 방문

21

Page 22: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

④ 정점 C 에 방문하지 않은 정점 D, E 가 있으므로 C 를 스택에 push 하고 인접정점 D 와 E 중 오름차순에 따라 D 를 선택하여 탐색을 계속

push(stack, C);visited[D] ← true;D 방문 ;

22

Page 23: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

⑤ 정점 D 에서 방문하지 않은 인접정점이 없으므로 , 마지막 정점으로 돌아가기 위해서 스택을 pop 하여 받은 정점 C 에 대하여 방문하지 않은 인접정점이 있는지 확인한다 .

pop(stack);

23

Page 24: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

⑥ 정점 C 에 방문하지 않은 정점 E 가 있으므로 C 를 스택에 push하고 인접정점 E 를 선택하여 탐색을 계속한다 .

push(stack, C);visited[E] ← true;E 방문 ;

24

Page 25: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

⑦ 정점 E 에 방문하지 않은 정점 F 가 있으므로 E 를 스택에 push하고 인접정점 F 를 선택하여 탐색을 계속한다 .

push(stack, E);visited[F] ← true;F 방문 ;

25

Page 26: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

⑧ 정점 F 에서 방문하지 않은 인접정점이 없으므로 , 마지막 정점으로 돌아가기 위해서 스택을 pop 하여 받은 정점 E 에 대하여 방문하지 않은 인접정점이 있는지 확인한다 .

pop(stack);

26

Page 27: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

⑨ 정점 E 에서 방문하지 않은 인접정점이 없으므로 , 마지막 정점으로 돌아가기 위해서 스택을 pop 하여 받은 정점 C 에 대하여 방문하지 않은 인접정점이 있는지 확인한다 .

pop(stack);

27

Page 28: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

⑩ 정점 C 에서 방문하지 않은 인접정점이 없으므로 , 마지막 정점으로 돌아가기 위해서 스택을 pop 하여 받은 정점 B 에 대하여 방문하지 않은 인접정점이 있는지 확인한다 .

pop(stack);

28

Page 29: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

⑪ 정점 B 에서 방문하지 않은 인접정점이 없으므로 , 마지막 정점으로 돌아가기 위해서 스택을 pop 하여 받은 정점 A 에 대하여 방문하지 않은 인접정점이 있는지 확인한다 .

pop(stack);

29

Page 30: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

⑫ A 에 방문하지 않은 인접 정점이 없고 , 스택도 공백이므로 종료

• 스택 탐색한 경로 순서는 A-B-C-D-E-F 이다

30

1)

2)

3)

4)

5)

6)

Page 31: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

• 시작 정점으로부터 인접한 정점들을 모두 차례로 방문하고 , 방문했던 정점을 시작으로 하여 다시 인접한 정점들을 차례로 방문하는 방식

① 시작 정점 v 를 결정하여 방문하고 방문 표시를 한다 .② 정점 v 에 인접한 정점들 중에서 방문하지 않은 정점을 차례로

방문하면서 큐에 enQueue 한다 .③ 방문하지 않은 인접한 정점이 없으면 , 방문했던 정점에서 인접한

정점들을 다시 차례로 방문하기 위해 큐에서 deQueue 하여 구한 정점에서 를 반복한다 .

④ 큐가 공백이 될 때까지 ~ 을 반복한다 .

3.2 너비우선 탐색 (BFS)

31

Page 32: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

• 초기상태– 배열 visited 를 false 로 초기화하고 공백 큐를 생성

32

Page 33: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

① 정점 A 를 시작으로 너비우선 탐색을 시작한다 .

visited[A] ← true;A 방문 ;

33

Page 34: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

② 방문하지 않은 정점 A 의 모든 인접정점 B, E 를 방문하고 , 큐에 enQueue 한다 .

visited[( 방문하지 않은 A 의 인접정점 B 와 E)] ← true;( 방문하지 않은 A 의 인접정점 B 와 E) 방문 ;enQueue(Q, ( 방문하지 않은 A 의 인접정점 B 와 E));

34

B 와 E 에 방문

Page 35: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

③ 정점 A 에 대한 인접정점들을 처리했으므로 너비우선 탐색을 계속 수행할 다음 정점을 찾기 위해 큐를 deQueue 하여 정점 B 를 구한다 .

v ← deQueue(Q);

35

Page 36: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

④ 방문하지 않은 정점 B 의 인접정점 C 를 방문하고 큐에 enQueue

visited[( 방문하지 않은 B 의 인접정점 C)] ← true;( 방문하지 않은 B 의 인접정점 C 방문 ;enQueue(Q, ( 방문하지 않은 B 의 인접정점 C));

36

Page 37: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

⑤ 정점 B 에 대한 인접정점들을 처리했으므로 너비우선 탐색을 계속 수행할 다음 정점을 찾기 위해 큐를 deQueue 하여 정점 E 를 구한다 .

v ← deQueue(Q);

37

Page 38: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

⑥ 정점 E 의 방문하지 않은 인접정점 F 를 방문하고 큐에 enQueue

visited[( 방문하지 않은 E 의 인접정점 F)] ← true;( 방문하지 않은 E 의 인접정점 F 방문 ;enQueue(Q, ( 방문하지 않은 E 의 인접정점 F));

38

Page 39: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

⑦ 정점 E 에 대한 인접정점들을 처리했으므로 너비우선 탐색을 계속 수행할 다음 정점을 찾기 위해 큐를 deQueue 하여 정점 C 를 구한다 .

v ← deQueue(Q);

39

Page 40: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

⑧ 방문하지 않은 정점 C 의 인접정점 D 를 방문하고 큐에 enQueue

visited[( 방문하지 않은 C 의 인접정점 D)] ← true;( 방문하지 않은 C 의 인접정점 D) 방문 ;enQueue(Q, ( 방문하지 않은 C 의 인접정점 D));

40

Page 41: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

⑨ 정점 C 에 대한 인접정점들을 처리했으므로 너비우선 탐색을 계속 수행할 다음 정점을 찾기 위해 큐를 deQueue 하여 정점 F 를 구한다 .

v ← deQueue(Q);

41

Page 42: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

⑩ 정점 F 에는 방문하지 않은 인접정점이 없으므로 너비우선 탐색을 계속 수행할 다음 정점을 찾기 위해 큐를 deQueue 하여 정점 D를 구한다 .

v ← deQueue(Q);

42

Page 43: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

⑪ 방문하지 않은 정점 D 의 인접정점이 없으므로 너비우선 탐색을 계속 수행할 다음 정점을 찾기 위해 큐를 deQueue 하는데 큐가 공백이므로 너비우선 탐색을 종료한다 .

• 그래프 G 의 너비우선 탐색 경로는 A—B—E—C—F—D 이다 .

43

Page 44: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

• 신장 트리 (spanning tree)– n 개의 정점으로 이루어진 무방향 그래프 G 에서 n 개의 모든

정점과 n-1 개의 간선으로 만들어진 트리– 최소의 간선을 이용해 모든 정점을 연결한 그래프

• 깊이우선 신장 트리 (depth first spanning tree) – 깊이우선 탐색을 이용하여 생성된 신장 트리

• 너비우선 신장 트리 (breadth first spanning tree)– 너비우선 탐색을 이용하여 생성된 신장 트리

4. 신장 트리와 최소비용 신장 트리

44

Page 45: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

• G1 의 깊이우선 신장 트리 및 너비우선 신장 트리

4. 신장 트리와 최소비용 신장 트리

45

Page 46: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

• 그래프 G1 과 신장 트리의 예

4. 신장 트리와 최소비용 신장 트리

46

Page 47: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

• 최소비용 신장 트리 (MCST: Minimum Cost Spanning Tree)– 주어진 무방향 가중치 그래프의 신장 트리 중 전체 가중치의 합이

최소가 되는 트리

• 활용분야 – 도로의 길이가 최소가 되도록 하는 도로망 건설– 최소의 네트워크 선을 사용하여 시스템을 연결해야 하는 통신망

설계

• 최소비용 신장 트리를 만드는 알고리즘– 크루스칼 (Kruskal) 알고리즘와 프라임 (Prime) 알고리즘

4.1 최소비용 신장 트리

47

Page 48: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

• Greedy Algorithm 의 일종– “ 일단 가설 비용이 제일 싼 것부터 먼저 건설하고 보자”– “ 당장 눈앞에 보이는 이득을 추구하는 것이 추후에 전체적으로

크게 봐도 이득이 된다”

4.2 크루스칼 알고리즘

48

❶ 그래프 G 의 모든 간선을 가중치에 따라 오름차순으로 정리한다 . ❷ 그래프 G 에 가중치가 가장 작은 간선을 삽입한다 . 이때 사이클을

형성하는 간선은 삽입할 수 없으므로 이런 경우에는 그 다음으로 가중치가 작은 간선을 삽입한다 .

❸ 그래프 G 에 n – 1 개의 간선을 삽입할 때까지 를 반복한다❷ . ❹ 그래프 G 의 간선이 n - 1 개가 되면 최소비용 신장 트리가 완성된다 .

Page 49: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

• Kruskal 알고리즘을 이용하여 G 의 최소 비용 신장 트리 만들기 초기 상태 : 그래프 G 의 간선을 가중치에 따라서 오름차순 정렬

49

Page 50: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

① 가중치가 가장 작은 간선 (E,G) 삽입 .– ( 현재 삽입한 간선의 수 : 1 개 )

50

Page 51: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

② 나머지 간선 중에서 가중치가 가장 작은 간선 (A,B) 삽입 . – ( 현재 삽입한 간선의 수 : 2 개 )

51

Page 52: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

③ 나머지 간선 중에서 가중치가 가장 작은 간선 (E,F) 삽입 . – ( 현재 삽입한 간선의 수 : 3 개 )

52

Page 53: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

④ 나머지 간선 중에서 가중치가 가장 작은 간선 (B,D) 삽입 . – ( 현재 삽입한 간선의 수 : 4 개 )

53

Page 54: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

⑤ 나머지 간선 중에서 가중치가 가장 작은 간선 (A,D) 를 삽입하면 A-B-D 의 사이클이 생성되므로 삽입할 수 없다 . 그 다음으로 가중치가 가장 작은 간선 (C,F) 삽입 . – ( 현재 삽입한 간선의 수 : 5 개 )

54

Page 55: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

• ⑥ 나머지 간선 중에서 가중치가 가장 작은 간선 (D,E) 삽입 . – ( 현재 삽입한 간선의 수 : 6 개 ) – 현재 삽입한 간선의 수가 6 개 이므로 알고리즘 수행을 종료하고 신장 트리 완성

55

Page 56: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

• G 의 최소 비용 신장 트리

56

Page 57: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

• 간선을 정렬하지 않고 하나의 정점에서 시작하여 트리를 확장해나가는 방법이다 .

4.3 프라임 (Prime) 알고리즘

57

❶ 그래프 G 에서 시작 정점을 선택한다 . ❷ 선택한 정점에 부속된 모든 간선 중에서 가중치가 가장 작은 간선을

연결하여 트리를 확장한다 . ❸ 이전에 선택한 정점과 새로 확장된 정점에 부속된 모든 간선 중에서

가중치가 가장 작은 간선을 삽입한다 . 이때 사이클을 형성하는 간선은 삽입할 수 없으므로 그 다음으로 가중치가 작은 간선을 선택한다 .

❹ 그래프 G 에 n - 1 개의 간선을 삽입할 때까지 을 반복한다❸ . ❺ 그래프 G 의 간선이 n - 1 개가 되면 최소비용 신장 트리가 완성된다 .

Page 58: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

• Prime 알고리즘을 이용하여 G 의 최소 비용 신장 트리 만들기– 초기 상태 : 그래프 G 의 정점 중에서 정점 A 를 시작 정점으로 선택

58

Page 59: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

① 정점 A 에 부속된 간선 중에서 가중치가 가장 작은 간선 (A,B) 을 삽입하여 트리 확장 . – ( 현재 삽입한 간선의 수 : 1 개 )

59

Page 60: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

② 현재 확장된 트리의 정점 A, B 에 부속된 간선 중에서 가중치가 가장 작은 간선 (B,D) 를 삽입하여 트리 확장 . – ( 현재 삽입한 간선의 수 : 2 개 )

60

Page 61: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

③ 현재 확장된 트리의 정점 A, B, D 에 부속된 간선 중에서 가중치가 가장 작은 간선 (A,D) 를 삽입하면 A-B-D 의 사이클이 생성되므로 삽입할 수 없다 . 따라서 그 다음으로 가중치가 가장 작은 간선 (D,E) 삽입 .– ( 현재 삽입한 간선의 수 : 3 개 , 삽입 불가능한 간선 : (A,D))

61

Page 62: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

④ 현재 확장된 트리의 정점 A, B, D, E 에 부속된 간선 중에서 가중치가 가장 작은 간선 (E,G) 를 삽입하여 트리 확장 . – ( 현재 삽입한 간선의 수 : 4 개 , 삽입 불가능한 간선 : (A,D))

62

Page 63: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

⑤ 현재 확장된 트리의 정점 A, B, D, E, G 에 부속된 간선 중에서 가중치가 가장 작은 간선 (E,F) 를 삽입하여 트리 확장 . – ( 현재 삽입한 간선의 수 : 5 개 , 삽입 불가능한 간선 : (A,D))

63

Page 64: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

⑥ 현재 확장된 트리의 정점 A, B, D, E, F, G 에 부속된 간선 중에서 가중치가 가장 작은 간선 (C,F) 를 삽입하여 트리 확장 . – ( 현재 삽입한 간선의 수 : 6 개 , 삽입 불가능한 간선 : (A,D)) – 현재 남은 간선의 수가 6 개 이므로 알고리즘 수행을 종료하고 신장 트리 완성 .

64

Page 65: 10 장 .  그래프 (Graph) 1 절 .  그래프 2 절 .  그래프 표현 3 절 .  그래프 탐색 4 절 .  신장트리 및 최소비용 신장트리

• G 의 최소 비용 신장 트리

65