152
네트워크 알고리즘 한남대학교 산업경영공학과 임동순 2014

1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

한남대학교 산업경영공학과

임동순

2014

Page 2: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

2

Page 3: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

i

목 차

목 차 .............................................................................................................................. i

1 그래프란 무엇인가? ............................................................................................. 1

2 장 그래프 정의와 순회........................................................................................ 7

2.1 정의..................................................................................................................................... 7

2.2 그래프 종류 ....................................................................................................................... 8

2.3 경로, 사이클, 트리 ........................................................................................................... 8

2.4 그래프의 행렬 표현 ......................................................................................................... 9

2.5 컴퓨터에서의 그래프 표현 ........................................................................................... 10

2.5.1 인접 행렬 ................................................................................................................ 10

2.5.2 에지 리스트 ............................................................................................................ 10

2.5.3 인접 리스트 ............................................................................................................ 11

2.6 그래프 순회 ..................................................................................................................... 12

2.6.1 깊이우선 순회(Depth-first search) ......................................................................... 12

2.6.2 너비우선 순회(Breadth-first search) ...................................................................... 14

2.6.3 그래프 순회 응용: 미로 찾기(Maze Problem) ................................................... 15

참고문헌 및 보충설명 ................................................................................................................ 19

3 장 오일러 서킷과 해밀토니아 서킷 ................................................................ 21

3.1 오일러 서킷 ..................................................................................................................... 21

3.1.1 중국 우편 배달부 문제 ........................................................................................ 25

3.1.2 거리 청소 문제 ...................................................................................................... 27

3.1.3 홀수 차수 노드들의 짝짓기 ................................................................................ 29

3.2 해밀토니아 서킷 ............................................................................................................. 32

4 장 외판원 문제 ................................................................................................... 35

4.1 문제 정의 ......................................................................................................................... 35

4.2 억지 접근 방법(Brute-force method) ............................................................................. 36

4.3 가지치기-한계 방법(Branch-bound) .............................................................................. 37

4.4 휴리스틱 ........................................................................................................................... 42

4.4.1 구성적 휴리스틱 .................................................................................................... 42

4.4.2 향상적 휴리스틱(Improving heuristics) ................................................................. 46

4.5 최소걸침나무를 이용한 방법 ....................................................................................... 51

4.6 시뮬레이티드 애닐링 ..................................................................................................... 52

4.7 타부 서치(Tabu Search) .................................................................................................. 55

4.8 유전자 알고리즘 ............................................................................................................. 56

4.8.1 유전자 알고리즘의 소개 ...................................................................................... 56

4.8.2 룰렛 휠(Roulette wheel) 방법 ................................................................................ 57

4.8.3 TSP 문제 해결을 위한 유전자 알고리즘 .......................................................... 58

4.9 개미 알고리즘 ................................................................................................................. 59

5 장 그래프 칼라링 ............................................................................................... 61

5.1 그래프 칼라링 문제 ....................................................................................................... 61

Page 4: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

ii

5.2 최소의 색을 사용한 칼라링 해를 구하는 방법 ....................................................... 62

5.2.1 Backtrack 알고리즘 ................................................................................................ 62

5.2.2 구성적 방법 (constructive heuristic method) ......................................................... 63

5.2.3 향상적 방법 (Improving heuristic) ........................................................................ 64

5.3 그래프 칼라링 응용 문제 ............................................................................................. 65

5.3.1 스켸듈링 .................................................................................................................. 65

5.3.2 모바일 통신 네트워크에서의 채널 할당 문제 ................................................. 66

6 장 최소 걸침나무와 사이클 .............................................................................. 69

6.1 최소 걸침 나무 ............................................................................................................... 69

6.1.1 크루스칼(Kruskal)의 알고리즘 ............................................................................. 69

6.1.2 프림(Prim)의 알고리즘 .......................................................................................... 70

6.1.3 응용 문제: 액화천연가스 배관 ........................................................................... 72

6.1.4 응용문제: 통신 라인 설계 ................................................................................... 72

6.2 방향성 그래프에서의 사이클 ....................................................................................... 74

6.2.1 자재 계산서 ............................................................................................................ 74

6.2.2 고착 방지(deadlock avoidance) .............................................................................. 77

7 장 최단거리 구하기 (Shortest Path) ................................................................ 79

7.1 벨맨의 식 ......................................................................................................................... 79

7.2 다익스트라의 알고리즘 ................................................................................................. 80

7.3 벨맨-포드 알고리즘(Bellman-Ford algorithm) .............................................................. 82

7.4 두 번째 최단 경로 구하기 ........................................................................................... 83

7.5 K번째 최단 경로 구하기 .............................................................................................. 85

7.6 플로이드-와샬 알고리즘 (Floyd-Warshall algorithm) .................................................. 86

8 장 할당 문제 ....................................................................................................... 93

8.1 문제 정의 ......................................................................................................................... 93

8.2 헝가리안 알고리즘 ......................................................................................................... 95

8.3 최대 매칭 알고리즘 ..................................................................................................... 100

9 장 네트워크 흐름 ............................................................................................. 103

9.1 최대 흐름 ....................................................................................................................... 103

9.2 모든 노드 쌍에 대한 최대 흐름 ............................................................................... 111

9.3 최대 용량 경로 ............................................................................................................. 114

9.4 최소 비용 흐름(Minimum cost flows) ......................................................................... 116

9.5 K-연결성 ........................................................................................................................ 120

10 장 활동 네크워크(Activity Networks) ............................................................ 123

10.1 프로젝트 네트워크 ....................................................................................................... 123

10.2 AOA 네트워크 모델 규칙 .......................................................................................... 124

10.3 최상경로 알고리즘(Critical Path Algorithm) ............................................................... 126

10.4 최상 경로 방법에 의한 비용모델(CPM Cost Model) .............................................. 130

10.5 PERT (Program Evaluation and Review Technique) ...................................................... 133

10.6 자원 소요의 평준화 ..................................................................................................... 135

참고 문헌 ................................................................................................................. 144

Page 5: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

iii

그림 목차

[그림 1-1] 그래프의 구성 ........................................................................................................ 1

[그림 1-2] 쾌니히스베르그의 7개 다리 ................................................................................ 2

[그림 2-1] 단순 그래프 ............................................................................................................ 7

[그림 2-2] 일반적인 그래프 .................................................................................................... 8

[그림 2-3] 단순 그래프 예 .................................................................................................... 10

[그림 2-4] 그래프의 인접 리스트 표현 .............................................................................. 11

[그림 2-5] 노드의 배열에 의한 그래프의 인접리스트 표현 ........................................... 12

[그림 2-6] 그래프 순회 예제 ................................................................................................ 13

[그림 2-7] DFS .......................................................................................................................... 13

[그림 2-8] 큐 구조를 이용한 BFS ....................................................................................... 14

[그림 2-9] 미로찾기 ................................................................................................................ 15

[그림 2-10] 미로 찾기 문제의 그래프 ................................................................................ 16

[그림 2-11] 미로의 생성 ........................................................................................................ 17

[그림 2-12] makeMaze 자바 코드 .......................................................................................... 19

[그림 3-1] 오일러 서킷 .......................................................................................................... 21

[그림 3-2] 오일러 서킷 .......................................................................................................... 23

[그림 3-3] 방향성 그래프에서의 오일러 서킷 ................................................................... 24

[그림 3-4] 중국 우편 배달부 문제 ...................................................................................... 25

[그림 3-5] 오일러화를 위한 대안 1 .................................................................................... 26

[그림 3-6] 오일러화를 위한 대안 2 .................................................................................... 27

[그림 3-7] 오일러화를 위한 대안 3 .................................................................................... 27

[그림 3-8] 거리 청소 문제 .................................................................................................... 28

[그림 3-9] 6게 수에 대한 짝짓기 대안 ............................................................................... 30

[그림 3-10] 해밀토니아 그래프 1 ........................................................................................ 32

[그림 3-11] 해밀토니안 그래프 2......................................................................................... 33

[그림 4-1] TSP 문제................................................................................................................. 35

[그림 4-2] 가지치기-한계 ....................................................................................................... 42

[그림 4-3] 2-OPT에서의 두 에지 제거, 두 에지 삽입 ...................................................... 47

[그림 4-4] 3-OPT에서의 3 에지 제거, 3 에지 삽입 ........................................................... 48

[그림 4-5] 노드 F가 추가된 3 에지 제거, 3 에지 삽입 ............................................... 49

[그림 4-6] 유효한 해가 아닌 1-트리 ................................................................................... 51

[그림 4-7] 유효한 해를 나타내는 1-트리 ........................................................................... 52

[그림 5-1] 그래프 칼라링 .................................................................................................... 61

[그림 5-2] 칼라링 그래프 ...................................................................................................... 62

[그림 5-3] 그림 5-2에 대한 칼라링 해 ............................................................................... 64

[그림 5-4] 스켸듈링을 위한 그래프 .................................................................................... 66

[그림 5-5] 스켸듈링 해 .......................................................................................................... 66

[그림 5-6] 모바일 네트워크의 그래프 표현....................................................................... 67

[그림 5-7] 모바일 네트워크의 채널할당 ............................................................................ 68

[그림 6-1] 최소 걸침 나무 문제 .......................................................................................... 69

[그림 6-2] LNG 배관 문제 ..................................................................................................... 72

[그림 6-3] 통신 라인 .............................................................................................................. 73

[그림 6-4] BOM ........................................................................................................................ 75

[그림 6-5] BOM의 방향성 그래프 ........................................................................................ 75

Page 6: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

iv

[그림 6-6] BOM 행렬 .............................................................................................................. 75

[그림 6-7] 고착 상태 .............................................................................................................. 77

[그림 7-1] 최단 거리 문제 .................................................................................................... 79

[그림 7-2] 방향성 그래프에서의 최단거리......................................................................... 82

[그림 7-3] 두번째 최단경로 문제 ........................................................................................ 84

[그림 7-4] 쓰레기통 위치 ...................................................................................................... 90

[그림 8-1] 할당문제의 그래프 표현 .................................................................................... 94

[그림 8-2] 이분 그래프에서의 최대매칭 .......................................................................... 101

[그림 9-1] 확장된 흐름 ........................................................................................................ 105

[그림 9-2] 최대흐름 알고리즘의 적용 .............................................................................. 107

[그림 9-3] 최대 흐름을 위한 예제 네트워크................................................................... 108

[그림 9-4] 모든 노드쌍에 대한 최대 흐름 예제 ............................................................. 112

[그림 9-5] 반복 1 .................................................................................................................. 112

[그림 9-6] 반복 2 .................................................................................................................. 113

[그림 9-7] 반복 3 .................................................................................................................. 113

[그림 9-8] 반복 4 .................................................................................................................. 113

[그림 9-9] 할당문제를 위한 네트워크 .............................................................................. 116

[그림 9-10] 흐름확장 사이클 .............................................................................................. 118

[그림 9-11] 할당문제의 흐름 네트워크 ............................................................................. 119

[그림 9-12] K-연결성 계산을 위한 그래프 ....................................................................... 121

[그림 10-1] AOA 네트워크 ................................................................................................... 124

[그림 10-2] AON 네트워크 ................................................................................................... 124

[그림 10-3] 가상 활동 아크의 사용 .................................................................................. 124

[그림 10-4] 시작 노드와 종료 노드의 유일성 ................................................................. 125

[그림 10-5] 사이클이 있는 네트워크 ................................................................................ 125

[그림 10-6] 표 10-1을 표현한 AOA 네트워크 ................................................................. 126

[그림 10-7] 최상 경로 .......................................................................................................... 129

[그림 10-8] 예제의 최상 경로 ............................................................................................ 131

[그림 10-9] 베타 분포 곡선 ................................................................................................ 134

[그림 10-10] 프로젝트 네트워크 예 .................................................................................. 135

[그림 10-11] 최상 경로 ........................................................................................................ 135

[그림 10-12] 간트 챠트 ........................................................................................................ 136

[그림 10-13] 자원 소요 다이어그램 .................................................................................. 137

[그림 10-14] 여유 시간을 포함한 간트 챠트................................................................... 137

[그림 10-15] 새로운 스케줄 ................................................................................................ 138

[그림 10-16] 평준화 된 비용 할당 .................................................................................... 138

Page 7: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

v

표 목차

[표 2-1] 에지 리스트 .............................................................................................................. 11

[표 3-1] 노드들의 차수와 오일러화 .................................................................................... 26

[표 3-2] 거리 청소 문제에서의 최소 필요 아크 ............................................................... 28

[표 4-1] 에지의 거리 .............................................................................................................. 43

[표 4-2] 최근접 이웃 알고리즘 결과 .................................................................................. 43

[표 4-3] 정렬된 에지 알고리즘 결과 .................................................................................. 44

[표 4-4] 노드 교환 방법 ........................................................................................................ 50

[표 4-5] 새로운 거리 계산 .................................................................................................... 52

[표 4-6] 시뮬레이티드 애널링 결과 .................................................................................... 54

[표 4-7] 이웃해 ........................................................................................................................ 56

[표 4-8] 타부 서치 결과 ........................................................................................................ 56

[표 5-1] Backtrack 절차 ........................................................................................................... 63

[표 5-2] Largest-first ordering ................................................................................................... 64

[표 5-3] 스켸듈링을 위한 수강과목 .................................................................................... 65

[표 6-1] 거리 순으로 정렬된 아크 ...................................................................................... 70

[표 6-2] 프림의 알고리즘 과정 ............................................................................................ 71

[표 7-1] 다익스트라의 알고리즘 과정 ................................................................................ 81

[표 7-2] 최단 거리의 경로를 구하는 알고리즘 과정 ....................................................... 81

[표 7-3] 벨맨-포드 방법에 의한 최단거리 ......................................................................... 83

[표 7-4] 교차로 간 거리 ........................................................................................................ 91

[표 8-1] 작업자-기계 할당 비용 ........................................................................................... 93

[표 8-2] 할당 대안 .................................................................................................................. 94

[표 9-1] 네트워크의 용량 행렬 .......................................................................................... 108

[표 10-1] 활동의 선행 관계 ................................................................................................ 126

[표 10-2] 사건에 대한 CPM 계산 ...................................................................................... 129

[표 10-3] 활동에 대한 CPM 계산 ...................................................................................... 130

[표 10-4] 정상기간-비용 과 긴급기간-비용 ...................................................................... 132

[표 10-5] CC/CU ..................................................................................................................... 132

[표 10-6] 최소 비용 긴급 스켸듈 ...................................................................................... 132

[표 10-7] 자원의 한계가 있는 경우 필요 자료 ............................................................... 140

[표 10-8] 평준화 반복 1 결과 ............................................................................................ 140

[표 10-9] 평준화 반복 2 결과 ............................................................................................ 141

[표 10-10] 평준화 반복 3 결과 .......................................................................................... 141

[표 10-11] 평준화 반복 4 결과 .......................................................................................... 142

[표 10-12] 평준화 반복 5 결과 .......................................................................................... 142

[표 10-13] 평준화 반복 6 결과 .......................................................................................... 143

[표 10-14] 평준화 반복 7 결과 .......................................................................................... 143

Page 8: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

vi

Page 9: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

1

1 그래프란 무엇인가?

그래프(Graph)는 [그림 1-1]과 같이 점(원)과 선으로 구성된 그림으로 나타낼 수 있다. 점 P,

Q, R, S, T를 버텍(vertex)이라고 하고, 두 점들을 잇는 선들을 에지(edge)라고 부른다. 이 그래

프의 목적은 우리들이 실세계에서 접하는 많은 문제들이 그래프로 표현될 수 있고, 일단 그

래프로 표현되면 문제를 보다 쉽게 이해하여 해를 구할 수 있는 방법을 용이하게 도출할 수

있기 때문이다.

P T

Q

S

R

[그림 1-1] 그래프의 구성

그래프 이론의 시작은 아마도 18세기에 스위스의 유명한 수학자 레온하르트 오일러

(Leonhard Eüler)가 쾌니히스베르그(Königsberg)라는 도시(이 도시의 현재 이름은 Kaliningrad이

다)에 있는 7개 다리의 문제를 해결함으로써 시작됐다고 믿어진다. 그 문제는 다음과 같다.

[그림 1-2]에서 보는 바와 같이 프레겔(Pregel) 강이 쾌니히스베르그를 지나고 있고, 이 강은

크네이포프(Kneiphof)라는 섬을 에워싸고 있다. 쾌니히스베르그에 사는 사람이 도시의 한곳

에서 다른 곳으로 쉽게 가기 위해 강에 설치되어 있는 7개의 다리를 이용할 수 있다. 시민

들은 “7개의 모든 다리를 한번씩 만 건너 제자리로 돌아 올 수 있는 방법이 있을까?”라는

문제를 풀려고 애를 썼다. 아마도 선술집에 모여 이 문제에 대한 토론을 즐겼던 것 같다. 그

러나 7개의 다리를 한번씩 만 건너서 원래의 시작 지점으로 온 사람은 아무도 없었다. 때문

에 사람들은 그러한 방법이 없다고 믿었다. 이 문제가 그 유명한 쾌니히스베르그 다리 문제

(Königsberg bridge problem)이다. 1736년에 오일러가 비로서 이 문제의 해답을 구하였다. [그림

1-3]과 같이 각 육지 지역을 A, B, C, D로 이름을 붙이고, [그림 1-4]에서와 같이 점으로 표현

하자. 그리고, 각 지역을 잇는 다리가 있으면 두 점을 잇는 선을 그려 [그림 1-4]와 같은 그

래프를 생성할 수 있다. 쾌니히스베르그 다리 문제는 [그림 1-4]의 그래프에서 모든 선을 한

번만 포함하는 닫혀진 길이 있을까 하는 것이다. 다시 말하자면, 노드 A에서 시작하여 연필

을 띄지 않고 모든 선을 한번씩 따라가며 똑같이 그려 노드 A에서 종료할 수 있을까? 아마

도 여러분은 이 예에서 왜 그래프로 문제를 표현하는가를 이해할 수 있을 것이다. 문제를

보다 쉽게 표현할 수 있기 때문이다.

Page 10: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

2

[그림 1-2] 쾌니히스베르그의 7개 다리

A

B

C

D

[그림 1-3] 쾌니히스베르그 다리 문제

A

B

C

D

[그림 1-4] 쾌니히스베르그 다리 문제의 그래프 표현

한 노드의 차수(degree)는 그 노드에 연결되어 있는 아크들의 수이다. [그림 1-1]에서 노드 Q

의 차수는 4이다. [그림 1-1]은 다음과 같은 상황을 표현하고 있다고 할 수 있다. 각 노드들

Page 11: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

3

은 프로야구 팀을 의미하고 있고, 아크는 두 야구팀이 경기를 가져야 함을 의미한다. 이 경

우 차수는 한 팀이 가져야 하는 총 경기 수를 의미한다. 또는, [그림 1-4]에서 차수는 한 지

역에 연결된 다리의 수이다. 만약 쾌니히스베르그 다리 문제에서 모든 다리를 한번씩 만 통

과하는 길이 있기 위하여는 한 지역으로 들어오고 나가는 2의 배수의 차수가 각 노드에서

필요할 것이다. [그림 1-4]의 그래프에서 어느 노드의 차수도 2의 배수가 아니므로 모든 아크

를 한번씩 만 통과할 수 있는 길은 없다는 오일러의 증명을 쉽게 이해할 수 있을 것이다.

어느 두 노드를 연결하는 아크가 최대 하나 존재하는 그래프를 단순 그래프(simple graph)라

고 한다. 만약, 두개 이상의 아크가 있는 경우(즉, multiple arcs) 또는, 한 노드에서 자신으로

잇는 아크인 루프(loop)가 존재하는 경우가 있을 수 있다.

방향성 그래프(directed graph: digraph)는 아크에 방향이 있는 그래프를 의미한다. 아크가 두

지역을 잇는 길이라고 할 때 이 길이 일방통행이라면 길의 방향이 있을 것이다. 또는, 선이

도시가스 관이라고 한다면, 이 역시 가스가 관을 흐르는 방향이 있을 것이다. 이러한 상황을

그래프로 표현한다면 방향성 그래프이다. [그림 1-5]는 방향성 그래프를 나타낸다. 각 선에

화살표로 방향을 표현하였음에 유의하라.

P T

Q

S

R

[그림 1-5] 방향성 그래프

그래프에서의 경로(path)는 기본적으로 연이은 노드와 아크들의 순서라고 할 수 있다. [그림

1-1]에서 P→Q→R은 P에서 R까지의 한 경로다. 물론, P→S→Q→T→S→R도 노드S를 두번 포

함하고 있긴 하지만 P에서 R까지의 경로다. 그러나, 이 책에서는 별도의 언급이 없는 한 경

로는 특정 노드를 최대 한번 만 포함한다고 가정한다. Q→S→T→Q는 Q에서 Q까지의 경로다.

이렇게 동일한 노드를 시작과 끝으로 갖는 경로를 사이클(cycle)이라고 부른다. 경로에서와

같이 Q를 제외하고, 다른 노드는 최대 한번만 통과하는 것을 원칙으로 한다.

그래프는 연결될 수도 있고, 연결되지 않을 수도 있다. 연결된 그래프(connected graph)에서는

어느 두 노드 간에도 경로가 존재한다. 컴퓨터 통신망을 그래프로 표현했을 때 연결된 그래

프라면 어느 두 컴퓨터 간에도 통신이 가능하다. 만약, 비연결 그래프(disconnected graph)라면

어느 두 컴퓨터 간의 통신이 불가능하다는 의미이다.

그래프에서 오래되고, 중요한 이론 중에 오일러 그래프와 해밀토니안 그래프(Hamiltonian

graph)라는 것이 있다. 둘 다 저명한 수학자 이름을 본 따 명명되었는데, 오일러 그래프는

이미 쾌니히스베르그 문제를 설명하였으므로 짐작될 것이다. 모든 아크들을 한번씩 만 포함

하는 사이클이 있는 그래프를 오일러 그래프라고 한다. 모든 노드를 한번씩 만 포함하는 사

이클이 있는 그래프는 해밀토니아 그래프이다.

Page 12: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

4

트리(tree)또한 많이 언급되는 그래프이다. 연결된 그래프에서 어느 두 노드 간에도 하나의

경로 만이 존재 하는 경우를 트리라고 부른다. 여러분의 가족관계를 나타내는 그림이 바로

트리이다. 여러분과 증조 할아버지 간에 단지 하나의 경로 만이 존재한다. 만약, 둘 이상의

경로가 존재한다면 어떻게 된 것일까?

그래프 이론에 매칭(matching)과 커버링(covering)이라는 분야가 있다. 처음 접하는 독자들에

게는 쉽지 않은 분야이지만, 그래프에서는 중요한 이론이다. 이 분야에 관련된 결혼문제

(marriage problem)는 다음과 같다. 남자 5명과 여자 5명이 파티에 초대되었다. 서로 안면이

있는 남녀들 끼리 짝을 맞추려고 한다. 각 사람을 노드로 나타내고, 남녀가 서로 알고 있는

경우 두 노드를 연결하는 아크를 그렸다. [그림 1-6]에서 ib 는 남자, ig 는 여자를 나타내는

노드로 표현된 이러한 상황을 나타낸다. 5쌍의 짝을 맞출 수 있을까? 짝을 맞출 수 있다면

그 해답은 무엇일까? 한 해답으로서는 ),( 11 gb , ),( 22 gb , ),( 43 gb , ),( 34 gb , ),( 55 gb 가 될 수

있을 것이다.

b1

b2

b3

b4

b5

g1

g2

g3

g4

g5

[그림 1-6] 결혼 문제

최적화(optimization) 분야 중의 하나인 네트워크(network) 이론은 그래프 이론을 바탕으로

하고 있다. 이 책에서는 네트워크를 그래프의 아크에 어떤 값 (또는, 어떤 값들의 집합) 이

주어진 가중 그래프(weighted graph)로 정의한다. [그림 1-7]은 5개 도시 간의 길을 표현한 네

트워크로, 아크에 주어진 값이 거리라고 하자. 노드 P에서 R까지 가장 적은 거리로 갈 수

있는 경로는 어떻게 구할까? 쉽게 생각하면 P에서 R까지의 모든 경로를 구하여 이 중 가장

적은 거리의 합을 갖는 하나를 선택하면 된다. 그러나, 보다 효과적이고, 효율적으로 최적의

해를 구할 수 있는 방법이 있을까? 이는 네트워크 이론에서 다루는 최단거리 문제(shortest

path problem)이다. 또는, [그림 1-7]의 네트워크에서 아크가 어느 두 지점 간을 이을 수 있는

전기선의 대안들이라고 하자. 가장 작은 길이의 전선을 사용하여 5개 도시를 이을 수 있도

록 어느 선들을 선택하여야 할까? 이 문제는 최소 걸침 나무(minimal spanning tree) 문제이다.

Page 13: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

5

P T

Q

S

R

3

4

9

1

1

9

8

5

[그림 1-7] 네트워크 예

이 교재의 주된 목적은 이러한 네트워크 문제에 대한 모델링 방법과 해의 풀이 방법을 소개

하는 것이다. 이를 위해서는 그래프에 대한 이론적인 배경을 갖추는 것이 필요하다. 따라서

그래프 이론에 대한 기본적인 사항을 다루고, 네트워크에 대한 여러 문제를 다룰 것이다. 특

히, 네트워크 문제에 대한 해를 효과적으로 구하기 위하여는 컴퓨터를 이용하여야 한다. 컴

퓨터 구현을 위한 알고리즘과 자바 프로그래밍 언어를 이용한 구현 방법도 이 교재의 중요

한 요소 중의 하나이다.

Page 14: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

6

Page 15: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

7

2 장 그래프 정의와 순회

2.1 정의

⚫ 단순 그래프(simple graph) G는 ),( EV 의 쌍으로 정의된다. V 는 노드(node) 또는 버텍

(vertex)이라고 불리는 성분들의 최소한 하나를 포함하는 유한 집합(non-empty finite set)이

다. E 는 아크(arc) 또는 에지(edge)라고 불리는 성분들의 집합으로, V 에 포함된 서로

다른 두 성분의 순서 없는 쌍으로 구성된 유한 집합이다. 예를 들어 [그림 2-1]은 단순

그래프를 나타내고, V 는 집합 },,,{ zwvu , 그리고, E 는 )},(),,(),,(),,{( zwwuwvvu 으로 구

성된다. 아크 ),( vu 는 노드 u와 v를 연결(join)한다고 말한다. E 는 집합이므로 단순 그

래프에서 두 노드를 연결하는 아크가 하나 보다 많을 수 없다(즉, 최대 하나다).

⚫ 일반적인 그래프는 ),( EV 의 쌍으로 구성되며, V 는 노드라고 불리는 성분의 유한 집합

이고 E 는 아크라고 불리는 V 에 포함된 두 성분의 순서 없는 쌍으로 구성된 유한

family이다(family이기 때문에 다수의 동일한 아크를 허용한다). [그림 2-2]의 그래프에서

V 는 },,,{ zwvu 이고, E 는 family )},(),,(),,(),,(),,(),,{( zwwvwvvvwuvu 이다. 일반적인 그래

프는 동일한 노드를 연결하는 아크인 루프(loop)와 두 노드를 연결하는 다수의 아크

(multiple arcs)를 허용한다.

⚫ 방향성 그래프(digraph) D 는 ),( AV 로 정의되며 V 는 노드라고 불리는 성분의 유한 집

합이고 A 는 아크라고 불리는 V 의 순서 있는 쌍으로 v로 부터 w로 연결하는 아크를

),( wv 로 표현한다.

⚫ 한 아크가 두 노드 v, w를 연결하고 있을 때 두 노드는 인접(adjacent)하고 있다고 말한

다. 또한, 두 노드는 그 아크에 의해 발생(incident)되어 있다고 말한다. 즉, v는 ),( wv 에

의해 발생되어 있다.

⚫ 비 방향성 그래프에서 노드 v의 차수(degree 또는 valancy)는 )deg(v 로 표현되며 그 노드

에 연결되어 있는 아크들의 수이다. 그래프 G에서 각 노드의 차수를 모두 합하면 짝수

가 된다. 한 아크가 두 번씩 계산되기 때문이다. 오일러는 이를 악수 정리(hand shaking

lemma)로 증명하였다. 3명의 사람이 서로 악수를 하고 있다고 생각해보자. 총 3번의 악

수를 했고, 각 사람들의 입장에서 보면 두 번의 악수를 했을 것이다. 각 사람들의 악수

횟수를 모두 합하면 6번으로 실제 악수 횟수 3의 두 배이다. 그래프 G에서 홀수 차수

를 갖는 노드의 수가 짝수임은 자명하다.

⚫ 방향성 그래프에서 deg ( )v− 와 deg ( )v+ 로 표현되는 노드 v에의 입력차수와 출력차수는

각각 들어오는 아크의 수와 나가는 아크의 수이다.

⚫ 그래프 ),( EVG = 의 부분 그래프(subgraph) )','(' EVG = 에서 G’의 모든 노드들은 V 에

속하고 모든 아크들도 E 에 속한다.

u v

w z

[그림 2-1] 단순 그래프

Page 16: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

8

u v

w z

[그림 2-2] 일반적인 그래프

2.2 그래프 종류

⚫ 영 그래프(null graph): 아크의 집합이 비어 있는 그래프를 영 그래프라고 한다.

⚫ 완전 그래프(complete graph): 어느 두 노드도 인접하고 있는 그래프를 완전 그래프라고

한다.

⚫ 정규 그래프(regular graph): 모든 노드가 같은 차수를 갖고 있는 그래프를 의미한다.

⚫ 이분 그래프(bipartite graph): 그래프 G의 노드집합이 1V , 2V 로 분리된다고 가정하자. 모

든 아크들은 1V 의 노드와 2V 의 노드를 연결한다면 이 그래프를 이분 그래프라고 한다.

다르게 생각하면 노드들을 빨강 또는 파랑의 두 색으로 칠한다고 하자. 모든 아크들이

빨강색 노드와 파랑색 노드들을 연결한다면 이는 이분 그래프이다.

⚫ 완전 이분 그래프(complete bipartite graph): 이분 그래프 G에서 1V 의 각 노드들은 2V 의

모든 노드들에 연결되어 있다.

⚫ 연결 그래프(connected graph): 어느 두 노드간에도 연속적인 아크들에 의해 연결되어 있

으면 연결 그래프이다.

2.3 경로, 사이클, 트리

⚫ 그래프 G의 아크 순서(edge sequence)는 인접한 아크들의 순서로

)},(,),,(),,{( 12110 nn vvvvvv − 과 같이 표현된다. 또는 0v → 1v → 2v →… nv 으로 표현하기도

한다. 0v 를 시작 노드, nv 을 끝 노드라고 한다.

⚫ 한 아크 순서의 길이(length)는 그 순서에 포함된 아크들의 수이다.

⚫ 경로(path)는 아크 순서의 일종으로서 이 안에 포함된 아크들과 노드들은 서로 다르다.

⚫ 트레일(trail)은 경로에서 노드들의 중복을 허용한 것이다.

⚫ 월크(walk)는 경로에서 노드와 아크의 중복을 허용한 것이다.

⚫ 사이클(cycle)은 시작 노드와 끝 노드가 동일한 경로다.

⚫ 서킷(circuit)은 시작 노드와 종료 노드가 동일한 트레일이다.

⚫ 그래프 G가 연결 그래프이고, 아크의 수가 노드의 수 보다 하나 적으면 트리(tree)이다

( 1−= EV ).

⚫ 그래프 G가 트리일 때 어느 두 노드 간의 경로는 오직 하나 존재한다.

Page 17: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

9

2.4 그래프의 행렬 표현

⚫ 그래프 ),( EVG = 의 인접행렬(adjacency matrix) A는 다음과 같다.

수아크의잇는로에서는 ),(jiijij

vvaaA =

[그림 2-3]의 비방향성 그래프에 대한 인접행렬은 다음과 같다.

=

01011

10111

01010

11101

11010

A

각 행과 열은 노드를 의미하며, 노드의 순서를 P, Q, R, S, T로 하였다. 예를 들어, 노드

Q와 R을 이어주는 아크의 수는 하나이다. Q와 R은 각각 2번째, 3번째의 순서를 가지므

로 인접행렬에서 (2행, 3열), (3행, 2열)의 성분값은 1이다.

비방향성 그래프에서의 인접행렬은 항상 대칭행렬(symmetric matrix)의 형태를 가진다.

그러나, 방향성 그래프에는 각 아크에 대한 시작노드와 종료노드가 유일하게 주어져 대

칭행렬이 아닐 수 있다.

⚫ G의 발생행렬(incidence matrix) B는 다음과 같다.

)( ijbB = , 만약 i번째 노드가 j번째 아크에 의해 발생되었다면, 1=ijb 이고, 아니면 0

이다.

[그림 2-3]의 그래프에 대한 발생행렬은 다음과 같다. 행은 노드들을 나타내며 순서는 P,

Q, R, S, T이다. 열은 아크를 나타내며 순서는 a, b, c, d, e, f, g, h이다.

=

00011010

10110100

11000000

01101001

00000111

B

Page 18: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

10

P T

Q

S

R

a

b

c

d

e

f

g

h

[그림 2-3] 단순 그래프 예

2.5 컴퓨터에서의 그래프 표현

컴퓨터에서 그래프 ),( EVG = 를 표현하는 방법에는 다수가 있다. 이미 언급한 바와 같은 인

접행렬은 VV 의 2차원 행렬을 이용하여 표현할 수 있을 것이다. 에지 리스트(edge list)는

2E 의 2차원 행렬을 이용하여 각 아크에 발생된 된 두 노드들에 대한 정보를 나타낸다.

행렬보다는 링크드 리스트(linked list)를 이용하여 표현하는 방법이 여러 장점을 갖는다. 여기

서는 인접 리스트(adjacency list)라는 표현방법을 소개한다.

2.5.1 인접 행렬

인접 행렬은 노드의 수를 행과 열의 크기로 하는 2차원 배열로 정의된다. 각 성분은 행과

열에 대응되는 두 노드 간의 관계를 나타내어 인접 행렬에서 정의된 값으로 표현될 수 있다.

2.5.2 에지 리스트

에지 리스트는 각 아크에 대해 연결되어 있는 시작 노드와 끝 노드를 포함한다. 예를 들어,

[그림 2-3]의 그래프를 에지 리스트로 표현하면 [표 2-1]과 같이 8개의 아크 성분을 포함한다.

Page 19: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

11

[표 2-1] 에지 리스트

아크 시작노드 끝 노드

a P Q

b P T

c P S

d Q T

e S T

f Q S

g Q R

h R S

2.5.3 인접 리스트

인접 리스트는 각 노드와 아크를 링크드 리스트로 구성한다. 노드 리스트는 두개의 링크를

가지며, 다음 노드를 가르키는 링크와 첫번째 아크를 가르키는 링크를 포함한다. 아크 리스

트는 동일한 노드에 연결된 다음 아크를 가르키는 링크를 포함한다. 그림 2-3의 그래프를

인접 리스트로 표현한 방법은 [그림 2-4]와 같다.

노드 리스트를 [그림 2-5]와 같이 배열로 정의하여 사용할 수 도 있다. 노드는 순차적으로

저장되고, 첫번째 아크를 가르키는 링크를 포함한다.

P

T

PQ

R

S

Q S T

R S T

QS

P Q R T

P Q S

[그림 2-4] 그래프의 인접 리스트 표현

Page 20: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

12

P

T

PQ

R

S

Q S T

R S T

QS

P Q R T

P Q S

[그림 2-5] 노드의 배열에 의한 그래프의 인접리스트 표현

2.6 그래프 순회

주어진 그래프의 모든 노드를 한번씩 방문하는 것을 그래프 순회라고 한다. 순회 방법에는

깊이우선 순회와 너비우선 순회 방법이 있다.

2.6.1 깊이우선 순회(Depth-first search)

깊이우선 순회는 각 노드에 대해 연결된 노드들을 하나씩 탐색해 나가는 과정에서 옆으로

파 들어가기 보다 깊게 파 들어가는 원칙을 갖는다. 다음의 알고리즘을 분석해 보자.

Algorithm: DFSTraversal

입력: ),( EVG =

처리:

단계 1: 1=k 로 놓고, 모든 노드에 라벨이 없도록 한다.

단계 2: 임의의 노드 v를 선택하여 DFSEARCH(v)를 수행한다.

Algorithm: DFSEARCH(v)

입력: ),( EVG = , v

처리:

단계 1: v에 라벨 k를 붙인다. 1+= kk

단계 2: v에 연결된 모든 각 노드 w에 대해 만약 w에 라벨이 붙지 않았다면,

DFSEARCH(w)를 수행한다.

위 알고리즘은 깊이 우선순회로 그래프의 노드들을 차례대로 탐색하여 라벨을 붙인다. 모든

노드들에 라벨이 붙었다면 그래프는 연결된 그래프이고, 그렇지 않으면 연결되지 않은 그래

프이다.

Page 21: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

13

예제: [그림 2-6]의 비방향성 그래프를 DFS에 의해 순회해 보자. 단계 1에서 1=k 로 하고,

모든 노드에 라벨을 붙이지 않는다. 임의의 노드를 A로 하여 DFSEARCH를 수행한다. [그림

2-7]은 DFS 절차를 나타낸다. A에 라벨 1을 붙인다. A에 연결된 노드들은 B, C, D로 이들 노

드들에 대해 DFSEARCH를 수행하여야 한다. 알파벳 순에 의해 B 노드부터 방문하여

DFSEARCH를 수행한다. B 노드에 라벨 2를 붙인다. B 노드에 연결된 노드 중 라벨이 붙지

않은 노드는 C, E 이다. C에 대해 DFSEARCH를 수행한다. C 노드에 라벨 3을 붙인다. C 노드

에 연결된 노드 중 라벨이 붙지 않은 노드는 D, E, F, G이다. D를 우선적으로 방문한다. D에

라벨 4를 붙인다. D에 연결된 노드 중 라벨이 붙지 않은 노드는 없다. 따라서, D의 부모 노

드인 C로 이동(backtracking)한 후 연결된 다음 노드인 E를 방문하여 라벨 5를 붙인다. E에

연결된 노드 중 라벨이 붙지 않은 노드는 G이다. G에 라벨 6을 붙인다. G에 연결된 노드 중

라벨이 붙지 않은 노드는 없다. 따라서, G의 부모노드인 E로 이동한다. E 역시 더 이상 방문

할 노드가 없다. 다시 E 노드의 부모 노드인 C로 이동한다. C의 다음 노드인 F를 방문하여

라벨 7을 붙인다. F에 연결된 노드 중 라벨이 붙지 않은 노드는 없으므로 부모 노드인 C로

이동한다. C의 다음 노드인 G는 이미 라벨이 붙었으므로 방문하지 않는다. C에서는 더 이상

의 진전이 없으므로 다시 부모 노드인 B로 이동한다. B 에서는 다음 노드인 E 노드에 이미

라벨이 붙었으므로 더 이상 방문할 노드는 없다. 다시 부모 노드인 A로 이동한다. A의 다음

방문 대상이 되는 C와 D에 이미 라벨이 붙었으므로 방문하지 않는다. A의 부모 노드는 더

이상 존재 하지 않는다. 따라서, DFS 알고리즘은 종료된다. .결국 A→B→C→D→E→G→F의

순으로 탐색된다

A

B

C

E

F

G

D

[그림 2-6] 그래프 순회 예제

A

B C D

1

2

C E

3

D E G

4

G

F

5

6

7

[그림 2-7] DFS

Page 22: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

14

2.6.2 너비우선 순회(Breadth-first search)

너비우선 순회는 각 노드들에 대해 연결된 노드들을 하나씩 탐색해 나가는 과정에서 깊게

파 들어가지 않고 옆으로 넓게 파 들어가는 원칙을 갖는다. 다음의 알고리즘을 분석해 보자.

이 알고리즘은 스택 구조 대신에 큐(Queue)구조를 이용했음에 유의하라.

Algorithm: BFSTraversal

입력: ),( EVG =

처리:

단계 1: 1=k 로 놓고, 모든 노드에 라벨이 없도록 한다.

단계 2: 임의의 노드 v를 선택하여 v에 라벨 k를 붙인다. 1+= kk 을 하고,

BFSEARCH(v)를 수행한다.

Algorithm: BFSEARCH(v)

입력: ),( EVG = , v, k

처리:

단계 1: v에 연결된 각 노드 w에 대해 만약 w에 라벨이 붙지 않았다면, w에 라벨 k를

붙인다. 1+= kk 을 하고, w를 큐에 삽입한다.

단계 3: 큐가 비었으면 정지한다. 아니면, 큐에서 w를 꺼내 BFSEARCH(w)를 수행한다.

예제: [그림 2-6]의 그래프를 너비우선 순회 해보자. 알고리즘 BFS에서 노드 A를 선택하여

라벨 1을 붙인다. 재귀함수 BFSEARCH(A)에서 A에 연결된 노드 B, C, D에 라벨 2, 3, 4를 각

각 붙인 후 차례대로 큐에 삽입한다(그림 2.8). 큐에서 Front에 있는 노드 B를 꺼내 이 노드

에 연결되고, 라벨이 없는 노드 E에 라벨 5를 붙이고, 큐에 삽입한다. 다시 큐에서 노드 C

를 꺼내 이 노드에 연결된 노드 F, G에 라벨 6, 7을 붙이고 큐에 삽입한다. 큐에서 노드 D를

꺼낸다. 노드 D는 라벨이 없는 연결 노드들이 없으므로 큐에서 다시 노드를 꺼내는 절차를

반복한다. 큐에서 노드 E, F, G를 차례대로 꺼낸 후 정지한다. 결국 A→B→C→D→E→F→G의

순으로 방문하게 된다.

B C D

C D E

D E F

E F

F

A

Front

G

G

G

G

[그림 2-8] 큐 구조를 이용한 BFS

Page 23: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

15

2.6.3 그래프 순회 응용: 미로 찾기(Maze Problem)

쥐가 방과 벽으로 구성되어 있는 미로의 입구에서 출발하여 출구로 나가려고 한다. 각 방과

벽은 같은 크기의 블록으로 만들어졌다고 생각하라. [그림 2-9]는 9×9의 블록으로 구성된 미

로를 나타낸다. 가장자리는 벽으로 되어 있다. 입구는 왼쪽의 위 모서리인 1번 방이고, 출구

는 오른쪽의 아래 모서리인 31번 방이다. 방에 있는 쥐는 동, 서, 남, 북 중 갈 수 있는 방향

중 한 방향을 택하여 다른 방으로 이동한다. 쥐가 출구로 나가기 위한 길을 구해보자.

[그림 2-9] 미로찾기

이 미로 찾기 문제는 그래프 순회를 이용하여 해결할 수 있다. 각 방을 노드로 하고 인접한

방을 아크로 잇는 그래프를 생성하자. 그래프 순회를 이용하여 입구에 해당하는 노드에서

시작하여 각 노드를 탐색한다. 만약 출구에 해당하는 노드가 탐색되었다면 종료한다. 물론,

출구가 탐색되지 않고 순회가 종료되었다면 출구로 나가는 길이 없다는 의미이다.

[그림 2-10]은 [그림 2-9]의 문제를 그래프로 표현한 것이다. 1번 노드를 시작 노드로 하고, 31

번 노드를 출구로 하는 그래프 순회를 수행할 수 있다. 예를 들어, 깊이 우선순회를 하고,

한 노드에 연결된 노드들의 방문 우선순위는 작은 번호의 노드가 크다고 하자. 방문 순서는

다음과 같다.

1→2→3→6→11→10→9→12→13→7→4→14→15→8→5→17→22→21→26→31

31

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

Page 24: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

16

[그림 2-10] 미로 찾기 문제의 그래프

미로 찾기 문제를 컴퓨터에서 생성하도록 하고 싶다면, 약간의 생각을 필요로 한다. 우선,

미로를 이차원 배열로 정의한다.

int[][] maze = new int[9][9];

maze[i][j]의 값은

1) 벽이면 1

2) 방이면 2로 한다.

9×9 block의 외곽 셀은 벽으로 두고, 내부 셀 중 i, j가 모두 짝수인 셀도 벽으로 둔다.

내부 셀 중 i, j가 홀수인 block, maze[i][j]를 방으로 만든다. 그외 나머지 셀들을 허물 수

있는 벽으로 한다. [그림 2-11]에서 검은 색 셀은 벽, 흰색 셀은 통로, 회색으로 표시된 벽

들은 허물 수 있는 벽이다. 허물 수 있는 벽 중 하나씩 임의로 선택하여 허문다. 단, 벽을

허물 때 통로가 cycle을 이루지 않도록 한다. 만약, cycle을 이루는 통로가 발생한다면 그 벽

을 허물 수 없는 벽으로 한다(만약 사이클이 있다면 쥐는 출구로 나가는 길을 못 찾을 수도

있다). 허물 수 있는 벽의 선택은 임의로 하고, 모든 허물 수 있는 벽을 대상으로 한다.

1

2

3 6 11

9

10

16 20 25 28

19

18 24 27

12

1374

14

1585 17 23

22

21

29

30

26 31

Page 25: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

17

[그림 2-11] 미로의 생성

통로가 사이클을 이루는지를 조사하는 방법은 어떻게 할까? 이 책의 5장에서 설명될 그래프

에서의 사이클을 조사하는 방법을 사용할 수도 있으나, 간단하게 사이클이 없는 미로를 만

드는 방법은 다음과 같다. 우선, 위의 그림에서 각 방에 서로 다른 음수의 번호를 준다. 허

물 수 있는 벽을 임의로 선택하여 홀수의 행이면 왼쪽과 오른쪽 방의 번호를 조사한다. 만

약 같은 번호이면 허물지 말고, 서로 다른 번호이면 허물 수 있는 벽에 오른쪽 방의 번호와

동일한 번호를 주어 허문다. 왼쪽 방과 동일한 번호를 가진 모든 방의 번호를 역시 오른쪽

방과 같은 번호를 준다. 선택된 허물 수 있는 벽이 짝수 행이면 위와 아래 방의 번호를 조

사하여 위와 같은 절차를 수행토록 한다.

선택된 벽에 인접한 방의 번호가 같다는 것은 그 벽을 허물 때 사이클이 생긴다는 것을 의

미한다. 사이클 없는 미로를 만드는 아래 프로그램을 참조하라.

public void makeMaze(int rows, int cols) {

maze = new int[rows][cols];

int i,j;

int nRooms = 0; // number of rooms

int nWalls = 0; // number of walls

int[] wallrow = new int[(rows*columns)/2]; // 허물 수 있는 벽의 위치

int[] wallcol = new int[(rows*columns)/2];

int n = 0;

// 모든 cell을 허물 수 있는 벽으로 초기화 한다.

for (i=0;i<rows;i++)

for (j= 0;j<cols;j++)

maze[i][j] = 3;

// 외곽 벽을 만든다.

for (i=0;i<rows;i++) {

maze[I][0] = 1; maze[I][cols-1] = 1;

}

for (j=1;j<cols-1;j++) {

Page 26: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

18

maze[0][j] = 1; maze[rows-1][j] = 1;

}

// 행과 열이 짝수인 셀을 벽으로 만든다.

for (i=2;i<rows-1;i+=2)

for (j=2;j<col-1;j+=2)

maze[i][j] = 1;

// 행과 열이 홀수인 셀을 방으로 만든다.

for (i=1;i<rows-1;i+=2) {

for (j=1;j<columns-1;j+=2) {

nRooms++;

maze[i][j] = -1 * nRooms;

}

}

// 허물 수 있는 벽을 일차원 배열에 저장한다.

for (int i=1;i<rows-1;i++) {

for (int j=1;j<cols-1;j++) {

if (maze[i][j] == 3) {

wallrow[n] = i;

wallcol[n] = j;

n++;

}

}

}

int r;

for (i=n;i>0;i--) {

r = (int)(Math.random() * i);

makeRoom(wallrow[r],wallcol[r]);

wallrow[r] = wallrow[i];

wallcol[r] = wallcol[i];

}

for (i=1;i<rows-1;i++)

for (j=1;j<columns-1;j++)

if (maze[i][j] < 0)

maze[i][j] = 2;

}

void makeRoom(int row, int col) {

if (row % 2 == 1 && maze[row][col-1] != maze[row][col+1]) {

// 행이 홀수이고, 왼쪽과 오른쪽 방의 코드가 틀리면 방으로 만든다.

merge(row, col-1, maze[row][col-1], maze[row][col+1]);

maze[row][col] = maze[row][col+1];

else if (row % 2 == 0 && maze[row-1][col] != maze[row+1][col]) {

// 행이 짝수이고, 위와 아래 방의 코드가 틀리면 방으로 만든다.

merge(row-1, col, maze[row-1][col], maze[row+1][col]);

maze[row][col] = maze[row+1][col];

}

}

void merge(int row, int col, int code1, int code2) {

if (maze[row][col] == code1) {

maze[row][col] = code2;

merge(row+1,col,code1,code2);

merge(row-1,col,code1,code2);

merge(row,col+1,code1,code2);

Page 27: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

19

merge(row,col-1,code1,code2);

}

}

[그림 2-12] makeMaze 자바 코드

참고문헌 및 보충설명

그래프 정의에 대한 자세한 설명은 Gould(1988)등과 같은 그래프 이론에 관한 서적을 참조

하라. 스택과 큐 규조에 대해서는 자료구조 책에 자세히 설명되어 있다. DFS에 대한 소개와

다양한 문제를 DFS로 풀 수 있다는 것을 보인 Tarjan (1972, 1974)을 참조하라.

Page 28: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

20

Page 29: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

21

3 장 오일러 서킷과 해밀토니아 서킷

3.1 오일러 서킷

오일러 그래프와 오일러 서킷의 정의는 다음과 같다.

정의) 만약, 그래프 G의 모든 아크를 포함하는 서킷이 존재하면 이 연결된 그래프를 오일러

그래프라고 한다. 또한 이 서킷을 오일러 서킷이라고 한다.

서킷은 시작노드와 종료노드가 같은 트레일이다. 트레일이므로 노드의 중복을 허용한다. 그

래프의 모든 아크를 한번씩 만 포함하는 서킷이 오일러 서킷이다. 오일러 서킷 문제는 종종

다음과 같은 수수께끼로 비유된다. [그림 3-1]과 같이 주어진 그림의 모든 선을 연필을 떼지

않고 하나의 선으로 그릴 수 있을까? 만약 하나의 선으로 그릴 수 있고, 원래 시작한 점에

서 연필을 뗄 수 있다면 오일러 서킷이 존재한다. 1→3→4→3→5→6→4→2→1이 그러한 오일

러 서킷이다.

1 3 5

2 4 6

[그림 3-1] 오일러 서킷

오일러 서킷에 대한 몇 가지 중요한 정리를 알아보자.

정리) 만약 그래프 G에서 각 노드의 차수가 최소한 2라면 G는 서킷을 포함하고 있다.

증명) 만약 G가 루프나 multiple edges를 포함하고 있다면 당연히 서킷을 포함하고 있다. 때

문에 G를 각 노드의 차수가 최소한 2인 단순 그래프라고 가정하자. 한 점 v에서 시작

하는 아크들의 순서 v→ 1v → 2v →… nv 을 연속적으로 찾아나간다고 하자. 이때 1−iv 은

iv 의 임의의 인접한 노드이고, 1+iv 은 1−iv 을 제외한 다른 인접한 노드이어야 한다(노

드의 차수가 최소한 2이므로 우리는 이러한 1+iv 을 항상 선택할 수 있다). 노드의 수

는 유한개 이므로 언젠가는 이미 선택되었던 노드를 다시 선택하게 된다. 즉, 두 동일

한 노드 사이의 아크 순서는 서킷이다.

위의 정리로부터 다음과 같이 오일러 그래프의 존재에 대한 필요 충분조건을 유도할 수 있

Page 30: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

22

다.

정리) 연결된 그래프 G는 각 노드에서의 차수가 짝수일 때만 오일러 그래프이다.

증명) ① 오일러 그래프 ➔ 차수가 짝수

P를 오일러 서킷이라고 하자. P의 노드를 통과할 때마다 2개의 차수가 소요된다. P에 각 노

드가 한번씩 만 포함되어 있으므로 각 노드의 차수는 짝수이다.

② 차수가 짝수 ➔ 오일러 그래프

귀납법(induction)을 사용하여 증명하자. G가 연결된 그래프이고, 각 노드에서의 차수는 짝수

이므로 차수는 2보다 크다. 정리에 의해 서킷 C가 존재한다. 만약, C가 모든 아크를 포함한

다면 증명은 끝난다. 만약 그렇지 않다면 G에서 C를 제거하여 부분 그래프 H를 만들자. 당

연히 H의 각 노드에서 차수는 짝수를 유지할 것이다. 가정에 의해 H의 각 부분(여러 개의

연결된 그래프로 구성될 수 있다)들은 오일러 서킷을 포함한다. H의 각 부분은 C에 포함된

노드들 중 최소 하나 이상을 포함하고 있으므로 이들을 모두 연결하면 오일러 서킷을 만들

수 있다.

이 정리로부터 우리는 주어진 그래프가 오일러 서킷을 포함하는지 또는 아닌지를 알 수 있

다. 각 노드의 차수가 짝수인지를 조사하면 된다. 그렇다면 오일러 그래프에서 오일러 서킷

을 어떻게 구할까? 다음의 Fleury 알고리즘을 보자.

Fleury의 알고리즘

단계 1: G에서 임의의 한 노드 u를 선택한다.

단계 2: u와 인접한 한 노드 v를 선택한다. 이 때 v는 가급적 이미 선택된 적이 없는 노드라

야 한다. 두 노드를 연결하는 아크를 지운다. 또한, 아크를 갖고 있지 않는 노드들

이 존재하면 이것도 함께 지운다. 만약, 아크를 지웠을 때 아크들이 남아있으나 선

택된 노드가 비 연결 되는 경우가 발생되면 안된다.

단계 3: G에서 아크가 없으면 종료하고 그렇지 않으면 v를 u로 놓고, 단계2를 수행한다.

Fleury의 알고리즘에 의해 [그림 3-1]의 그래프에서 오일러 서킷을 구해보자.

1) 단계 1에 의해 1번 점을 선택하자.

2) 단계 2에서 1번 점에 인접한 2번 과 3번 점 중 임의로 2번을 선택하자.

3) 2번 점에 인접한 4번 점을 선택하자.

4) 4번 점에 연결된 3과 6번 점 중 임의로 3번 점을 선택하자.

5) 3번 점에 연결된 1, 4, 5번 점 중 선택된 적이 없는 5번 점을 선택하자.

6) 5번 점에 인접한 6번 점을 선택하자.

7) 6번 점에 인접한 4번 점을 선택하자.

8) 4번 점에 연결된 3번 점을 선택하자.

9) 3번 점에 연결된 1번 점을 선택하자.

즉, 오일러 서킷은 1→2→4→3→5→6→4→3→1이다.

이 Fleury 알고리즘은 직관적으로 이해가 쉬운 방법이나 단계 2에서 가급적 선택된 적이 없

는 노드를 찾기 위하여 검사하는 시간이 요구된다. 보다 빠르게 오일러 서킷을 구하는 방법

은 다음과 같다.

Page 31: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

23

알고리즘: FindAnEulerCircuit

입력: G (연결된 그래프)

출력: 오일러 서킷

처리:

단계 1: 다른 노드에 연결된 임의의 노드 x 를 찾는다.

만약 없다면 정지하고, 아니면 U(G) = E(G)

단계 2: 알고리즘 CLChain(x,x) 를 적용하여 서킷 C를 구한다.

단계 3: U에서 C에 있는 아크들을 제거한다.

단계 4: 만약 U = 0 이면 C 를 출력하고 정지한다.

그렇지 않으면 C에 있는 노드 중 U의 아크를 연결하고 있는 한 노드 u를 찾

는다.

단계 5: 알고리즘 CLChain(u,u) 를 적용하여 서킷 D를 구한다.

단계 6: C 의 노드 u 대신에 D를 삽입한다. U에서 D의 아크들을 제거한다. 단계 4로

간다.

알고리즘: CLChain(x,x)

입력: U(G)

출력: x에서 시작하여 x로 끝나는 서킷

처리:

단계 1: v = x 로 하고 x 를 출력한다.

단계 2: 만약 U에 아크 (v, y) 가 있다면 v = y,로 하고 y,를 출력한 후 아크 (v, y) 를 U

에서 제거한다. 다시 단계 2를 반복한다.

그렇지 않고 아크가 없다면 정지한다.

이 알고리즘에 의해 [그림 3-1]의 그래프에서 오일러 서킷을 구해보자. 우선 임의의 노드 1

을 선택한다.

[그림 3-2] 오일러 서킷

1) 알고리즘 CLChain(1,1)을 적용하여 1→2→4→3→1의 서킷을 구하여 이에 포함된 아

크를 그래프에서 제거한다[그림 3-2].

2) [그림 3-2] 그래프의 노드 중 이미 구한 서킷에 포함된 노드인 노드 4를 선택한다.

알고리즘 CLChain(4,4)를 적용하여 그래프에서 서킷 4→3→5→6→4을 구한다. 이 서

1 3 5

2 4 6

Page 32: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

24

킷을 위의 서킷에 연결한다.

즉, 1→2→4→3→5→6→4→3→1이 생성된다.

지금까지 우리는 방향성이 없는 그래프에서의 오일러 서킷을 찾는 문제를 다루었다. 만약,

방향성이 있는 그래프가 있을 때 모든 아크를 단 한번씩 포함하는 오일러 서킷은 어떻게 구

할까? 우선, 다음의 정리를 보자.

정리) 방향성 그래프 일 경우의 오일러 정리

그래프 G 가 연결되어 있고, 각 노드에서 다음과 같은 조건이 성립하여야 만 오일러

서킷이 존재한다.

입력 노드의 수 = 출력 노드의 수

위 정리는 자명하다. 짝수의 차수를 가져야 한다는 비방향성 그래프에서의 조건은 입력 차

수와 출력 차수가 같아야 한다는 방향성 그래프에서의 조건으로 변환된다.

방향성 그래프에서 오일러 서킷을 구하는 알고리즘은 방향이 없는 그래프에서 오일러 서킷

을 구하는 알고리즘과 거의 같다. 이미 설명한 알고리즘에서 방향성 그래프에 적용되도록

수정할 수 있다. 수정된 알고리즘에 의해 [그림 3-2]의 그래프에서 오일러을 구해보자.

시작점

1

2 3

4

5

67

8 9

10

[그림 3-3] 방향성 그래프에서의 오일러 서킷

우선, 시작점 1에서 시작하는 서킷을 구한다. 노드의 방문 순서는 번호 순에 의한다고 하자.

서킷 1→4→3→2→1을 구한다. 이 서킷의 아크를 그래프에서 제거한다. 서킷의 첫번째 노드

1은 연결된 출력 아크를 갖고 있다. 따라서 노드 1에서 시작하는 서킷 1→6→5→1을 구하고

서킷의 아크를 그래프에서 제거한다. 앞의 서킷에 이를 추가하면 다음의 서킷을 구할 수 있

다.

1→6→5→1→4→3→2→1

노드 6에서 시작하는 서킷 6→7→8→9→10→2→9→6을 구하여 이를 위의 서킷에 추가한다.

즉 다음의 최종적인 오일러 서킷을 구할 수 있다.

1→6→7→8→9→10→2→9→6→5→1→4→3→2→1

Page 33: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

25

오일러 서킷은 적지 않은 응용분야를 갖고 있다. 이 장에서는 두 가지 중요한 응용 문제인

중국 우편배달부 문제(Chinesse postman problem) 와 거리 청소 문제(Street sweeping problem)을

소개한다.

3.1.1 중국 우편 배달부 문제

1962년 중국인 Meigu Guan에 의해 소개된 우편 배달부 문제는 다음과 같다.

문제: 오일러 서킷이 존재하지 않는 비 방향성 그래프에서 아크를 재사용하여 모든 아크들

을 한번 만 지나는 오일러 서킷을 구한다(Circuits with reused edges). 단 오일러 서킷의

총 아크 수(또는 총 거리)를 최소화 한다.

이 문제를 해결하는 절차는 다음과 같다.

절차

단계 1: 그래프에서 홀수 차수를 갖는 노드들을 나열한다.

단계 2: 선택된 노드들의 모든 짝짓기 대안을 나열한다.

단계 3: 각 짝짓기 대안에서 짝이 되는 두 노드간의 최소 아크수(또는 최소 총거리)를 갖

는 경로를 구한다.

단계 4: 가장 적은 아크 수(또는 총거리)를 갖는 짝 짓기 대안을 선택한다.

단계 5: 선택된 짝 짓기의 경로를 그래프에 추가하여 오일러 서킷을 구한다.

위 절차는 다음의 3가지 질문에 대한 답을 필요로 한다.

질문 1: 모든 짝짓기 대안을 구하는 방법은?

질문 2: 두 노드간의 최소 아크수 또는 최소 거리를 갖는 경로를 구하는 방법은?

질문 3: 오일러 서킷을 구하는 방법은?

질문 3에 대한 답인 Fluery 알고리즘은 이미 설명한 바와 같다. 질문 2는 나중에 배울 최

단 거리 문제이다. 질문 1에 대한 답은 이 장의 마지막에 자세히 설명하기로 한다.

예제: [그림 3-4]의 그래프에서 중국 우편배달부 문제를 풀어보자. 두 노드를 이을 때 최소

수의 아크를 포함하도록 기존 아크를 재사용한다고 하자.

A B C

D E F

G H X

[그림 3-4] 중국 우편 배달부 문제

Page 34: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

26

[표 3-1] 노드들의 차수와 오일러화

노드 차수 필요한 아크 수

A 2

B 3 +1

C 2

D 3 +1

E 4

F 3 +1

G 2

H 3 +1

X 2

각 노드의 차수를 나타낸 [표 3-1]에 의해 홀수 차수를 갖는 노드들은 B, D, F, H이다. 이들

홀수 차수를 갖는 노드들을 쌍으로 묶는 대안에는 다음의 3가지가 있다.

1) (B, D), (H, F)

2) (B, H), (D, F)

3) (B, F), (D, H)

각 대안에서 두 노드를 잇기 위하여 최소의 아크 수를 갖는 경로를 구한다. 아래 그림에서

보듯이 각 대안들은 4개의 아크를 필요로 한다.

대안 1) (B, D), (H, F) 연결

추가되는 아크 수 = 4

A B C

D E F

G H X

[그림 3-5] 오일러화를 위한 대안 1

대안 2) (B, H), (D, F) 연결

추가되는 아크 수 = 4

Page 35: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

27

A B C

D E F

G H X

[그림 3-6] 오일러화를 위한 대안 2

대안 3) (B, F), (D, H) 연결

추가되는 아크 수 = 4

A B C

D E F

G H X

[그림 3-7] 오일러화를 위한 대안 3

위의 3 대안은 4개의 아크를 재사용하였으므로, 모두 최적의 해가 될 수 있다.

3.1.2 거리 청소 문제

오일러 서킷에 관련된 거리 청소 문제는 다음과 같이 정의된다.

문제: 방향성 그래프에서 모든 아크들을 한번 이상 통과하여야 한다. 가장 최소의 시간으로

통과할 수 있는 방법은 무엇인가?

문제의 한 예는 [그림 3-8]과 같다. 청소원은 한 위치에서 출발하여 주어진 길을 청소하고

원위치로 돌아온다. 아래 그래프에서 실선으로 표현된 아크는 청소하여야 하는 길이다. 이때

청소하는 방향이 주어진다. 점선으로 표현된 아크는 청소하지 않고 걸어갈 수 있는 길을 나

타낸다. 역시 이때도 방향이 주어진다. 각 아크에 명시한 원안의 숫자는 청소하는데 걸리는

Page 36: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

28

시간이고, 상자안의 숫자는 청소하지 않고 지나가는데 걸리는 시간이다. 청소원이 가장 빠른

시간 내에 모든 길을 청소하고 돌아올 수 있는 방법은 무엇인가?

우선 청소하는 시간은 위 그래프에서 실선의 아크에 걸려있는 청소시간의 합이다.

청소 시간 = 12 + 12 + 8 + 12 + 12 + 8 + 8 = 72

청소원이 모든 길을 청소하고 돌아오기 위해서는 기존의 아크를 재사용하여 오일러화 하는

것이다. 즉, 위의 예에서 오일러화 하기 위한 필요 아크는 [표 3-2]와 같다.

[그림 3-8] 거리 청소 문제

[표 3-2] 거리 청소 문제에서의 최소 필요 아크

노드 청소가 필요한 아크 최소 필요 아크

입력 차수 출력 차수 입력 출력

1 2 1 0 1

2 1 2 1 0

3 2 0 0 2

4 0 2 2 0

5 1 1 0 0

6 1 1 0 0

오일러화하기 위하여 출력 아크가 필요한 노드에서 입력 아크가 필요한 노드로 경로를 연결

한다. 이러한 노드 쌍의 대안은 두가지가 존재한다.

1) 1→2, 3→4, 3→4

2) 1→4, 3→2, 3→4

16

4

4 4

4

4

6 6

6

44

6

12

8

12

8

12 12

8

1

23

45

6

Page 37: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

29

대안 1)

1) 1에서 2로의 경로는 두가지를 고려할 수 있다. 우선 1→5→6→2의 경우 추가되는

거리는 16(6 + 4 + 6 = 16)이고, 1→4→3→2 의 경우 추가되는 거리는 12(4 + 4 + 4 = 12)

이다. 따라서, 최소의 거리인 1→5→6→2를 선택한다.

2) 3에서 4로의 경로 역시 두가지를 고려할 수 있다. 3→4의 경우 거리는 16이고,

3→2→1→4의 경우 12(4 + 4 + 4 = 12)이다. 따라서 3→2→1→4를 선택한다.

따라서, 추가되는 총거리는 24 (12 + 12 = 24)이다.

대안 2)

1) 1에서 4로의 경로는 1→4로 거리는 4이다.

2) 3에서 2로의 경로는 3→2로 거리는 4이다.

3) 3에서 4로의 경로는 3→4로 거리는 12이다.

따라서, 추가되는 총거리는 20(4 + 4 + 12 = 20)이다.

두 대안 중 대안 2의 걸어가는 시간은 20으로 대안 1에 비해 더 좋은 결과를 가져온다. 따

라서,

총시간 = 청소하는 시간 + 걸어가는 시간 = 72 + 20 = 92

추가되는 아크: 1→4, 3→2, 3→4

3.1.3 홀수 차수 노드들의 짝짓기

그래프 G에서 홀수 차수를 갖는 노드의 수는 짝수이므로 두 노드씩 짝을 지을 수 있다.

모든 가능한 짝 짓기 대안을 만들어 보자. 예를 들어, 4개 노드 A, B, C, D를 짝 짓는다면 다

음과 같은 3가지 대안이 있다.

1) (A, B), (C, D)

2) (A, C), (B, D)

3) (A, D), (B, C)

A를 고정시키면, 나머지 B, C, D중 하나를 뽑아 A와 짝 짓는 3가지 방법이 있다. 나머지 두

노드를 짝 지을 수 있는 방법은 한가지 밖에 없다. 따라서, 3×1개의 대안이 존재한다. 6개의

노드가 있다면 5×3×1 = 15개의 짝짓기 대안이 있다. 1을 고정시키면 2, 3, 4, 5, 6 중 하나를

뽑아 짝 지을 수 있다. 나머지 4개 노드에 대한 짝 짓기 대안은 3가지이다. 따라서, 5×3개의

대안이 있다.

1) (1, 2), (3, 4), (5, 6)

2) (1, 2), (3, 5), (4, 6)

3) (1, 2), (3, 6), (4, 5)

4) (1, 3), (2, 4), (5, 6)

5) (1, 3), (2, 5), (4, 6)

6) (1, 3), (2, 6), (4, 5)

Page 38: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

30

7) (1, 4), (2, 3), (5, 6)

8) (1, 4), (2, 5), (3, 6)

9) (1, 4), (2, 6), (3, 5)

10) (1, 5), (2, 3), (4, 6)

11) (1, 5), (2, 4), (3, 6)

12) (1, 5), (2, 6), (3, 4)

13) (1, 6), (2, 3), (4, 5)

14) (1, 6), (2, 4), (3, 5)

15) (1, 6), (2, 5), (3, 4)

일반적으로 m개의 노드가 있다면 (m-1)×(m-3)×(m-5)×…×1개의 짝짓기 대안이 존재한

다.

만약, 위 6개 수에 대한 15가지 짝짓기 대안을 어떻게 생성했는지 이해하기 어렵다면 다

음 그림이 도움을 줄 것이다.

[그림 3-9] 6게 수에 대한 짝짓기 대안

짝 지을 대상이 되는 노드가 많다면 손으로 모든 대안을 구하기 어렵다. 가능한 모든 짝

짓기 대안을 생성할 수 있는 프로그램을 만들어 보자. 우선 알고리즘을 작성하고 이를 프로

그램으로 만들어 보자. 알고리즘은 프로그래밍 언어를 알고 있다면 보다 쉬워진다. 1부터 n

까지의 수를 입력으로 알고리즘을 작성해보자.

Algorithm : 쌍 만들기

1. 배열 data[0:n-1]에 1 부터 n까지 차례대로 수를 할당한다

2. Data를 출력한다.

3. P = n/2 - 1

4. P > 0 인 한 다음을 반복한다.

4.1 Data[2*p+2:n-1] 에서 Data[2*p+1] 보다 큰 것 중 가장 작은 것을 찾는다.

4.2 만약 없다면 p = p-1

4.3 그렇지 않고 있다면

(3,4) (3,5) (3,6) (2,4) (2,5) (2,6) (2,3) (2,5) (2,6) (2,3) (2,4) (2,6) (2,3) (2,4) (2,5)

(1,2) (1,3) (1,4)(1,6)(1,5)

(5,6) (4,6) (4,5) (5,6) (4,6) (4,5) (5,6) (3,6) (3,5) (4,6) (3,6) (3,4) (4,5) (3,5) (3,4)

시작

Page 39: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

31

4.3.1 찾은 것과 data[2*p+1]을 교환한다.

4.3.2 Data[2*p+2:n-1] 들을 증가순으로 정렬한다.

4.3.3 Data를 출력한다.

4.3.4 P = n/2 - 1;

1부터 6까지의 수를 짝짓기할 때 위 알고리즘을 적용하자.

위 알고리즘은 우리가 이해하기 쉽지만 프로그래밍을 하기에는 다소 어렵다. 프로그래밍

언어에 가깝도록 알고리즘을 재작성해 보자.

Algorithm: listPairs(n)

1. for (i=0;i<n;i++) data[i] = i+1;

2. print data

3. p = n/2 -1

4. while (p > 0) {

next = findNextLarge(data, 2*p+1, n-1)

if (next == -1) p = p-1

else {

interchange(data, next, 2*p+1)

sort(data, 2*p+2, n-1)

print data

p = n/2-1

}

}

Algorithm: findNextLarge(data, s, e)

1. resultData = e+1, resultIndex = -1

2. for (i=s+1;i<=e;i++) {

if ((data[i]>data[s]) && (data[i] < resultData)) {

resultData = data[i];

resultIndex = I;

}

}

3. return resultIndex;

Algorithm: interchange(data, i, j)

1. temp = data[i]

2. data[i] = data[j]

3. data[j] = temp

Page 40: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

32

3.2 해밀토니아 서킷

해밀토니아 그래프와 서킷의 정의는 다음과 같다.

정의) 만약, 그래프 G의 모든 노드를 한번씩 만 포함하는 서킷이 존재하면 이 연결된 그래

프를 해밀토니아 그래프라고 한다. 또한, 이 서킷을 해밀토니아 서킷이라고 한다.

오일러 서킷은 그래프의 아크를 대상으로 하지만 해밀토니안 서킷은 노드를 대상으로 한다.

[그림 3-10]의 그래프는 1→2→5→4→3→1 이라는 서킷을 가진다. 이 서킷은 시작 노드 1을

제외하고 모든 노드를 한번씩 포함하므로 해밀토니아 서킷이다.

1

2

3

4

5

[그림 3-10] 해밀토니아 그래프 1

해밀토니아 서킷의 존재에 대한 필요조건은 다음과 같다.

정리) 그래프 G가 3개 이상의 노드를 갖는다고 가정하자. 또한, 아크로 연결되지 않은 서로

다른 두 노드 x, y에서 두 노드의 차수를 합한 값이 전체 노드 수 n보다 크거나 같다고 하자.

그러면, G는 해밀토니아 서킷을 갖는다.

위의 그래프에서 아크로 연결되지 않은 노드들의 쌍은 (1, 5), (2, 4), (3, 5)이다. 두 노드의 차

수를 합하면

deg(1) + deg(5) = 5

deg(2) + deg(4) = 6

deg(3) + deg(5) = 5

로서 이 합한 값은 전체 노드의 수 5 보다 크거나 같다. 때문에 이 그래프는 해밀토니아 서

킷을 갖는다.

위의 정리는 해밀토니아 서킷에 대한 필요조건이다. [그림 3-11]의 그래프에서 deg(1) + deg(3)

= 4로 노드의 수인 5보다 작다. 그러나, 해밀토니안 서킷이 존재하므로 위 정리에서의 조건

이 필요조건임을 알 수 있다. .

Page 41: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

33

[그림 3-11] 해밀토니안 그래프 2

그렇다면 필요충분 조건은 무엇일까? 문제는 모든 종류의 그래프에 대한 필요 충분조건을

유도하기가 쉽지 않다는 것이다. 물론 특수한 경우의 그래프에 대한 많은 정리가 연구되어

왔지만 일반적인 그래프에서의 필요 충분 조건의 유도는 쉽지가 않다. 주어진 그래프가 해

밀토니아 서킷을 갖고 있는지를 알 수 있는 확실한 방법은 그래프에서 해밀토니아 서킷을

구하는 것이다. 만약, 구할 수 없다면 해밀토니아 서킷은 존재하지 않는다는 결론을 얻을 수

있다.

모든 노드를 한번씩 방문하는 서킷을 찾는 문제는 여러 응용 분야를 갖고 있다. 그 중에 대

표적인 것이 외판원 문제(Traveling Salesman Problem)이다. 한 외판원이 모든 도시를 한번씩

방문하여 다시 본사로 돌아온다. 이때 가장 짧은 시간에 방문을 끝낼 수 있는 방법은 무엇

일까? 방문하여야 할 도시를 노드로, 두 도시간의 길을 아크로 표현한 그래프를 만들자. 이

그래프는 n개의 노드를 갖는 그래프이고, 어느 두 노드간에도 아크로 연결된 완전 그래프라

고 하자. 이 그래프에서 모든 가능한 해밀토니아 서킷의 수는 (n-1)!/2이다. 만약, 방향이 있

는 그래프라면 (n-1)!개의 해밀토니아 서킷이 존재한다. 이 중에 가장 짧은 시간을 보장하는

하나의 서킷을 찾아야 한다. 서킷 대안의 수가 노드의 수, n에 대해 기하 급수적으로 증가하

므로 이 중에 가장 좋은 하나를 찾는 것은 많은 시간을 요구한다. 이를 Non-polynomial

complete problem이라고 한다. 말하자면 한정된 시간내에 가장 좋은 해를 찾는 것이 불가능하

다는 것이다. 때문에, 주어진 시간 내에 가장 좋은 해는 아니지만 그래도 믿을 만한 좋은해

(근사해)를 찾는 방법이 요구된다. 일반적으로 휴리스틱(heuristic)이라고 불리는 경험적 방법

이 근사해를 찾는데 이용된다.

1

2

5

3

4

Page 42: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

34

Page 43: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

35

4 장 외판원 문제

4.1 문제 정의

한 판매원이 n개의 도시를 한번 씩 방문하여 총 이동거리를 최소로 하는 도시들의 순서를

찾는 문제가 TSP 이다. 예를 들어, A, B, C, D, E의 5 도시를 한번씩 방문하여야 하고, 각 도시

간의 거리는 [그림 4-1]과 같다고 하자. 총 이동거리를 최소로 하는 방문순서를 구해보자.

A B

EC

D

10

2020

530

45

15

35

30

25

[그림 4-1] TSP 문제

A에서 출발할 때 총 이동거리를 최소로 하는 최적의 방문순서는 A→B→C→D→E→A 로 총

거리는 85이다.

TSP문제를 정형적인 수식으로 표현해 보자. 우선 각 노드에 번호를 부여하여 iv 를 i번째 노

드, ijd 를 두 노드 iv 와 iv 간의 거리라고 하자. 부가하여 같은 노드간의 거리는 무한대로

하자. 다음과 같은 문제를 만들 수 있다.

toura valid constitue 1 is value whoses'

1or 0

allfor ,1

allfor ,1

;Subject to

Min

1

1

1i 1

ij

ij

n

i

ij

n

j

ij

n n

j

ijij

x

x

jx

ix

dx

=

=

=

=

=

= =

결정변수 ijx 가 1이라는 의미는 i번째 노드 바로 다음으로 방문하여야 할 노드가 j번째 노드

라는 것이다. 0의 의미는 그 반대이다. 제한조건 중 마지막 문장은 해가 유효한 방문 순서를

구성하여야 한다는 뜻이다. 위의 예제에서 5345342112 ,,,, xxxxx 들의 값이 1인 해를 생성했다면,

Page 44: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

36

이 해는 유효한 방문 순서를 이루지 못한다. A에서 B로 가서는 다시 A로 돌아오는 순서이

므로 전체 도시를 포함하는 하나의 순서를 구성하지 못하기 때문이다.

TSP 문제를 쉽게 다루기 위해 그래프로 변환하여 보자. 각 도시를 노드로, 두 도시간의 길

을 에지로 표현한 그래프 ( , )G V A= 에서 모든 노드를 포함하는 해밀토니아 서킷 중 가장

적은 거리의 합을 갖는 서킷을 구하는 문제이다. 이 문제는 NP-hard에 속하여 도시의 수가

클 경우 제한된 시간 내에 최적의 해를 구하지 못한다. 따라서, 제한된 시간 내에 거의 최적

인 해(near optimal solution)를 구할 수 있는 경험적 방법(heuristic)들이 많이 이용되고 있다.

TSP 문제를 풀기 위한 방법은 크게 세가지로 구분된다.

⚫ Brute-force method

⚫ Branch-bound method

⚫ Heuristics

- Construction heuristics

- Improving heuristics

- Meta heuristics

4.2 억지 접근 방법(Brute-force method)

모든 해밀토니아 서킷들에 대하여 총거리를 비교하는 진부한 방법이나 최적의 해를 구할 수

있다. 그 절차는 다음과 같다.

1) 모든 해밀토니아 서킷들을 생성한다.

2) 각 서킷의 에지에 있는 거리를 합한다.

3) 가장 적은 거리의 합을 갖는 서킷을 선택한다.

만약, 고려되는 그래프가 n개의 노드를 갖는 완전 그래프이고, 방향을 갖는 그래프라면, (n-

1)!개의 해밀토니아 서킷이 존재한다. 비방향성 그래프인 대칭 그래프(symmetric graph)라면

(n-1)!/2개의 해밀토니아 서킷이 존재한다. n이 200이라면 고려하여야 할 서킷의 수는 상상할

수 없을 정도로 많아진다.

예제: [그림 4-1]의 비방향성 그래프는 5개의 노드를 가지는 완전 그래프이므로 해밀토니아

서킷의 수는 4!/2 = 12개이다. 모든 해밀토니아 서킷을 구하면 다음과 같다.

(A, B, C, D, E, A): 10+20+30+5+20 = 85*

(A, B, C, E, D, A): 10+20+25+5+35 = 95

(A, B, D, C, E, A): 10+45+30+25+20 = 130

(A, B, D, E, C, A): 10+45+5+25+15 = 100

(A, C, B, D, E, A): 15+20+45+5+20 = 105

(A, C, B, E, D, A): 15+20+30+5+35 = 105

(A, C, D, B, E, A): 15+30+45+30+20 = 140

(A, C, D, E, B, A): 15+30+5+30+10 = 90

(A, D, B, C, E, A): 35+45+20+25+20 = 145

(A, D, B, E, C, A): 35+45+30+25+15 = 150

Page 45: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

37

(A, D, C, B, E, A): 35+30+20+30+20 = 135

(A, D, C, E, B, A): 35+30+25+30+10 = 130

12개 대안 중 가장 적은 총거리를 갖는 최적의 방문 순서는 A→B→C→D→E→A이다.

4.3 가지치기-한계 방법(Branch-bound)

Branch-Bound 방법은 최적의 방문 순서를 구하기 위한 방법으로 사용된다. Brute-force 방법이

모든 해밀토니안 서킷을 탐색하는데 비해 Branch-Bound방법은 일부분 만을 효과적으로 탐색

하는 방법이다.

Branch 하는 방법은 두 노드간의 어느 한 에지를 해의 일부분으로 선택할지 아니면 안할지

의 의사결정에 따른다. Bound 값은 최대 한계(upper bound)와 최소한계(low bound)의 두 가지

가 있다. TSP 문제에서 최대 한계는 한 의사결정에서 나올 수 있는 임의의 한 해에 대한 총

거리로 구할 수 있고, 최소 한계는 제한조건의 완화(relaxation)를 사용하여 구한다. 여기서는

TSP 문제를 7장의 할당 문제를 푸는 방식과 비슷한 방법으로 최소 한계를 구하고 최대 한

계는 구하지 않는 방법을 소개하기로 한다.

최소 한계

이전에 설명한 TSP 문제의 정형화된 식에서 해가 유효한 해이어야 하는 마지막 제한 조건

을 제거하면 할당문제와 동일하게 된다. 행렬 D의 각 성분은 i번째 도시와 j번째 도시의 거

리라고 하고, 같은 도시일 경우 무한대로 하자. 이전의 예에서 다음과 같은 거리 행렬을 구

할 수 있다.

=

5253020

5304535

25302015

30452010

20351510

D

각 행과 열에서 최소값을 빼면 다음과 같은 행렬을 구할 수 있다.

0 5 25 10 10 0 0 25 10

0 10 35 20 10 0 5 35 20

' '' 0 5 15 10 15 0 5 15 10

30 40 25 0 5 30 40 20 0

15 25 20 0 5 15 25 15 0

D D

− = → = −

− −

-0 -0 -5 -0 -0

𝐷"으로 구한 해는 행과 열에서 뺀 값의 합인 50을 더한 값으로 계산되어야 한다. 결국 𝐷로

구한 최적의 해나 𝐷"으로 구한 최적의 해는 같은 결과를 낳는다. 따라서, 𝐷"에 의한 최소

한계는 50으로 결정된다(어느 해의 총거리도 50보다 크다).

가지치기 규칙(Branching rule)

Branch-Bound방법을 적용하기 위해 우선 branching을 위한 규칙을 설정하여야 한다. 여기서

는 단순한 휴리스틱을 적용한 규칙을 설명하기로 한다. 𝐷"의 0인 성분에 대해 행과 열의 다

Page 46: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

38

른 성분 중 가장 적은 값들을 더한다. . 예를 들어, 첫번째 행과 2번째 열의 0에 대해 첫번째

행의 다른 성분 중 가장 적은 값은 0이고, 2번째 열의 다른 성분 중 가장 적은 값은 5이다.

따라서, 이들 최소값들의 합인 5를 첫번째 행과 2번째 열의 0에 대한 기회 값으로 계산한다.

0(5) 0(5) 25 10

0(5) 5 35 15

'' 0(5) 5 15 10

30 40 20 0(30)

15 25 15 0(30)

D

=

0 중 가장 큰 기회 값을 갖는 것을 선택한다(이것을 선택하지 않았을 때 잃는 것이 가장 크

기 때문에). 30을 갖는 두 성분이 있지만 이 중 DE를 임의로 선택하자. Branching은 아크 DE

를 포함하는 해와 포함하지 않는 해로 나누어 진다(DE를 선택하는 것이 가장 중요할 것이

라는 추측으로부터 이 두 경우를 분리).

절차

1-1) DE 포함

DE를 포함한다면, 𝐷"은 다음의 행렬로 축소될 수 있다. 즉, D의 행과 E의 열을 제거한다.

또한, 아크 ED의 거리를 무한대로 한다. 다시 각 행과 열에 0이 하나 이상 나오도록 하자.

A B C D

A 0 0 25 0

B 0 5 35 0

C 0 5 15 0

E 15 25 15 -15

A B C D

A 0 0 25

B 0 5 35

C 0 5 15

E 0 10 0

0 0 0 -15

A B C D

A 0 0 10

B 0 5 20

C 0 5 0

E 0 10 0

행과 열에서 합 30을 뺐으므로, 이 경우 최소 한계는 50+30 = 80이다.

1-2) DE 안 포함

DE를 포함하지 않으므로, 단지 DE 성분을 무한대로 하는 행렬을 구할 수 있다. 또한

symmetric TSP이므로 ED도 무한대로 한다. 각 행과 열에 0이 하나 이상 나오도록 하자.

Page 47: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

39

A B C D E

A 0 0 25 10 0

B 0 5 35 20 0

C 0 5 15 10 0

D 30 40 20 -20

E 15 25 15 -15

A B C D E

A 0 0 25 10

B 0 5 35 20

C 0 5 15 10

D 10 20 0

E 0 10 0

0 0 0 -15 -10

A B C D E

A 0 0 10 0

B 0 5 20 10

C 0 5 0 0

D 10 20 0

E 0 10 0

이 경우 최소 한계는 50+20+15+15+10= 110이다.

DE를 선택하는 경우의 최소 한계가 80이고 110보다 적으므로 DE를 포함하는 경우를 우선

적으로 branch해보자(Depth First Traverse). 1-1)의 표에서 0의 값을 갖는 성분에 대한 기회 값

을 구하자.

가장 큰 기회 값을 갖는 CD를 선택한다.

1-1-1) DE 포함, CD 포함

위의 표에서 C행과 D열을 제거하자. 또한, EC를 선택할 경우 부분적인 circuit을 이루므로 이

성분값을 무한대로 한다.

A B C

A 0 0 0

B 0 5 0

E 0 10 0

A B C D

A 0(5) 0(0) 10

B 0(5) 5 20

C 0(0) 5 0(10)

E 0(0) 10 0(0)

Page 48: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

40

A B C

A 0 0

B 0 5

E 0 10

0 0 0

최소 한계 = 80+0 = 80

1-1-2) DE 포함, CD 안 포함

AD를 포함하지 않으므로 CD를 무한대로 한다.

A B C D

A 0 0 10

B 0 5 20

C 0 5

E 0 10

0 0 0 -10

A B C D

A 0 0 0

B 0 5 10

C 0 5

E 0 10

0 0 0 0

최소 한계 = 80 + 10 = 90

DE 포함, CD 포함의 최소 한계가 더 작으므로 이를 branching 한다.

DE 포함, CD 포함을 선택하는 경우의 최소 한계가 80이고 90보다 적으므로 DE 포함, CD 포

함하는 경우를 우선적으로 branch해보자(Depth First Traverse). 1-1)의 표에서 0의 값을 갖는 성

분에 대한 기회 값을 구하자.

A B C

A 0(10) 0(0)

B 0(5) 5

E 0 10

1-1-1-1) DE 포함, CD 포함, AB 포함

A C

B 5 -5

E 0 0

A C

B 0

E 0

Page 49: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

41

최소 한계 = 80+5 = 85

BC를 임의로 선택

1-1-1-1-1) DE 포함, CD 포함, AB 포함, BC 포함

A

E 0

최소 한계 = 85

EA 포함을 선택한다. 즉, A→B→C→D→E→A 의 해로 총거리는 85이다.

유효한 해를 구했으므로, 이 해의 최소 한계와 같거나 더 큰 최소 한계를 갖는 경우는 없애

버린다. 즉, 1-1-1), 1-1-2), 1-2)는 더 이상 고려할 필요가 없다.

1-1-1) 의 DE, CD 포함에서 최소 한계는 80이다. 이 경우에서 AB 포함은 가자치기를 했으

므로 AB 안 포함을 가지치기 한다.

1-1-1-2) DE 포함, CD 포함, AB 안 포함

1-1-1-1) 의 상단에 위치한 기회비용을 포함한 AB, BA의 값을 무한대로 한다.

A B C

A 0

B 5

E 0 10

각 행과 열에 하나 이상의 0이 나오도록 하자.

A B C

A 0

B 0

E 0 0

최소 한계는 80 + 15 = 95이다. 이 값은 유효한 해의 값인 85보다 크다. 따라서, 더 이

상의 가지치기는 불필요하다. 결국 가지치기를 할 경우는 남아있지 않다.

결국 더 이상 고려하여야 할 경우는 없다. 따라서, 1-1-1-1-1)에서 구한 해를 최적해로 한다.

Page 50: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

42

시작

DE

DE

DE, CD DE, CD

50

80

110

80 100

85

85

DE, CDAB

DE, CDAB, BC

fathomed

fathomed

fathomed

fathomed

DE, CDAB

95

[그림 4-2] 가지치기-한계

4.4 휴리스틱

4.4.1 구성적 휴리스틱

구성적 휴리스틱은 어떠한 규칙에 의해 하나의 해를 결정하는 방법으로 한번 결정된 해에

대한 향상을 꾀하지 않는다. 해는 단계적으로 생성되고, 이미 결정된 부분적 해는 변하지 않

는다.

4.4.1.1 최근접 이웃 알고리즘(Nearest neighbor algorithm)

가장 간단한 구성적 휴리스틱으로 절차는 다음과 같다.

알고리즘: NearestNeighboorTSP

입력: 그래프 ( , )G V A= , 에지의 거리 njnied ij ,,2,1.,2,1),( ==

절차:

단계 0: 순서화된 노드 집합 S = { }를 초기화 한다.

단계 1: 임의의 한 노드를 선택하여 집합 S에 넣는다.

단계 2: S의 마지막 노드에서 가장 가까운 노드를 V S− 에서 선택한다. 이 선택 노

드를 S에 넣는다.

단계 3: S n= 이면 단계 4로 가고, 아니면 단계 2로 간다.

단계 4: S를 출력한다.

Page 51: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

43

예제) 최근접 이웃 방법에 의해 그림 4-1의 TSP 문제를 풀어보자. [표 4-1]에 각 에지에 대

한 거리를 나타내었다.

[표 4-1] 에지의 거리

아크 거리

DE 5

AB 10

AC 15

BC 20

AE 20

CE 25

CD 30

BE 30

AD 35

BD 45

[표 4-2]는 알고리즘을 적용한 결과는 나타내어, 선택된 에지들을 연결하면 서킷을 구할 수

있다. 즉, 해는 A→B→C→E→D→A 으로 총 거리는 60 + d(DA) = 60 + 35 = 95이다.

[표 4-2] 최근접 이웃 알고리즘 결과

단계 선택된

노드

선택된

에지

에지

거리

총거리 S V S−

0 A 0 0 A B,C,D,E

1 B AB 10 10 A,B C,D,E

2 C BC 20 30 A,B,C D,E

3 E CE 25 55 A,B,C,E D

4 D DE 5 60 A,B,C,E,D

위의 예에서 본 바와 같이 이 알고리즘은 탐욕적 알고리즘(greedy algorithm)에 속한다. 가장

적은 거리를 갖는 에지들을 우선적으로 선택하여 해를 형성하기 때문이다. 초기에 적은 거

리를 갖는 에지를 선택할 경우, 해의 형성 말기에 큰 거리를 갖는 에지를 선택할 수 밖에

없는 최악의 상황이 발생할 수 있다. 따라서, 이 방법은 좋은 해를 가져오지 못하는 가능성

을 갖고 있다.

4.4.1.2 정렬된 에지 알고리즘(Sorted-edges algorithm)

절차는 다음과 같다.

알고리즘: SortedEdgeTSP

입력: 그래프 ( , )G V A= , 에지의 거리 njnied ij ,,2,1.,2,1),( ==

Page 52: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

44

절차:

단계 0: 거리의 증가 순으로 에지들을 정렬하여 리스트 E에 저장한다. 각 노드에 대해

nivs i ,2,1,0)( == 으로 한다. 선택된 에지 집합 F = { }를 초기화 한다

단계 1: E 에서 순서대로 한 에지를 선택하여 에지가 연결하는 두 노드 lk vv , 에 대해 다음

두 조건 중 하나를 만족하면 다음 에지를 선택하여 단계 1을 반복한다.

1) )( kvs 또는 )( lvs 이 2이다.

2) F의 에지 집합과 선택된 에지를 연결할 경우 부분적인 서킷을 이룬다.

만약 위의 두 조건을 만족하지 않으면 )( kvs 와 )( lvs 를 1 증가시키고, 아크를 F

에 넣는다.

단계 2: 모든 노드에 대해 nivs i ,2,1,2)( == 이면 정지하고, 아니면 단계 1을 반복한다.

단계 1에서 에지 집합 F의 각 노드에 대해 차수가 최대 2가 되도록 에지를 선택한다. 이는

서킷을 이루는 각 노드의 차수가 2가 되기 때문이다. 또한, 전체 노드를 포함하지 않는 일부

노드들 만의 서킷이 되지 않도록 하여야 한다. 이를 위해서 현재 단계에서의 부분해가 서킷

을 이루는지를 조사하는 방법이 있어야 한다.

예제) 정렬된 에지 방법에 의해 [그림 4.1]의 TSP 문제를 풀어보자. [표 4-1]과 같이 거리의

증가순으로 정렬된 데이터를 이용한 알고리즘은 표 4-3과 같다. 단계 1을 반복하면 에지 DE,

AB, AC를 차례대로 선택한다. 다음 에지인 AE를 선택할 경우 A의 degree에 해당하는 s(A)가

3이 되어 이 에지를 선택하지 않고, 그 다음 에지를 고려하여야 한다. 그 다음으로 정렬된

에지는 BC이나 이를 선택할 경우 부분 서킷인 A→B→C→A가 발생하여 이를 선택하지 않

고 다음 에지를 고려한다. 다음 에지인 CE를 선택한다. 마지믹으로 선택될 수 있는 에지는

BD밖에 없다. 선택된 에지들을 연결하면 서킷을 구할 수 있어 해는 A→B→D→E→C→A 로

서 총거리는 100이다.

[표 4-3] 정렬된 에지 알고리즘 결과

단계 선택된 에지 거리 총거리 )( kvs

A B C D E

1 DE 5 5 0 0 0 1 1

2 AB 10 15 1 1 0 1 1

3 AC 15 30 2 1 1 1 1

4 CE 25 55 2 1 2 1 2

5 BD 45 100 2 2 2 2 2

4.4.1.3 삽입 알고리즘(Insertion algorithm)

삽입 휴리스틱의 절차는 다음과 같다.

알고리즘: InsertionTSP

입력: 그래프 ( , )G V A= , 에지의 거리 njnied ij ,,2,1.,2,1),( ==

처리:

단계 1: G에서 세 노드를 선택하여 부분 해(subtour)를 생성한다. 이 때 가급적 모든

Page 53: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

45

노드가 삼각형 안에 들어가는 convex hull을 이루는 부분 해를 구한다(Euclidean TSP

일 경우).

단계 2: 부분 해에 더해질 노드를 선택한다.

1) Cheapest insertion

부분해의 노드로부터 가장 적은 거리를 갖는 에지의 노드 선택

)}(min{min ijji

d , 부분해노드노드부분해 ji ,

2) Farthest insertion

부분해의 노드들로부터 가장 적은 거리를 갖는 에지 중 가장 큰 거리의 에지에

해당하는 노드를 선택

)}(min{max ijji

d , 부분해노드노드부분해 ji ,

단계 3: 선택된 노드를 부분 해에 삽입한다.

단계 4: 단계 2와 3을 반복하여 모든 노드를 포함하는 해를 구한다.

예제) [그림 4-1]의 TSP 문제에 대해 위의 알고리즘을 적용해 보자.

1) A, B, C 세 노드를 선택: A→B→C→A

2) E: A-E (20) 를 cheapest insertion rule에 따라 선택

symmetric TSP이므로 에지 AE가 들어갈 경우는 둘이다.

A→E→B→C→A : 20+30+20+15 = 85

A→B→C→E→A : 10+20+25+20 = 75

후자의 경우가 더 적은 거리를 가지므로 이를 선택한다.

3) D: ED (5) 선택

A→B→C→D→E→A : 10+20+30+5+20 = 85*

A→B→C→E→D→A : 10+20+25+5+35 = 95

전자를 선택한다. 완전한 해를 형성하므로 정지한다.

Symmetric TSP의 경우에서 삽입 알고리즘을 약간 만 수정하면 보다 좋은 해를 구할 수 있는

방법을 제안할 수 있다. 삽입 알고리즘에서 세 가지를 결정하여야 한다. 우선 1) 초기 부분

해(partial solution)를 형성하는 노드의 선택, 2) 부분 해에 삽입될 노드의 선택, 그리고, 3) 선

택된 노드의 삽입될 위치이다. 이 세 가지 선택을 변형하여 보다 좋은 해를 생성하는 방법

을 유도할 수 있다.

위의 알고리즘에서 초기 부분 해를 생성할 때 가급적 모든 노드를 포함하는 세 노드를 선택

하였다. Euclidean TSP (Triangular inequality가 성립하는 경우)인 경우 해당하는 규칙으로서 가

장 먼 도시들(모든 도시들은 이들 도시들 사이에 위치한다)을 선택하였다. 만약 이들 도시들

을 초기에 해에 포함하지 않고, 나중에 포함시킨다고 하면 좋지 않은 해를 가져올 확률이

커지기 때문이다. 즉, 문제의 발생여지가 큰 노드들을 우선적으로 선택하여야 좋은 해를 가

져올 가능성이 커진다.

부분해에 삽입될 노드의 선택을 Cheapest insertion, Farthest insertion에 의존하는 것 보다 삽입

Page 54: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

46

되는 위치에 따른 총 거리를 최소화 하는 규칙을 사용할 수 있다. 위의 예제 인 경우 이를

설명하면 다음과 같다.

1) A, B, C 세 노드를 선택: A→B→C→A

2) D의 삽입

D가 삽입될 위치 결정

A→D→B→C→A : 35+45+20+15 = 115

A→B→D→C→A : 10+45+30+15 = 100

A→B→C→D→A : 10+20+30+35 = 95

E의 삽입

E가 삽입될 위치 결정

A→E→B→C→A : 20+30+20+15 = 85

A→B→E→C→A : 10+30+25+15 = 80

A→B→C→E→A : 10+20+25+20 = 75

A→B→C→E→A 선택

3) D의 삽입

D가 삽입될 위치 결정

A→D→B→C→E→A: 35+45+20+25+20 = 145

A→B→D→C→E→A: 10+45+30+25+20 = 130

A→B→C→D→E→A: 10+20+30+5+20 = 85*

A→B→C→E→D→A: 10+20+25+5+35 = 95

그러나, 이 수정된 알고리즘에 의할 경우 복잡성은 )()( 31

3

nOkkn

n

k

=−−

=

이다.

4.4.2 향상적 휴리스틱(Improving heuristics)

향상적 휴리스틱는 초기에 하나의 해를 생성하여 지속적으로 이를 변경하여 향상을 꾀하는

방법이다.

4.4.2.1 2-OPT 교환

2-OPT 교환은 유효한 해에 포함된 두 에지를 제거하고 새로운 에지를 형성하는 방법이다.

절차는 다음과 같다.

알고리즘: TwoOptTSP

입력: 그래프 ( , )G V A= , 에지의 거리 njnied ij ,,2,1.,2,1),( ==

처리:

단계 0: 초기 해를 구한다.

단계 1: 해의 두 에지를 제거하고, 새로운 해를 구한다. (가장 큰 향상을 가져오는 에지

들을 제거)

단계 2: 더 이상의 향상이 없을 때 까지 단계 1을 반복한다.

Page 55: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

47

주의)

1. 초기 해는 구성적 휴리스틱 방법을 사용하여 구할 수 있다.

2. 한 노드에 연결된 두 에지는 제거될 수 없다.

3. 두 에지를 제거했을 때 새로운 두 에지를 선택하는 방법은 단 하나 존재한다. 유효

한 해에서 (t1, t2), (t3, t4)를 제거한다면 새로운 에지는 (t1, t3), (t2, t4)이다(그림 4-3).

4. 단계 1에서 제거 가능한 에지 쌍의 수는 nCn −2 이다.

v1 v2 v3 v4 v5

[그림 4-3] 2-OPT에서의 두 에지 제거, 두 에지 삽입

예제) [그림 4.1]의 예제에서 A→B→D→C→E→A라고하자. 총거리는 130이다. 이 해에서에지

들의 거리는 다음과 같다.

(B, D) : 45 (D, C): 30 (C, E): 25 (E, A): 20 (A, B): 10

5개의 에지들을 두개씩 묶는 방법의 수는 25C – 5 = 5이다. 이 중 큰 거리를 갖는 두 에지를

선택한다. 단, 새로운 해의 총 거리는 130 보다 작아야 한다.

1) (B, D), (C, E) 제거

새로운 해는 A→B→C→D→E→A로서 총거리는 85이다. 이해에서 에지들의 거리는 다

음과 같다.

(C, D): 30 (B, C): 20 (E, A): 20 (A, B): 10 (D, E): 5

이 새로운 해에 대해 다음 절차를 수행한다.

2) (C, D), (E, A) 제거

새로운 해는 A→B→C→E→D→A로서 총거리는 95이다. 85보다 크므로 무시한다.

3) (D, A), (C, E) 제거

새로운 해는 A→E→D→C→B→A로서 총거리는 85이다. 1)의 값과 같다.

4) (A, D), (E, C)제거

새로운 해는 A→E→D→C→B→A로서 총거리는 85이다. 1)의 값과 같다.

결국 예전의 대안이 반복되고 향상되지 않으므로 A→B→C→D→E→A를 해로 생성한다.

4.4.2.2 3-OPT 교환

3-OPT 교환은 유효한 해에 포함된 최대 세 에지를 제거하고 새로운 에지를 형성하는 방법

이다. 절차는 다음과 같다.

Page 56: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

48

알고리즘: ThreeOptTSP

입력: 그래프 ( , )G V A= , 에지의 거리 njnied ij ,,2,1.,2,1),( ==

처리:

단계 0: 초기 해를 구한다.

단계 1: 해에서 최대 3 에지를 제거하고, 새로운 해를 구한다. (가장 큰 향상을 가져오

는 에지들을 제거)

단계 2: 더 이상의 향상이 없을 때 까지 단계 1을 반복한다.

주의)

1. 초기 해는 구성적 휴리스틱 방법을 사용하여 구할 수 있다.

2. 3 에지를 제거했을 때 새로운 3 에지를 선택하는 방법은 4가지가 있다(그림 4-4)..

3. 두 에지의 제거는 2-OPT 경우와 같다.

두 에지를 제거하는 2-OPT 알고리즘에 부가하여 3 에지를 제거하는 경우를 포함한다.

v1 v2 v3 v4 v5 v6

v1 v2 v3 v4 v5 v6

v1 v2 v3 v4 v5 v6

v1 v2 v3 v4 v5 v6

[그림 4-4] 3-OPT에서의 3 에지 제거, 3 에지 삽입

예제) [그림 1.1]의 예제에서 초기해를 A→B→C→D→E→A라고 하자. 총거리는 85이다. 3-OPT

에서는 최소한의 노드가 6개 이상이 필요하므로 노드 F를 추가해야한다. 예제에서 초기해를

A→B→C→D→E→F→A로 수정한다(그림 1-5).

1의 새로운 해는 A→D→E→B→C→F→A 이다.

2의 새로운 해는 A→D→E→C→B→F→A 이다.

3의 새로운 해는 A→C→B→E→D→F→A 이다.

4의 새로운 해는 A→E→D→B→C→F→A 이다.

Page 57: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

49

A B C D E F

A B C D E F

A B C D E F

A B C D E F

I

2

3

4

[그림 4-5] 노드 F가 추가된 3 에지 제거, 3 에지 삽입

새로운 4가지의 해의 거리를 구하여 초기해보다 적은 거리가 최적해가 된다. 초기해보다

적은 거리가 나오지 않을 경우 초기해가 최적해가 된다.

4.4.2.3 노드 교환(Node exchange)

이전의 방법에서는 에지에 대한 제거, 삽입을 수행하였으나, 대신에 두 노드를 교환할 수 있

다. 해는 노드를 순서화하여 정의하였다고 하자. 절차는 다음과 같다.

알고리즘: NodeExchangeTSP

입력: 그래프 ( , )G V A= , 에지의 거리 njnied ij ,,2,1.,2,1),( ==

처리:

단계 1: 노드의 순서로 정의된 임의의 초기해를 생성한다.

단계 2: 가장 나쁜 위치에 있는 두 노드를 서로 교환한다.

⚫ 해의 부분적인 노드 순서 ),,( kji vvv 에 대해 deviation )( jvdev 를 구한다.

⚫ )( jvdev 를 감소순으로 정렬한다.

⚫ 가장 큰 )( jvdev 를 가지는 둘을 선택한다.

단계 3: 더 이상의 향상이 없을 때 까지 단계 2)를 반복한다.

예제) [그림 4-1]의 문제를 풀어보자. 초기해는 A→B→C→D→E→A로 총거리는 300이다. 노

드 순서에 대한 deviation 계산을 위한 표는 아래와 같다.

Page 58: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

50

[표 4-4] 노드 교환 방법

A B C D E 평균

A 0 60 65 55 70 62.5

B 60 0 50 85 95 72.5

C 65 50 0 80 75 67.5

D 55 85 80 0 40 65

E 70 95 75 40 0 70

평균 62.5 72.5 67.5 65 70

[표 4-4]로부터 다음의 deviation을 구한다.

(A,B,C): d(AB) + d(BC) – IN(B) – OUT(B) = 60 + 50 – 72.5 – 72.5 = -35

(B,C,D): d(BC) + d(CD) – IN(C) – OUT(C) = 50 + 80 – 67.5 – 67.5 = -5

(C,D,E): d(CD) + d(DE) – IN(D) – OUT(D) = 80 + 40 – 65 – 65 = -10

(D,E,A): d(DE) + d(EA) – IN(E) – OUT(E) = 40 + 70 – 70 – 70 = -30

(E,A,B): d(EA) + d(AB) – IN(A) – OUT(A) = 70 + 60 – 62.5 – 62.5 = 5

1) 가장 큰 devation을 갖는 (E, A, B), (B, C, D)를 선택하여 A와 C를 교환한다.

새로운 해는 C→B→A→D→E→C로 총거리는 280이다.

다시 deviation을 구한다.

(C,B,A): d(CB) + d(BA) – IN(B) – OUT(B) = 50 + 60 – 72.5 – 72.5 = -35

(B,A,D): d(BA) + d(AD) – IN(A) – OUT(A) = 60 + 55 – 62.5 – 62.5 = -10

(A,D,E): d(AD) + d(DE) – IN(D) – OUT(D) = 55 + 40 – 65 – 65 = -45

(D,E,C): d(DE) + d(EC) – IN(E) – OUT(E) = 40 + 75 – 70 – 70 = -25

(E,C,B): d(EC) + d(CB) – IN(C) – OUT(C) = 75 + 50 – 67.5 – 67.5 = -10

2) 가장 큰 deviation을 갖는 (B.A.D)와 (E,C,B)를 선택하여 A. C를 교환한다. 새로운 해

는 A→B→C→D→E→A로 총거리는 300이다. 이전의 총거리인 280보다 크므로 다른

대안을 찾는다.

3) A, E 교환: C→B→E→D→A→C:

4) E, C 교환: E→B→A→D→C→E:

5) B, A 교환: C→A→B→D→E→C:

6) B, C 교환: B→C→A→D→E→B

7) D, C 교환: D→B→A→C→E→D

8) A, D 교환: C→B→D→A→E→C

9) B, E 교환: C→E→A→D→B→C

10) D, E 교환: C→B→A→E→D→C:

11) B, D 교환: C→D→A→B→E→C:

어느 교환도 해의 향상을 갖고 오지 않으므로 C→B→A→D→E→C 를 해로 생성한다.

Page 59: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

51

4.5 최소걸침나무를 이용한 방법

(1-Tree Lagrangean relaxation) Held and Karp, 1970.

라그랑지안 완화를 이용하여 TSP 문제의 해를 구하는 방법 중의 하나는 5장에서 설명될 최

소걸침나무를 이용하는 방법이다. 절차는 다음과 같다.

알고리즘: MstTSP

입력: 그래프 ( , )G V A= , 에지의 거리 njnied ij ,,2,1.,2,1),( ==

증가값 K, 반복 수 m

처리:

단계 0: 모든 노드 iv 에 대해 0=ip

단계 1: jiijij ppdD ++='

단계 2: 그래프의 한 노드, 1n 을 제외한 나머지 노드들에 대해 최소걸침나무를 구한다

(보통 시작 노드를 1n 으로 한다).

단계 3: 최소걸침나무와 1n 간의 가장 적은 거리를 갖는 두 에지를 연결하여 1-tree를

구한다. 총 거리 = 1-Tree의 거리 – 2 ( ip 의 합)

단계 4: 1-tree가 해밀토니안 서킷을 이루면 정지한다.

단계 5: 각 노드에 대해 차수를 구한다.

1) 차수가 2 보다 크면 kpp ii +=

2) 차수가 2보다 적으면 kpp ii −=

단계 6: 만약, 총 거리가 감소한지 m 반복이 지나면 k를 반으로 줄인다. 단계 1)로 간

다.

예제) 증가값을 4로 하고, 반복수를 2로 하여 이전의 예를 풀어보자. 시작 노드를 E로 하여

나머지 노드들을 대상으로 최소걸침나무를 구한 후 노드 E와 최소걸침나무 간의 최소거리

를 갖는 두 에지를 선택하면 [그림 4-5]와 같이 총거리 275로 유효한 투어가 아니다. 노드 A

의 차수는 3, 노드 C의 차수는 1인 것을 감안하여 단계 1에서 새로운 거리를 구한다(표 4-5).

A B

EC

D

60

5070

40

55

[그림 4-6] 유효한 해가 아닌 1-트리

Page 60: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

52

[표 4-5] 새로운 거리 계산

A B C D E

노드의 P 4 0 -4 0 0

A - 64 65 59 74

B - 46 85 95

C - 76 71

D - 40

E -

다시 노드 E를 제외한 나머지 노드들을 대상으로 단계 2, 3에서 1-tree를 구하면 그림 4-6과

같다. 총거리는 280으로 유효한 투어이다. 따라서, 단계 4에서 종료한다.

A B

EC

D

64

46

40

59

71

[그림 4-7] 유효한 해를 나타내는 1-트리

4.6 시뮬레이티드 애닐링

시뮬레이티드 애닐링(Simulated Annealing: SA) 알고리즘은 열탕에서의 유리결정을 만드는 물

리적 생성과정을 컴퓨터 상에서 모의 실험하는 것에서 유래한 휴리스틱 최적화 기법이다.

SA에 기초한 알고리즘은 한 해에서 이웃해로의 이동에 대한 선택을 랜덤으로 함으로써 국

부 최적해(local minima)로부터 탈피하는데 목적을 둔다. 알고리즘의 각 반복에서 이동을 랜

덤으로 선택하기 위하여 우선 비용의 변화를 계산한다. 만약, x에서 y로의 이동을 고려하고

있고, 비용의 변화가 다음과 같다고 하자.

)(ˆ)(ˆ),(ˆ xfyfyxf −=

이동은 다음의 확률로 선택된다.

)/),(ˆexp( cyxf−

Page 61: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

53

여기서 c는 온도이다. 높은 c값에서는 채택확률이 거의 1에 가까워 이동이 선택될 확률은

커진다. 낮은 c값에서는 큰 향상을 가져오는 경우에 만 채택된다. SA 알고리즘은 우선 높은

c값에서 시작하여 천천히 온도를 낮춘다. 이 과정을 냉각 스켸듈(cooling schedule) 이라고 부

른다. 냉각 스켸듈은 문제의 성격에 따라 달라진다. 일반적으로 사용하는 선형형태의 냉각

스켸듈은 다음과 같다.

10

)1(1

−=+

kk cc

구체적인 알고리즘은 다음과 같다.

알고리즘: SATSP

단계 0: k = 1, )(kL , N을 초기화

초기 해 x 결정, 가장 좋은 해 z = x

단계 1: 다음 절차를 )(kL 번 반복한다.

1) 이웃해 y를 생성한다.

2) 만약, )()( xfyf 이면 x = y

아니고 만약 ))(/),(ˆexp( kcyxf− >random[0, 1] 이면 x = y

만약 )()( zfxf 이면 z = x

단계 2: k = k + 1

만약 k > N이면 정지하고, 아니면 단계 1로 간다.

이 알고리즘에서 주어져야 할 중요한 파라미터 값은 )(kL , N, )(kc 이다. 이미 언급했듯이

이 값들은 문제에 특성에 따라 결정되어야 한다. TSP 문제에서 제안된 한 경우를 소개하면

다음과 같다.

1) )(kc 의 초기치는 대부분의 이동이 채택될 정도로 커야 한다. 선형형태의 냉각 스켸

듈에서 99.018.0 − 로 하고, 초기치 )1(c 의 값은 1, 2, 5, 또는 20으로 한다.

2) )(kL 의 값은 모든 k에 대해 동일하게 총 도시의 수로 한다.

3) N의 값은 150으로 한다.

이들 파라미터 외에 고려하여야 할 중요한 결정은 이웃해를 생성하는 메커니즘이다. 어떠한

방법으로 이웃해를 생성할까? TSP 문제의 경우는 향상적 휴리스틱 방법에서의 생성 방법을

사용할 수 있다. 현재의 해에서 이웃해를 생성하는 몇 가지 예를 들면 다음과 같다.

⚫ 현재의 해에서 임의의 두 노드를 선택하여 서로 위치를 바꾼다.

⚫ 현재의 해에서 임의의 한 노드를 선택하여 이를 임의의 위치에 놓는다.

⚫ 현재의 해에서 임의의 두 노드를 선택하여 두 노드 간의 경로를 해의 맨 앞에 위치

토록 한다.

⚫ 현재의 해에서 임의의 두 노드를 선택하여 두 노드 간의 경로를 거꾸로 놓는다.

⚫ 현재의 해에서 가장 나쁜 두 아크를 제거하고, 새로운 해를 구한다(2-OPT)

예제) 이전의 예에서 SA를 이용하기 위한 파라미터 값이 다음과 같다고 하자.

Page 62: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

54

9.0

20

1

1

=

=

+ kk cc

c

이웃해를 생성하는 방법은 임의의 두 도시를 선택하여 위치를 바꾼다고 하자. 3번의 반복을

사용하고, 각 반복에서 3회의 계산을 한다고 하자. [표 4-6]은 실행된 결과를 나타낸다.

초기해는 A→B→C→E→D→A로 총거리는 95이다. 1번째 반복의 1번째 계산에서의 이웃해

A→D→E→C→E→A는 초기해의 A를 제외한 나머지 4개 도시 중 임의로 선택된 두 도시 B

와 D의 위치를 서로 바꾸어 생성된 것으로 총거리는 95이다. 따라서 이전의 해와 같다. 이

해가 채택될 확률은 120/)9595( =−−e 로 생성된 난수 0.228 보다 크므로 현재해로 채택한다. 3

번째 계산에서의 후보해는 현재 해인 초기해에서 임의의 두 도시의 위치를 바꾼 것이다. 생

성된 난수의 값이 0.085로 채택될 확률 0.78 보다 작다. 따라서, 이 해를 현재 해로 한다. 2번

째 반복의 3번째 계산에서의 후보해 A→E→D→C→B→A는 현재해 A→C→D→E→B→A에서

두 도시 C, E의 위치를 바꾼 것으로 총거리는 85이다. 이 값은 현재해의 총거리 90보다 작

으므로 무조건 이 해를 현재해로 한다. 표의 후보해 열에서 굵은 체로 표시된 것은 현재해

로 채택된 해임을 나타낸다. 3번의 반복과 각 반복에서 3번의 계산을 한 결과 가장 좋은 해

는 A→E→D→C→B로 총거리는 85임을 알 수 있다.

[표 4-6] 시뮬레이티드 애널링 결과

반복 계산

번호

해 총거리 가장 좋은 해 가장 좋

은 총거

채택 확률 난수

0 (A,B,C,E,D) 95 (A,B,C,E,D) 95

1 1 (A,D,E,C,B) 95 (A,D,E,C,B) 95 e

−(95−95)20=1

0.228

2 (A,D,C,E,B) 130 (A,D,E,C,B) 95 e

−(130−95)20=0.17

0.572

3 (A,C,E,D,B) 100 (A,D,E,C,B) 95 e

−(100−95)20=0.78

0.085

2 1 (A,C,E,B,D) 140 (A,C,E,D,B) 100 e

−(140−100)18=0.11

0.885

2 (A,C,D,E,B) 90 (A,C,E,D,B) 100 e

−(90−100)18=1.74

0.885

3 (A,E,D,C,B) 85 (A,C,D,E,B) 100 e

−(85−90)18=1.74

0.885

3 1 (A,E,B,C,D) 135 (A,E,D,C,B) 85 e

−(135−85)16.2=0.046

0.681

2 (A,E,D,B,C) 110 (A,E,D,C,B) 85 e

−(110−85)16.2=0.21

0.510

3 (A,D,E,C,B) 95 (A,D,E,B,C) 85 e

−(95−85)16.2=0.54

0.988

Page 63: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

55

4.7 타부 서치(Tabu Search)

타부 서치는 부분 최적해(local optima)에 빠지지 않도록 단기 메모리(short-term memory)를 이

용하는 최적화 방법이다. 타부 리스트(tabu list)는 최근의 해를 추적할 수 있는 단기 메모리

역할을 한다. 최적화 과정의 각 반복에서 생성된 해는 타부 리스트의 해와 비교되어 리스트

에 있는 해일 경우에는 선택되지 않도록 한다. 이러한 타부 리스트는 타부 탐색의 핵심이며,

탐색 과정에서 발생할 수 있는 사이클링(동일한 후보해 생성을 반복하는 것)을 방지하는 역

할을 한다.

타부 리스트는 크기가 고정되어 있는 리스트 구조를 갖는다. 리스트에 저장되는 정보는

문제에 따라 상이할 수 있다. TSP의 경우에는 일반적으로 최근에 생성된 해 보다는 함축적

인 정보인 최근에 탐색된 상태를 저장한다. 예를 들어, 이웃해를 생성하는 방법이 임의의 두

도시에 대한 순서를 바꾸는 것이라면 순서가 바뀌는 두 도시를 타부 리스트에 저장한다.

타부 탐색의 각 반복에서 생성되는 후보해는 steepst-descent 방법에 의하며 타부 리스트

에 있지 않는 해를 원칙으로 한다. 타부 리스트에 없는 해 만을 선택할 수 도 있으나, 타부

리스트에 있는 해 일지라도 매우 우수한 경우에는 이를 허용하는 것이 좋을 수도 있다. 이

러한 허용 조건을 aspiration criterion이라고 한다. 각 단계에서 생성된 이웃해 중 가장 좋은

이웃해에 대해 다음과 같은 경우가 발생한다.

1. 타부 리스트에 없고, 지금까지의 가장 좋은해 보다도 좋다.

2. 타부 리스트에 없고, 지금까지의 가장 좋은 해보다는 나쁘다.

3. 타부 리스트에 있고, 지금까지의 가장 좋은 이웃해 보다도 좋다.

4. 타부 리스트에 있고, 지금까지의 가장 좋은 해보다도 나쁘다.

1, 2번 경우에는 이웃해를 현재해로 하는 것이 타당하다. 3번 경우에는 비록 이웃해가 타부

리스트에 있을지라도 보다 좋은 해 이므로 이를 현재해로 선택하는 것이 좋을 수 있다. 이

전의 탐색 상태와 동일하나, 이전의 해 보다는 다른 해이기 때문이다. 이는 타부 리스트가

완전한 해를 저장하는 것이 아니라 일부 탐색 정보 만을 저장하기 때문이다. 4번 경우에는

가장 좋은 이웃해 대신에 타부 리스트에 없는 해 중 가장 좋은 해를 현재해로 선택하는 것

이 타당하다. 3번 경우에 현재해를 선택하는 방법이 aspiration criterion에 속한다.

2, 4 번 경우에는 선택된 이웃해가 지금 까지의 가장 좋은 해 보다도 나쁜 경우에 속한

다. 그러나, 이웃해가 지금 까지의 가장 좋은해 보다도 좋지 않을 경우에도 이를 현재해로

선택한다. 즉, SA와 마찬가지로 현재 해 보다 좋지 않은 이동일지라도 타부 서치는 이를 허

용할 수 있다.

알고리즘: TSTSP

처리:

단계 0: k = 1, Tabu list, N을 초기화

초기 해 x 결정, 가장 좋은 해 z = x

단계 1: 현재해 x로부터 가장 좋은 이웃해 y를 생성한다. 단, 이웃해를 생성한 상태가

tabu list에 있는 상태가 아니거나 또는 )()( zfyf 이어야 한다. x = y

단계 2: 만약 )()( zfyf 이면 z = y

Tabu list에 현 상태를 넣는다.

Page 64: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

56

k = k + 1

만약 k > N이면 정지하고, 아니면 단계 1로 간다.

예제: 이전의 예를 사용하자. Tabu list 의 크기는 3 이다. 8 번의 반복을 사용하고 각 반복에서

모든 가능한 이웃해를 탐색한다. 이웃해를 탐색하는 방법은 SA 의 예에서와 같이 두 도시의

위치를 바꾸도록 한다. 즉, 현재해에서 도시 A 를 제외한 나머지 4 개 도시에서 두 도시를

선택하는 방법으로 모두 4C2 = 6 가지가 있다. 예를 들어, 현재해가 (A,B,C,D,E)라고 하자. [표

4-7]의 6 가지 이웃해가 존재한다.

Tabu list 는 예전의 해로부터 현재해가 생성되기 위해 선택된 두 도시에 대한 정보를 저장한

다. 8 번의 반복한 결과는 표 4-8 과 같다.

[표 4-7] 이웃해

교환된 도시 이웃해 총 거리

B,C A,C,B,D,E 310

B,D A,D,C,B,E 350

B,E A,E,C,D,B 365

C,D A,B,D,C,E 365

C,E A,B,E,D,C 340

D,E A,B,C,E,D 280

[표 4-8] 타부 서치 결과

반복 후보 해 총거리 가장 좋은 해 가장 좋은 총거리 Tabu list

0 (A,B,C,D,E) 300 (A,B,C,D,E) 300

1 (A,B,C,E,D) 280 (A,B,C,E,D) 280 (D,E)

2 (A,C,B,E,D) 305 (A,B,C,E,D) 280 (D,E), (B,C)

3 (A,C,D,E,B) 340 (A,B,C,E,D) 280 (D,E),(B,C),(B,D)

4 (A,E,D,C,B) 300 (A,B,C,E,D) 280 (B,C),(B,D),(C,E)

5 (A,D,E,C,B) 280 (A,B,C,E,D) 280 (B,D),(C,E),(D,E)

6 (A,D,E,B,C) 305 (A,B,C,E,D) 280 (C,E),(D,E),(B,C)

7 (A,B,E,D,C) 340 (A,B,C,E,D) 280 (D,E),(B,C),(B,D)

8 (A,B,C,D,E) 300 (A,B,C,E,D) 280 (B,C),(B,D),(C,E)

4.8 유전자 알고리즘

4.8.1 유전자 알고리즘의 소개

유전자 알고리즘은 여러 개의 개체가 동시에 병렬적으로 주어진 환경에 따라 적자생존의 방

법으로 진화하여, 궁극적으로 최적의 상태에 도달하는 생태계의 진화이론에서 도입되었다.

이 알고리즘은 여러 개의 개체로 구성된 군집이 진화할 때 구 세대가 얻은 환경에 대한 정

보는 염색체에 저장되어 다음세대로 전달된다. 이 때 조상의 염색체가 그대로 복제되어 자

손에게 전달되는 것이 아니라 조상의 염색체에 교배(crossover), 돌연변이(mutation) 등의 연산

Page 65: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

57

을 가하여 얻은 염색체로 전달된다. 구 세대 중에서 한 개체가 선택되어 자손에게 유전정보

를 남길 확률은 일반적으로 그 개체가 주위환경, 그리고 나머지 개체와 어떻게 상호 작용하

는 가에 의존하는 적응 값(fitness)에 따라 변한다. 일반적으로 개체 값이 좋을수록 자손을

남길 확률이 높아지는 적자생존의 법칙이 적용된다. 이 알고리즘은 여러 가지 종류의 최적

화 문제에 응용되어 좋은 결과를 낳고 있다.

구성요소

⚫ 문제에 대한 부분해의 유전자 표현

⚫ 초기 세대(population)를 생성하는 방법

⚫ Fitness 값에 따라 해를 평가하는 함수(평가함수)

⚫ 자식들을 생성하기 위한 유전자 연산자(genetic operator)

⚫ 파라미터(population 크기, 유전자 연산자를 적용하기 위한 확률 등)

절차

단계 1: 1 세대인 N개의 염색체를 생성한다.

단계 2: 평가값에 따라 구 세대 염색체 중 좋은 형질의 염색체를 N개 선택한다(좋은

형질의 염색체는 중복되어 선택된다).

단계 3: 두 염색체 끼리 짝을 지워 교배(crossover) 연산자에 따라 새로운 자손 세대를

생성한다.

단계 4: 새로운 세대에 대해 전위(inversion), 돌연변이(mutation) 연산을 수행한다.

단계 5: 단계 2)로 간다.

4.8.2 룰렛 휠(Roulette wheel) 방법

위 절차의 단계 2에서 좋은 형질의 염색체를 가급적 많이 갖도록 N개를 선택한다. 가장 많

이 사용되는 방법은 룰렛 휠로 확률변수를 임의로 생성하는 역변환(inverse transformation)방

법과 동일하다. 평가 값이 클수록 좋은 것이라고 가정하면 절차는 다음과 같다.

단계 1: 각 염색체에 대해 평가값( nievali ,2,1, = )를 계산한다.

단계 2: N개 염색체들의 평가값들의 합을 구한다.

==

n

iievalSum

1

단계 3: 각 염색체에 대해 선택될 확률을 구한다.

niSumevalq ii ,2,1,/ ==

단계 4: 단계 3의 누적확률을 구한다.

niqQi

jii ,2,1,

1

===

단계 5: 난수를 생성한다.

niri ,2,1, =

단계 6: 난수에 따라 염색체를 선택한다.

ii QrQ −1 인 i번째 염색체를 선택한다.

Page 66: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

58

교배를 가할 두 염색체를 어떻게 선택하나?

룰렛 휠 방법에 따라 n개의 염색체를 생성한 후 각 염색체를 cp 의 확률로 선택한다. 즉, 평

균 cpn 개의 염색체가 선택되면 이를 하나 하나씩 짝을 지어 총 2/n 개의 짝을 만든다.

각 짝에 대해 교배를 가해 생성된 새로운 두 염색체가 이전의 두 염색체를 대치하도록 한다.

돌연변이를 가할 염색체는 어떻게 선택하나?

N개의 염색체 각각에 대하여 ip 의 확률로 채택한다. 채택되면 돌연변이를 수행한다.

4.8.3 TSP 문제 해결을 위한 유전자 알고리즘

TSP 문제를 해결하기 위해 가장 많이 사용되는 유전자 표현방법은 경로 표현(path

representation)이다. 만약, 1→2→3→4→5→6→7→8→9→1의 해가 있다면 이는 (1,2,3,4,5,6,7,8,9)

로 표현된다. 초기 세대에 해당하는 n개의 염색체들은 임의로 생성될 수 있다(즉, 난수의 발

생에 따라 해의 방문순서를 결정한다). 좋은 형질의 염색체를 선택하기 위하여는 이전에 설

명된 룰렛 휠 방법을 사용할 수 있다. 경로 표현에서 사용되는 교배 연산자와 전위 연산자

를 소개하기로 한다.

PMX(partially-mapped crossover)

짝을 짓는 두 염색체들을 다음과 같다고 하자.

P1 = (1 2 3 4 5 6 7 8 9)

P2 = (4 5 2 1 8 7 6 9 3)

절차

단계 1: 임의의 cut point를 2개 선택한다.

P1 = (1 2 3 | 4 5 6 7 | 8 9)

P2 = (4 5 2 | 1 8 7 6 | 9 3)

단계 2: 두 cut point 사이의 값들을 교환한다.

Q1 = (x x x | 1 8 7 6 | x x)

Q2 = (x x x | 4 5 6 7 | x x)

단계 3: 중복이 되지 않는 예전의 값을 할당한다.

Q1 = (x 2 3 | 1 8 7 6 | x 9)

Q2 = (x x 2 | 4 5 6 7 | 9 3)

단계 4: 나머지 값들을 mapping에 의해 할당한다.

Q1 = (4 2 3 | 1 8 7 6 | 5 9) 4 5 를 예전의 1 8에 할당

Q2 = (1 8 2 | 4 5 6 7 | 9 3) 1 8을 예전의 4 5 에 할당

단계 4에서 두 cut point간의 값 1 8 7 6 과 4 5 6 7 은 6, 7이 중복되고, 1 8, 4 5 가 다르다. 따

라서, 1 8 을 Q2에, 4 5 를 Q1에 차례대로 할당한다.

OX (Order crossover)

짝을 짓는 두 염색체들을 다음과 같다고 하자.

P1 = (1 2 3 4 5 6 7 8 9)

P2 = (4 5 2 1 8 7 6 9 3)

절차

단계 1: 임의의 cut point를 2개 선택한다.

Page 67: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

59

P1 = (1 2 3 | 4 5 6 7 | 8 9)

P2 = (4 5 2 | 1 8 7 6 | 9 3)

단계 2: 두 cut point 사이의 값들을 교환한다.

Q1 = (x x x | 1 8 7 6 | x x)

Q2 = (x x x | 4 5 6 7 | x x)

단계 3: 마지막 cut point 후부터 시작하여 미할당된 값의 순서를 구한 후 이를 상대

염색체에 차례대로 할당한다.

P1에서 미할당된 순서: (9 2 3 4 5)

P2에서 미할당된 순서: (9 3 2 1 8)

Q1 = (3 4 5 | 1 8 7 6 | 9 2)

Q2 = (2 1 8 | 4 5 6 7 | 9 3)

OX는 부모의 염색체가 가지고 있는 유전자의 순서를 중요시 한다.

교환 돌연변이

한 염색체에 대해 두개의 위치를 임의로 선택하여 이들 값의 위치를 바꾼다.

전위 돌연변이

한 염색체에 대해 두개의 위치를 임의로 선택하여 그들 사이의 값들을 꺼꾸로 한다.

4.9 개미 알고리즘

개미 집단 최적화(Ant Colony Opimization)는 먹이를 찾아 이동하는 개미의 행동을 모방한 에

이전트를 이용하여 가장 최적인 경로(가장 최소의 거리를 갖는 경로)를 탐색하는 방법이다.

각 개미는 먹이를 찾기 위해 이동하면서 페로몬(pheromone)을 길에 뿌린다. 뿌리는 페르몬의

양은 최적의 경로에 가까울수록 많아지게 한다. 따라서, 최적의 경로에는 많은 페르몬이 쌓

여있게 되고, 다른 개미가 다시 길을 찾을 때에 페르몬이 많은 길을 확률적으로 선택하게

된다. 이 같은 방법으로 최적의 경로에 수렴하는 길을 점진적으로 찾게 된다. 이전에 설명된

Meta-heuristic 방법인 유전자 알고리즘, 시뮬레이티드 아넬링, 타부 서치등은 improving 방법

에 의해 해를 생성하나, 개미 알고리즘은 constructive 방법에 의해 해를 생성한다.

개미 집단 알고리즘은 TSP 문제에 적용될 수 있다. 다음의 알고리즘은 TSP 문제를 대상으

로하는 Ant System이다.

1 procedure ACO_meta-heuristic()

2 while (termination criterion not satisfied)

3 schedule_activities

4 ants_generation_and_activity();

5 pheromone_evaporation();

6 daemon_actions(); // optional

7 end schedule_activities

8 end while

end procedure

1 procedure ants_generation_and_activity()

2 while (available nodes)

Page 68: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

60

3 schedule_the_creation_of_a_new_ant();

4 new_active_ant();

end while

end procedure

1 procedure new_active_ant()

2 initialize ant();

3 M= update ant memory();

4 while (current state != target state)

5 A = read local ant-routing table();

6 P = compute transition probabilities(A;M;Ω);

7 next state = apply ant decision policy(P;Ω);

8 move to next state(next state);

if (online step-by-step pheromone update)

9 deposit pheromone on the visited arc();

10 update ant-routing table();

end if

11 M= update internal state();

12 end while

if (online delayed pheromone update)

13 foreach visited arc ∈ ψ do

14 deposit pheromone on the visited arc();

15 update ant-routing table();

16 end foreach

end if

17 die();

18 end procedure

TSP 문제의 경우에서 각 아크에 페로몬의 양이 설정되고, 페로몬의 양은 세가지 방법으로

수정될 수 있다.

⚫ Online update step-by-step pheromone update

⚫ Online delayed pheromone update

⚫ Pheromone evaporation

위 알고리즘에서 각 개미는 먹이가 있는 길을 점진적으로 찾아가고, 방금 지나온 길(아크)에

페로몬을 뿌릴 수 있다. 이는 online step-by-step 수정에 속한다. 하나의 개미가 TSP문제의

유효한 해를 구한 후에 해의 path에 속하는 모든 아크들에 대해 한꺼번에 페로몬을 수정할

수 있다. 이는 online delayed pheromone 수정에 속한다. Pheromone evaporation은 한번의

반복에서 모든 개미가 각자의 유효한 해를 구한 후 각 아크의 pheromone을 수정한다.

Ant Colony System에서는 하나의 아크를 선택함으로써 야기되는 수행척도를 구하기 어려워

online step-by-step 수정을 수행하지 않고, 하나의 path를 구한 후 이 path의 총거리를 이용하

여 online delayed pheromone 수정을 수행한다

Page 69: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

61

5 장 그래프 칼라링

5.1 그래프 칼라링 문제

그래프 G의 K-칼라링은 노드 집합 )(GV 에 1 부터 K까지의 정수를 붙이는 것으로 인접하고

있는 노드들에는 서로 다른 정수가 붙어야 한다는 조건을 갖는다. 이는 각 노드들에 색을

칠하는 것과 동일하다. 단, 인접하고 있는 노드들에는 서로 다른 색을 칠하여야 한다. K개의

색으로 그래프를 칠할 수 있다면 이를 K-colorable이라고 한다. 또한, 가장 적은 수의 색 또

는 최소의 정수 K를 chromatic number 또는 vertex chromatic number(VCHR)라고 부른다. [그림

5-1]은 4개의 색으로 노드들을 색칠한 결과를 보여준다.

1

1

2 233

4

[그림 5-1] 그래프 칼라링

K값에 대한 그래프 칼라링의 많은 이론들은 다소 어렵다. 그러나, 특수한 그래프에서의 K값

은 쉽게 구할 수도 있다. 예를 들어, 완전 그래프 ),( EVG 에서는 K값이 V 가 됨을 쉽게 알

수 있다. 완전 그래프가 아닐 경우의 K값에 대한 정리 중 하나는 다음과 같다.

정리 (최대한계)

만약 연결된 그래프 ),( EVG 가 완전 그래프도 아니고, 하나의 사이클도 아니라면 chromatic

number는 다음 식을 만족한다.

)max()( GGVCHR

위식에서 max(G)는 노드의 최대 차수를 의미한다.

위 정리는 증명하기가 쉽지 않다. 그러나, 다음 관계는 쉽게 증명할 수 있다.

Page 70: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

62

1)max()( + GGVCHR

즉, 그래프 G에서 노드들을 하나씩 찾아 인접하는 노드의 색과 다른 색을 칠한다. 최대

max(G) + 1 개의 색이 있으면 이러한 색칠은 항상 가능하다.

5.2 최소의 색을 사용한 칼라링 해를 구하는 방법

최소의 색으로 모든 노드들을 색칠하는 그래프 칼라링 문제는 NP-Complete 문제에 속한다.

따라서, 최적해를 구하는데 많은 시간이 걸려 큰 문제에서는 경험적 방법을 사용한다.

5.2.1 Backtrack 알고리즘

그래프 ),( EVG 의 모든 유효한 칼라링 해를 찾기 위한 방법으로는 backtrack 을 이용한

implicit enumeration 이 있다. 노드들을 1 부터 V 까지 번호를 매기고, 벡터 VCR(|V|)에 노드

들의 색을 저장하자. Backtrack 단계에서 VCR(i)는 노드 i 에 할당된 색을 의미한다. 초기에 1

번 노드를 제외한 모든 노드의 VCR 을 0 으로 놓는다. 1 번 노드의 색은 1 로 고정시키고,

번호를 1 증가시켜 해당 번호의 노드에 색을 칠한다. 이때 인접하고 있는 노드들의 색과 다

른 색을 칠한다. K 개의 색이 주어졌다고 하자. 각 노드에 색을 칠할 때 다음 4 가지 경우가

발생한다.

1) 색칠이 성공하면 다음 단계로 넘어간다.

2) 더 이상의 색이 남아있지 않아 색칠이 실패하면 노드 i-1의 색을 다른 색으로 칠한

다(backtrack).

3) 두번째 노드에서 색칠이 실패하면 색칠을 끝낸다.

4) 마지막 노드에서 색칠이 성공하면 모든 노드의 색을 출력하고, 마지막 노드의 색을

다른 색으로 칠한다.

이 방법으로 모든 가능한 해를 구할 수 있다.

4

32

5

1

[그림 5-2] 칼라링 그래프

Page 71: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

63

[그림 5-2]의 그래프에 3가지 색으로 backtrack 방법을 적용해 보자. 노드에 색을 칠할 때 색

칠 가능한 유효한 색 중 가장 빠른 번호의 색을 칠하는 방법을 적용하였다.

일부 절차 만을 [표 5-1]에 나타내었다.

[표 5-1] Backtrack 절차

단계 노드1 노드2 노드3 노드4 노드5 비고 해

0 1 0 0 0 0 성공

1 1 2 0 0 0 성공

2 1 2 3 0 0 성공

3 1 2 3 1 0 성공

4 1 2 3 1 2 성공 (1,2,3,1,2)

5 1 2 3 3 0 Backtrack

6 1 2 3 3 1 성공 (1,2,3,3,1)

7 1 2 3 3 2 성공 (1,2,3,3,2)

8 1 3 2 0 0 Backtrack

9 1 3 2 1 0 성공

10 1 3 2 1 3 성공 (1,3,2,1,3)

[표 5-1]의 단계 4에서 하나의 유효한 해는 3가지 색으로 칼라링을 할 수 있음을 나타낸다.

단계 5에서는 노드5의 색을 1,2,3을 제외한 4로 할 수 있으나 색의 수는 4가 되어 이전의 색

의 수 보다 크게 된다. 따라서, 이를 실패로 인식하여 backtrack 한다. 다음에는 노드 4의 색

을 3으로 바꾼다.

만약 그래프가 완전 그래프라면 색의 수는 노드의 수 – 1이 되어 모든 칼라링 해는 (n-1)!개

존재한다.

5.2.2 구성적 방법 (constructive heuristic method)

색칠이 안된 노드들을 대상으로 한번에 하나의 노드들을 색칠하는 과정을 모든 노드들에 대

한 색칠이 끝날 때 까지 반복한다. 이 방법에서 어느 노드를 우선적으로 선택하여 색칠하는

가 하는 문제를 해결하여야 한다. 일반적으로 사용하는 노드 선택 방법에는 다음과 같은 3

가지가 있다.

1) largest-first ordering

2) smallest-last ordering

3) incidence degree ordering

Largest-first ordering은 주어진 그래프에서 degree가 가장 큰 노드를 1순위로 하고, 이 노드를

그래프에서 제거한다. 수정된 그래프에서 가장 큰 degree를 갖는 노드를 그 다음 순위로 한

다. 이러한 절차를 반복하여 모든 노드들에 대한 우선순위를 매긴다.

Smallest-last ordering은 주어진 그래프에서 degree가 가장 작은 노드를 n순위로 하고, 이 노드

를 그래프에서 제거한다. 수정된 그래프에서 가장 작은 degree를 갖는 노드를 n-1순위로 한

다. 이러한 절차를 반복하여 모든 노드들에 대한 우선순위를 매긴다.

Page 72: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

64

Incidence degree ordering은 주어진 그래프에서 모든 노드들에 대한 degree를 구하여 가장 큰

degree를 갖는 노드 순으로 우선순위를 매긴다.

한 노드를 선택하여 어느 색을 색칠하여야 하는 문제는 간단하게 해결할 수 있다. 그 노드

에 인접한 노드들의 색을 조사하여 사용이 안된 가장 낮은 번호의 색을 칠한다.

[그림 5-2]의 그래프를 largest-first ordering에 의해 색을 칠해보자. 색을 칠하는 노드들의 순서

는 [표 5-2]에서와 같이 (2, 3, 4, 1, 5)이다. 3가지 색을 사용하여 칼라링됨을 나타내며 [그림 5-

3]은 색칠된 결과의 그래프이다.

[표 5-2] Largest-first ordering

노드 색번호 색

2 1 Red

3 2 Green

4 2 Green

1 3 Blue

5 1 Red

4

32

5

1

[그림 5-3] 그림 5-2에 대한 칼라링 해

5.2.3 향상적 방법 (Improving heuristic)

초기에 하나의 유효한 해를 구한 후 이를 보다 좋은 해로 바꾸는 방법으로 더 이상의 향상

이 없을 때 까지 절차는 반복된다. 이러한 방법을 보통 로컬 탐색 (local search) 방법이라 일

컫는다.

그래프 칼라링 문제에서 향상 방법을 적용하기 위하여 현재해에 대한 이웃해(neighborhood

solution)를 구할 수 있어야 한다. 그러나, 이웃해를 구하기 위하여 TSP문제에서는 다양한 방

법을 사용할 수 있었으나, 그래프 칼라링 문제에서는 매우 제한적이다. 한 방법으로는 1-

exchange가 있다. 이는 한 노드를 선택하여 다른 색으로 칠한다. [그림 5-3]의 해를 (3,1,2,2,1)

Page 73: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

65

로 표현하자. 즉, 1번 노드는 3번 색, 2번 노드는 1번 색으로 칠한 해를 나타낸다. 이 해에서

1-exchange에 의한 모든 가능한 이웃해를 구해보자. 현재 해의 최대 색 수는 3이므로 각 노

드의 색 번호를 1, 2, 3 중 하나로 바꾸어 유효한 해 만을 선택하면 다음 두 가지 해가 생성

된다.

(3,1,2,3,1)

(3,1,2,2,3)

어느 해도 총 색의 수가 감소하지 않으므로 더 이상의 절차를 반복하지 않고 현재해를 국부

최적해로 결정한다.

5.3 그래프 칼라링 응용 문제

5.3.1 스켸듈링

다음과 같은 스켸듈링 문제를 고려하자. 기말고사 시간표를 작성하는데 학생들은 하루에 최

대 한 과목씩 만을 시험볼 수 있도록 배려한다. 즉, 한 학생이 두개 이상의 과목을 수강할

때 이들 과목의 시험은 서로 다른 날로 배정한다. 다음 표는 동일한 학생이 동시에 수강하

는 과목을 나타낸다.

[표 5-3] 스켸듈링을 위한 수강과목

C1 C2 C3 C4 C5 C6 C7

C1 * * * * *

C2 * * *

C3 * * *

C4 * * * *

C5 * *

C6 * * * *

C7 * * *

예를 들어, 두 과목 C1, C2는 동일한 학생이 수강하고, C1과 C5는 그렇지 않다. 따라서, C1과

C2는 서로 다른 날로 배정하여야 하나, C1과 C5는 같은 날에 배정해도 무방하다. 위의 표를

그래프로 표현하면 [그림 5-4]와 같다.

Page 74: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

66

4

3

2

5

1

6

7

[그림 5-4] 스켸듈링을 위한 그래프

이 그래프의 칼라링 결과는 그림 5-5와 같다.

4

3

2

5

1

6

7

[그림 5-5] 스켸듈링 해

5.3.2 모바일 통신 네트워크에서의 채널 할당 문제

모바일 통신 네트워크는 서비스 지역을 여러 작은 지역인 셀로 나누어 각 셀에 기지국(Base

station)을 설치한다. 각 셀에 위치한 다수의 모바일 사용자인 이동국(Personal station)을 위해

각 채널을 할당한다. 한 셀에서 사용할 수 있는 채널의 수는 한정되어 있고, 더욱이 인접한

셀에서 동일한 채널을 사용할 경우 전파의 간섭 효과로 인해 서비스의 질이 떨어진다.

한 셀에서 하나의 채널 만을 사용한다고 하자. 인접한 셀에서 동일한 채널을 사용할 경우

Page 75: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

67

간섭이 발생하므로 서로 다른 채널을 사용하여야 한다. [그림 5-6]은 서비스 지역을 가상적인

6각형 모양의 셀로 분할한 것을 나타낸다. 이러한 셀 구성에서 최소의 채널을 사용하여 각

셀에 채널을 할당한다.

4

514 1

61516

31312

2

78

109

11

[그림 5-6] 모바일 네트워크 셀 구성

[그림 5-6]의 셀 구성을 그래프로 표현한 것이 [그림 5-7]이고, 해를 구한 것이 [그림 5-8]로

4개의 채널을 사용하였다.

11

12

3

10

9

2

8

7

13

4

14

15

5

1

16

6

[그림 5-6] 모바일 네트워크의 그래프 표현

Page 76: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

68

11

12

3

10

9

2

8

7

13

4

14

15

5

1

16

6

[그림 5-7] 모바일 네트워크의 채널할당

Page 77: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

69

6 장 최소 걸침나무와 사이클

6.1 최소 걸침 나무

최소 걸침나무(Minimal Spanning Tree)는 주어진 가중 그래프에서 모든 노드를 포함하는 트리

중 아크의 총 거리를 최소화하는 트리를 찾는 문제이다. 그림 6-1의 가중 그래프에서 최소

걸침 나무를 구해보자.

P T

Q

S

R

3

4

9

1

1

9

8

5

[그림 6-1] 최소 걸침 나무 문제

최소 걸침나무는 5개의 노드와 굵은 실선의 아크로 구성된 트리로서 총거리는 10이다.

6.1.1 크루스칼(Kruskal)의 알고리즘

가장 처음 이 문제의 해를 구하는 방법을 제안한 사람은 크루스칼로서 그의 알고리즘은 매

우 간단하다.

알고리즘: KruskalMST

입력: 그래프 ),( EVG = , 아크의 거리 )(ed

절차:

단계 0: i = 1, T = 0

단계 1: 다음 조건을 만족하는 아크 중 최소의 )(ed 를 갖는 아크를 선택한다.

1) TEe −=

2) eT 는 acyclic(cycle이 아닌 것)이다.

만약 위 조건을 만족하는 아크가 없다면 정지한다.

그렇지 않다면 e를 T에 넣는다.

단계 2: 1+= ii , 단계 1로 간다.

크루스칼의 알고리즘은 최소 걸침 나무 문제의 최적해이다. 크루스칼의 알고리즘이 최적해

를 생성할 수 있다는 증명은 참고문헌을 참조하라.

크루스칼의 알고리즘을 수행하기 위해 우선 아크들을 거리의 증가 순으로 정렬하는 것이 좋

Page 78: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

70

다. 알고리즘은 정렬된 아크들의 리스트에서 아크를 하나씩 꺼내 T에 포함될지를 결정한다.

이 결정에서 중요한 것은 아크를 포함함으로써 사이클이 있게 되는지를 조사하여야 하는 것

으로 그 아크를 포함하는 사이클의 존재여부를 검사하여야 한다.

예제) [그림 6-1]의 가중 그래프에 크루스칼의 알고리즘을 적용해 보자. 우선, [표 6-1]에서와

같이 모든 아크를 거리 순으로 정렬하자.

[표 6-1] 거리 순으로 정렬된 아크

노드1 노드2 거리

Q T 1

S T 1

P Q 3

P T 4

R S 5

Q R 8

Q S 9

P S 9

가장 적은 거리의 아크 부터 하나씩 선택하여 사이클을 이루지 않는 한 트리를 생성한다.

(Q, T), (S, T), (P, Q)는 차례 대로 선택된다. 그러나 (P, T)를 추가할 경우 사이클이 발생된다.

따라서, 이를 선택하지 않고, 다음의 (R, S)를 선택한다. 기 선택된 아크의 수는 노드의 수 –

1(5 – 1 = 4)이므로 이미 트리가 생성됨을 알 수 있다. 따라서, 더 이상의 절차는 필요가 없다.

즉, 최소 걸침 나무의 아크는 (Q, T), (S, T), (P, Q), (R, S)이다.

사이클의 존재 조사

크루스칼의 알고리즘에서는 한 아크의 추가로 인해 그래프에서 사이클이 존재하게 되는지를

조사하여야 한다. 어느 한 아크 ),( ji vve = 를 추가했을 때 사이클의 존재 여부를 조사하는

방법을 생각해 보자. 아크를 추가하기 전의 그래프에는 사이클이 없다. 만약, 두 노드 iv 와

jv 가 모두 그래프에 포함되어 있지 않다면, 아크의 추가로 인한 사이클은 발생하지 않는다.

또한, 두 노드 중 어느 한 노드 만 그래프에 포함되어 있다면, 역시 아크의 추가로 인한 사

이클은 발생하지 않는다. 사이클이 발생할 여지가 있는 경우는 두 노드 모두 이미 그래프에

포함되어 있고, 두 노드 간에 경로가 존재하는 경우이다. 따라서, 사이클의 존재여부에 대한

문제는 아크의 추가 전 그래프에서 두 노드 간의 경로를 찾는 문제와 동일하다. 만약 그러

한 경로가 존재한다면 ),( ji vve = 의 추가로 인해 사이클이 존재하게 되기 때문이다.

주어진 그래프에서 어느 두 노드 간의 경로를 구하기 위하여는 깊이 우선 순회 나 너비 우

선 순회 방법을 사용할 수 있다. 노드의 수가 n인 그래프에서 어느 순회를 사용하건 복잡성

은 )( 2nO 이다.

6.1.2 프림(Prim)의 알고리즘

크루스칼의 알고리즘 보다 더 효율적인 알고리즘으로는 프림의 알고리즘이 있다.

Page 79: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

71

알고리즘: PrimMST

입력: 그래프 ),( EVG = , 아크의 거리 )(ed

절차:

단계 0: === SvvvTvP n},,,,{},{ 321

단계 1: P의 노드에서 T의 노드를 잇는 아크 중 가장 적은 거리의 아크

),( ji vve = 를 선택한다.

단계 2: }{},{},{ eSSvTTvPP ii +=−=+=

단계 3: T = 이면 정지하고 아니면 단계 1로 간다.

프림의 알고리즘에 따르면 우선 임의의 노드, 1v 을 선택한다. 이 노드에 연결된 가장 적은

거리의 아크를 선택하여 연결된 노드를 선택한다. 다음에는 선택된 노드에서 미 선택된 노

드로 연결된 아크 중 가장 적은 거리의 아크를 선택하여 연결된 노드를 선택한다. 이러한

절차를 반복하여 모든 노드가 선택되도록 한다. 이 알고리즘은 크루스칼의 알고리즘에서 요

구되는 사이클의 조사가 필요 없다는 장점이 있다. 이 알고리즘의 복잡성은 )( enO 이다. 여

기서 e 는 한 노드에 연결된 아크의 수이다. 만약, 최악의 경우인 완전 그래프를 대상으로

한다면, 복잡성은 )( 2nO 이다.

예제) 프림의 알고리즘에 의해 그림 6-1의 가중 그래프에서 최소 걸침 나무를 구하여 보자.

[표 6-2]는 결과를 요약한 것이다.

[표 6-2] 프림의 알고리즘 과정

반복 P T P와 T를 연결하

는 아크의 거리

e S

1 P Q, R, S, T d(P, Q) = 3

d(P, T) = 4

d(P, S) = 9

(P,

Q)

2 P, Q R, S, T d(P, T) = 3

d(P, S) = 9

d(Q, R) = 8

d(Q, T) = 1

(Q,

T)

(P, Q)

3 P, Q, T R, S d(P, S) = 9

d(Q, R) = 8

d(T, S) = 1

(T,

S)

(P, Q), (Q, T)

4 P, Q, T, S R d(Q, R) = 8

d(S, R) = 5

(S,

R)

(P, Q), (Q, T),

(T, S)

5 P, Q, T, S, R (P, Q), (Q, T),

(T, S), (S, R)

Page 80: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

72

6.1.3 응용 문제: 액화천연가스 배관

[그림 6-2]는 액화천연가스(LNG)를 공급하는 도시가스 회사 (1번 노드) 와 8개의 아파트 단

지 (2, 3, 4, 5, 6, 7, 8, 9번 노드)를 잇는 연결 가능한 파이프 라인을 나타낸다. 아크의 숫자는

파이프 라인의 거리를 의미한다. 다음의 문제를 고려하자.

(a) 라인의 용량이 충분하다고 가정할 때 총 파이프 라인의 거리를 최소화하도록

pipe를 설치하려고 한다. 어떤 라인을 선택하여야 하는가?

(b) 위 문제에서 도시가스 1번 노드와 아파트 단지 5번 노드를 잇는 라인은 반드시

있어야 만 하는 제한 조건을 갖는다. 이러한 경우, 총 파이프 라인의 거리를 최

소화하기 위한 라인을 선택하라.

(c) 위 문제에서 각 아파트 단지는 요구되는 가스압력에 따라 두 그룹으로 나뉜다.

즉, 아파트 단지 3,4,5,6은 높은 압력이 요구되고, 2,7,8,9는 낮은 압력의 가스가

요구된다. 압력의 차이로 인하여 두 그룹은 서로 이어질 수 없으며, 각 그룹은

도시가스 회사와 연결되어야 한다. 이러한 경우에 총 파이프 라인의 거리를 최

소화하는 라인을 선택하라.

1

23

4

5

6

7

8

9

5

6

15

7

7

5

15

9

204

1

6

13

73

20

10

12

[그림 6-2] LNG 배관 문제

6.1.4 응용문제: 통신 라인 설계

[그림 6-3]은 국내 21개 도시를 잇는 통신라인을 나타낸다. 최소 걸침나무 알고리즘을 적용

하여 최소 비용의 새로운 통신라인을 설계하라. [표 6-3]은 두 도시간의 거리를 의미하며 통

신라인의 비용은 거리에 비례한다고 가정한다. 또한, 각 라인의 용량과 각 도시에서의 통신

량은 무시한다.

Page 81: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

73

[그림 6-3] 통신 라인

[표 6- 1] 통신라인 거리(km)

대전 논산 대구 부산 포항 진해 광주 원주 강릉 속초 양구 춘천 가평 의정 성남 파주 인천 수원 천안 이천

서울 141 143 241 322 263 314 268 93 164 156 108 78 55 21 21 34 58 34 88 60

대전 15 120 195 172 181 141 121 198 228 202 174 161 157 121 174 155 108 60 96

논산 130 203 185 187 131 132 211 240 212 183 168 161 124 176 151 113 56 103

대구 82 73 78 172 176 212 262 259 240 238 251 219 273 269 215 163 182

부산 102 29 200 255 281 334 336 320 319 333 300 354 348 296 242 263

포항 119 245 180 185 240 251 241 246 269 243 293 303 243 202 203

진해 172 254 288 339 337 318 315 326 292 347 336 286 231 257

광주 262 335 369 343 314 299 287 251 299 258 237 185 234

원주 86 108 86 64 65 92 77 116 146 86 90 46

강릉 56 85 95 115 155 155 176 222 168 175 132

속초 51 78 101 140 154 156 213 169 194 144

양구 32 54 91 110 106 163 126 161 110

춘천 23 63 78 82 135 94 130 79

가평 40 56 61 112 72 114 65

의정 37 24 72 50 105 69

성남 55 69 16 68 40

파주 63 64 121 91

인천 62 106 105

수원 57 43

천안 51

Page 82: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

74

6.2 방향성 그래프에서의 사이클

6.2.1 자재 계산서

자재소요계획(Material requirement planning)은 제조되는 완제품 또는 최종품(end item)과 이를

구성하는 하위부품(low level item)에 대한 계획을 수립한다. 최종품과 부품간의 관계는 그림

6-4에서와 같이 자재 계산서(bill of material: BOM)로 묘사된다. 최종품의 수요는 이를 구성하

는 부품의 수요를 창출한다. 각 부품 이름의 오른쪽의 괄호 안 숫자는 모품목 1개를 만드는

데 필요한 수량을 의미한다. 예를 들어, 품목 C를 하나 만드는데 품목 30이 2개 필요하다.

BOM은 [그림 6-5]와 같이 사이클이 없는 방향성 그래프를 포함하는 네트워크로 표현될 수

있다. 노드는 제품, 중간 조립품, 또는 부품을 의미하며, 아크는 모품목에서 자품목으로 연결

된다. 아크에 있는 숫자는 모품목 하나를 완성하기 위해 요구되는 자품목의 수량이다. 또한,

이러한 네트워크는 인접행렬과 유사한 방법에 의해 [그림 6-6]과 같이 BOM 행렬로 표현될

수 있다. BOM 행렬은 삼각행렬이고, 그러한 행렬이 되도록 노드의 순서를 정했음에 유의하

라.

부품 전개는 한 품목에 대해 요구되는 하위 품목들의 수량 계산을 포함한다. 특히, 외부에서

구입해야 하는 부품(더 이상의 전개가 되지 않는 부품)에 대한 수량계산이 필요하다. 이러한

부품들의 수량 계산은 BOM 행렬을 이용하여 간단하게 수행할 수 있다.

알고리즘: 소요량 계산

입력: B(BOM 행렬), P(모품목 소요량 벡터),

k(BOM 그래프에서의 가장 긴 경로의 length)

처리:

단계 0: 벡터 R = P

단계 1: 다음을 k 번 반복한다.

MRR =

단계 2: R 을 리턴한다.

위 예제에 대해 알고리즘을 적용해 보자. 그래프에서 가장 긴 경로의 길이는 3 이다. 백터 P

는 A 품목의 소요량 만을 1 로 한다.

000000001=P

300000110)1( === MPR

321121000)1()2( === MRR

541101000)2()3( === MRR

벡터 )3(R 가 최종 결과로 품목 A 를 제조하는데 필요한 최하위 부품들의 수량을 의미한다.

Page 83: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

75

BOM

A

10(3)B(1) C(1)

20(1) D(2) 40(1) 50(1)30(2)

10(1) 30(1)

level 0

level 1

level 2

level 3

[그림 6-4] BOM

A

B C

20 D 40 50

1030

1

3

1

1 21

1

11

2

[그림 6-5] BOM의 방향성 그래프

A B C 20 D 40 50 30 10

A 0 1 1 0 0 0 0 0 3

B 0 0 0 1 2 0 0 0 0

C 0 0 0 0 0 1 1 2 0

20 0 0 0 1 0 0 0 0 0

D 0 0 0 0 0 0 0 1 1

40 0 0 0 0 0 1 0 0 0

50 0 0 0 0 0 0 1 0 0

30 0 0 0 0 0 0 0 1 0

10 0 0 0 0 0 0 0 0 1

[그림 6-6] BOM 행렬

Page 84: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

76

이미 언급 했듯이 BOM 행렬이 삼각행렬을 이루도록 노드의 순서를 정했다. 방향성 그래프

에서 아크 ),( vu 가 있으면 노드 u 의 순서는 노드 v 의 순서 보다 항상 작도록 한 결과이다.

이러한 노드의 순서를 topological ordering 이라고 하여 사이클이 없는 방향성 그래프에서는

항상 가능하다. 따라서, 문제는 topological ordering 을 어떻게 하는냐 이다. 다음 알고리즘을

참조하라. 노드 v 의 index(v)는 순서를 의미한다.

알고리즘: TopologicalOrdering

입력: 방향성 그래프 G

처리:

단계 0: k = 노드의 수

단계 1: 각 노드에 대해 index(v) = 0

단계 2: 각 노드 v 에 대해 다음을 수행

만약 index(v) = 0 이면 Ordering(G, v) 수행

단계 3: 종료

알고리즘: Ordering(G, v)

처리:

단계 1: 노드 v 에 연결된 각 노드 w 에 대해 다음을 수행

만약 index(w) = 0 이면 Ordering(G, w) 수행, 아니면 다음 단계 수행

단계 2: index(v) = k, k = k – 1

단계 3: return

index

반복 A B C D 10 20 30 40 50

0 0 0 0 0 0 0 0 0 0

1 1 5 2 6 7 9 8 4 3

2

3

A

B C

20 D 40 50

1030

1

3

1

1 21

1

11

2

Page 85: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

77

6.2.2 고착 방지(deadlock avoidance)

컴퓨터 시스템 또는 생산 시스템에서 작업의 요구와 요구를 충족시킬 수 있는 자원 간에 상

충이 발생할 수 있다. 이는 요구되는 자원이 한정되어 있는 경우에 발생하여 어떠한 자원을

어떠한 요구에게 언제 할당할 것이냐하는 세부적인 작업 스켸듈을 결정하여야 한다. 이러한

결정에 있어 중요한 고려 사항 중의 하나가 고착(deadlock)이다.

고착은 여러 경우에 발생되지만, 가장 일반적인 경우는 작업 요구 간의 관계가 사이클을 이

룰 때이다. 생산시스템을 예로 들자. 기계 1에서 작업을 끝낸 작업물 A가 기계 2를 요구하

고 있다. 그러나, 기계 2에는 작업물 B가 이미 작업을 끝난 상태에서 기계 1을 요구하고 있

다. 각 기계에는 최대 하나의 작업 만을 허용하고, 작업물의 임시 저장을 위한 여분의 공간

이 없다고 하자. 또한, 작업물의 이동은 로봇이 담당하고, 한번에 하나의 작업물 만을 이동

시킬 수 있다. 이러한 상황은 [그림 6-7]과 같이 자원을 노드로, 그 자원에 있는 작업물이 요

구하는 다른 자원으로 아크로 이은 그래프로 표현할 수 있다.

기계 1 기계 2

[그림 6-7] 고착 상태

이 그래프에서 사이클이 발생하고, 이러한 사이클은 고착상태를 의미한다. 즉, 어느 작업물

도 요구하는 자원으로 이동할 수 없는 상태이다.

고착을 방지하기 위하여는 고착 예방, 고착 회피, 고착 회복 등의 방법을 사용할 수 있다.

어떠한 방법을 사용하던간에 시스템의 미래 상황을 그래프로 나타내었을 때 사이클이 있는

지를 조사하여야 한다.

방향성 그래프에서 사이클이 있는지를 조사하기 위하여는 깊이 우선순회를 수정하여 사용할

수 있다. 각 노드에서 시작하여 연결된 노드들을 탐색함으로써 모든 사이클을 구할 수 있다.

Page 86: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

78

Page 87: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

79

7 장 최단거리 구하기 (Shortest Path)

7.1 벨맨의 식

[그림 7-1]과 같이 방향이 없는 가중 그래프에서 각 아크에 적힌 숫자는 거리를 의미한다고

하자. 이 네크워크에서 시작 노드 O에서 출발하여 최종 노드 T에 도달하기 위한 경로는 여

러 개 존재한다. 이 중 가장 최단거리를 갖는 경로는 어떤 것 일까? 여러분은 최단거리를

쉽게 구할 수 있을 것이다. O→A→B→D→T는 총거리 13으로서 최단거리에 속한다.

O

A

C

B D

E

T2 2

4

7

4

1

5

31

4

5

7

[그림 7-1] 최단 거리 문제

최단거리를 찾는 방법은 근본적으로 벨맨의 식(Bellman’s equation)에 의한다. 다음과 같은 기

호를 사용하자.

ijc : 두 노드 i와 j를 잇는 아크의 거리. 두 노드 간에 아크가 없다면 이 값은 무한대이다.

ju : 시작 노드 1에서 노드 j 까지 최단거리.

시작 노드를 1번으로 하여 다른 노드들을 2, 3, 4, .., n으로 번호를 매겼다고 하자. 만약, 음수

의 거리 합을 갖는 사이클이 있다면 최단 거리는 음수의 무한대로 최단 거리를 구하는 것은

무의미하다. 이러한 음수의 거리를 갖는 사이클이 없다면, 시작노드에서 시작해 시작노드까

지의 최단거리는 0으로 01=u 이 됨은 자명하다.

벨맨의 식) 시작 노드에서 각 노드까지의 최단거리들은 다음 조건을 만족한다.

njcuu

u

kjkjk

j ,,3,2},{min

01

=+=

=

Page 88: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

80

[그림 7-1]에서 여러분이 구한 최단거리 경로로써 벨맨의 식을 쉽게 검사할 수 있다. 최단거

리의 경로에 대하여 이 벨맨의 식이 성립하여야 하는 것은 직관적인 해석으로 설명이 가능

하다. 첫번째 조건은 이미 설명하였고, 두 번째 조건은 각 노드에서까지의 최단거리가 인접

하고 있는 노드들 까지의 최단거리에 연결된 아크의 거리를 합한 것 중 가장 적은 거리임을

의미한다. 만약, 서울에서 부산까지의 최단거리를 구한다고 하자. 부산까지 가기 위해서 대

구 또는 마산을 경유하여야 만 한다면, 부산까지의 최단거리는 대구 까지의 최단거리에 대

구-부산의 거리를 합한 값과 마산까지의 최단거리에 마산-부산의 거리를 합한 값 중 적은

값이 된다.

7.2 다익스트라의 알고리즘

벨맨의 식은 폐쇄형태(closed form)의 식으로 나중에 설명될 점진적 방법에 의해 해를 구할

수 있다. 그러나, 모든 거리가 음수가 아닌 양수라면 다음의 다익스트라 알고리즘에 의해 쉽

게 해를 구할 수 있다. 복잡성이 )( 2nO 인 이 알고리즘에서는 각 노드를 확정적 라벨

(permanent label)이 붙은 것과 시험적 라벨(tentative label)이 붙은 것으로 나눈다. 각 반복에서

확정적 라벨이 붙은 노드는 그 노드까지의 최단거리를 구하였다는 것을 의미하고, 시험적

라벨의 노드는 아직 최단거리를 구하지 못하였음을 의미한다.

알고리즘: DijkstraAlgorithm

단계 0: (시작)

01 =u

jj cu 1= , nj ,,3,2 =

},,3,2{},1{ nTP ==

단계 1: (확정적 라벨을 붙임)

}{min jTj

k uu

= 인 Tk 를 찾는다.

kPPkTT +=−= ,

만약, =T 이면 정지한다.

단계 2: (시험적 라벨의 수정)

Tjcuuu kjkjj += },,min{

단계 1로 간다.

[표 7-1]은 [그림 7-1]의 네트워크에서 다익스트라의 알고리즘에 의해 최단거리를 구한 결

과이다. [표 7-1]로부터 O부터 T까지의 최단 거리는 13임을 알 수 있다. 그렇다면 최단거리

를 이루는 경로는 무엇인가? 경로를 알기 위하여는 다익스트라의 알고리즘에 부가적인 정보

를 포함토록 하여야 한다. 즉, 각 반복에서 최소 거리인 노드를 선택할 때 그 거리가 어느

아크의 거리에 의해 계산됐는지를 알고 있어야 한다. 이를 위한 알고리즘은 Hillier and

Lieberman[6]의 책을 참조하고 여기서는 [표 7-2]로써 결과를 보이기로 한다. 이 표로부터 최

단거리의 경로는 종료 노드로부터 T-D-B-A-O와 T-D-E-B-A-O의 두 가지가 있음을 알 수 있

Page 89: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

81

다.

다익스트라의 알고리즘을 구현한 자바 프로그램을 참조하라. 그래프의 표현은 인접 리스

트에 의하였고, 예제 네트워크는 [그림 7-2]와 같다.

[표 7-1] 다익스트라의 알고리즘 과정

Ou

Au

Bu

Cu

Du

Eu

Tu P T k

0 2 5 4 O A,B,C,D,E,

T

A

0 2 4 4 9 O,A B,C,D,E,T B

0 2 4 4 9 7 O,A,B C,D,E,T C

0 2 4 4 9 7 O,A,B,C D,E,T E

0 2 4 4 8 7 14 O,A,B,C,E D,T D

0 2 4 4 8 7 13 O,A,B,C,E,D T T

0 2 4 4 8 7 13 O,A,B,C,E,D,

T

[표 7-2] 최단 거리의 경로를 구하는 알고리즘 과정

N Solved nodes

directly connected

to unsolved nodes

Closet

connected

unsolved

nodes

Total

distance

involved

n-th

nearest node

Minimum

distance

Last

connection

1 O A 2 A 2 OA

2,3 O

A

C

B

4

2+2=4

C

B

4

4

OC

AB

4 A

B

C

D

E

E

2+7=9

4+3=7

4+4=8

E

7

BE

5 A

B

E

D

D

D

2+7=9

4+4=8

7+1=8

D

D

8

8

BD

ED

6 D

E

T

T

8+5=13

7+7=14

T 13 DT

Page 90: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

82

S 1

2

3

4

5

6

T

[그림 7-2] 방향성 그래프에서의 최단거리

7.3 벨맨-포드 알고리즘(Bellman-Ford algorithm)

다익스트라의 방법은 음수의 거리를 갖는 아크가 있을 경우 적용될 수 없는 단점을 갖는

다. 이러한 단점을 보완할 수 있는 일반적인 방법이 벨맨-포드의 방법이다. 벨맨-포드 방법

에서는 벨맨의 식을 풀기 위하여 다음과 같이 초기값을 할당한다. 시작 노드의 벊호는 1번

이다.

0)1(1 =u

1,1

)1( = jcu jj

그 다음에는 다음식에 의해 점진적으로 근사해를 구한다.

}{min )()1(

kj

m

kk

m

j cuu +=+

위의 식으로부터 각 노드에서 다음과 같은 관계가 성립되어 근사해는 점진적으로 감소하는

성질을 갖는다.

)3()2()1(jjj uuu

그렇다면 이 근사해가 과연 최단거리로 수렴할까? 이를 설명하기 위하여 다음과 같은 해석

을 하자.

)(mju : 경로가 최대 m개 아크를 포함한다는 가정에서 시작노드에서 j노드까지의 최단거리

최대 하나의 아크를 포함하는 경로인 초기해는 이 해석에 맞는다. 만약 2=m 라면 최단 거

리는 최대 둘의 아크를 포함한다. 따라서, 1=m 인 경우에서 시작노드에서 각 노드까지의

Page 91: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

83

최단 거리에 그 노드에서 해당 노드 까지의 거리를 합한 것 중 가장 적은 것을 구하면 된다.

따라서 위의 식은 논리에 맞는다. 이러한 논리는 m이 3이상일 경우에도 적용된다.

만약 음수의 사이클이 없다면 최단 경로는 최대 n-1개 아크를 포함한다. 즉, )1( −nju 이 ju 에

해당한다. 이 방법은 각 단계(m)에서 n개의 식을 푼다. 또한 각 식은 최대 n-1개의 더하기를

포함한다. 따라서, 복잡성은 )( 3nO 이다.

예제: 다음과 같이 5개의 노드를 갖는 방향성 네트워크에서의 거리 행렬이 있다.

=

01009999

99990109999

109999099999999

99996509999

69999310

A

시작노드를 1번, 종료노드를 5번으로 하여 벨맨-포드의 방법에 의해 최단거리를 구해보자.

[표 7-3]은 결과를 나타내어 최단거리는 6으로 경로는 1→5임을 의미한다.

[표 7-3] 벨맨-포드 방법에 의한 최단거리

반복 1u 1u 3u

4u 5u 1p 2p 3p

4p 5p

1 0 -1 3 9999 6 1 1 1 1 1

2 0 -1 3 5 6 1 1 1 2 1

3 0 -1 3 5 6 1 1 1 2 1

4 0 -1 3 5 6 1 1 1 2 1

7.4 두 번째 최단 경로 구하기

The Pollack Algorithm (1961년)

시작 노드에서 종료 노드까지의 최단거리를 구한 후 두 번째 최단 거리의 경로는 어떻게 구

할까? Pollack의 방법은 두 번째 최단 경로와 첫번째 최단 경로는 하나 이상의 아크가 서로

다른 사실에 기초한다.

알고리즘: PollackAlgorithm

단계 1: 주어진 네트워크에서 최단경로를 구한다. 최단경로에 m개의 아크가 있으면, 그들

을 1부터 m까지 번호를 부여한다. i를 1로 초기화한다.

단계 2: 아크 i의 거리를 di = ∞라고 하고, 최단경로를 다시 구한다.

단계 3: di 를 원래 값으로 하고, i를 1 증가시킨다. 만약, mi 이면 단계 4를 수행하고, 아

니면 단계 2를 수행한다.

단계 4: 단계 2에서 구한 최단경로들 중 가장 거리가 짧은 최단경로가 두 번째 최단경로

다.

Page 92: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

84

예제: [그림 7-3]의 네트워크는 O→B→A→T이 최단경로로 총거리는 7이다. 그 다음으로 긴

최단거리의 경로를 구해보자.

O

A

C

B T

62

4

2

7

3

3

5

[그림 7-3] 두번째 최단경로 문제

1) O→B의 거리를 무한대로 할 때

O→A→T가 최단경로로 총거리는 8이다.

2) B→A의 거리를 무한대로 할 때

O→A→T가 최단경로로 총거리는 8이다.

3) A→T의 거리를 무한대로 할 때

O→C→T가 최단경로로 총거리는 9이다.

이 3가지 경로 중 가장 최소의 총거리를 갖는 것은 O→A→T이다. 즉, 이 경로가 주어진 네

트워크에서 두번째 최단경로다.

위의 알고리즘은 최단 경로에 포함된 각 아크의 거리를 무한대로 하여 시작노드에서 종료노

드까지의 최단 경로를 구한다. 또 다른 방법은 최단 경로에 속한 각 아크의 거리를 무한대

로 하고, 그 아크 전 까지의 최단 경로를 그대로 유지하는 것이다. 따라서, 선택된 아크의

다음 노드부터 종료노드까지의 최단 경로 만 다시 구한다.

알고리즘: SecondShortestPath

단계 1: 주어진 네트워크에서 최단거리의 경로 tvvvv →→→→ 321 를 구한다.

i를 1로 초기화한다.

단계 2: 최단 경로에서 1v 부터 iv 까지의 경로는 고정시키고, 아크 ),( 1+ii vv 의 거리를 ∞

로 하여 1+iv 에서 tv 까지의 최단 경로를 구한 후 최종 경로를 생성한다.

단계 3: i를 1 증가시킨다. 만약, mi 이면 단계 4를 수행하고, 아니면 단계 2를 수행한다.

단계 4: 단계 2에서 구한 경로들 중 가장 거리가 짧은 경로가 두 번째 최단 경로다.

이전의 예제에 알고리즘을 적용하면 다음과 같다.

1) O→B의 거리를 무한대로 하고, O에서 T까지의 최단 경로를 구한다.

Page 93: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

85

O→A→T가 최단경로로 총거리는 8이다.

2) O→B를 고정시키고, B→A의 거리를 무한대로 하고, B에서 T까지의 최단경로를 구한

다.

O→B→T가 최단경로로 총거리는 10이다.

3) O→B→A를 고정시키고, A→T의 거리를 무한대로 하고, A에서 T까지의 최단 경로를

구한다. 그러나, 최단 경로를 구할 수 없다(반복된 노드를 허용하지 않을 경우)

따라서, O→A→T가 두번째 최단경로로 총거리는 8이다.

7.5 K번째 최단 경로 구하기

(Yen, 1971년)

K번째 최단 경로를 구하기 위하여는 두 번째 최단 경로 구하는 알고리즘을 반복적으로 적

용할 수 있다. 경로에 같은 노드의 반복을 허용하지 않는 경우 (즉, simple path) 이전의 예에

서 4번째 최단 거리를 구하여 보자.

첫번째 최단 경로는 O→B→A→T이다.

1) O→B의 거리를 무한대로 하고, O에서 T까지의 최단 거리를 구한다.

O→A→T가 최단거리로 총거리는 8이다.

2) O→B를 고정시키고, B→A의 거리를 무한대로 하고, B에서 T까지의 최단거리를 구한

다.

O→B→T가 최단거리로 총거리는 10이다.

따라서, 두번째 최단경로는 O→A→T이다.

1-1) O→B, O→A의 거리를 무한대로 하여 O에서 T까지의 최단거리를 구한다.

O→C→T가 최단 경로로 거리는 9이다.

1-2) O→A를 고정시키고, O→B, A→T의 거리를 무한대로 하여 A에서 T까지의 최

단거리를 구한다.

O→A→B→T가 최단 경로로 거리는 15이다.

위의 2), 1-1), 1-2)의 결과를 비교하면 3번째 최단 경로는 O→C→T이다.

1-1-1) O→B, O→A, O→C의 거리를 무한대로 하여 O에서 T까지의 최단경

로를 구한다. (그러나, 이러한 경로는 존재하지 않는다)

1-1-2) O→C를 고정시키고, O→B, O→A, C→T의 거리를 무한대로 하여 C에

서 T까지의 최단 경로를 구한다. O→C→B→A→T로 총거리는 11이

다.

위의 2), 1-2), 1-1-1), 1-1-2)를 비교하면 4번째 최단경로는 O→B→T이다.

이 방법은 시작 노드에서 종료노드 까지의 모든 경로를 특정의 Branching 절차에 의해 체계

적으로 조사한다는데 특징이 있다. 위의 예는 단순 경로 만을 구하는 경우를 고려하여

branch 시 다음의 조건을 만족토록 하였다.

1) 경로에 특정의 노드가 반복되지 않도록 한다. 즉, 새로이 구하는 최단 경로에서의

노드들은 이미 고정된 노드들이 없도록 한다.

Page 94: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

86

2) 동일한 부모 노드들을 갖는 branch에 있어 무한대의 거리로 하는 아크들이 반복되어

선택(branchng)되지 않도록 한다.

위의 예에서 모든 경로를 거리 순으로 정렬하면 다음과 같다.

단계 0) O→B→A→T : 7

단계 1) O→A→T : 8

단계 1-1) O→C→T : 9

단계 2) O→B→T : 10

단계 2-1) O→B→C→T: 11

단계 1-1-2) O→C→B→A→T : 11

단계 1-1-2-1) O→C→B→T: 14

단계 1-2) O→A→B→T : 15

단계 1-2-2) O→A→B→C→T : 16

즉, 모든 경로는 각 단계에 해당하여 위에 설명된 가지치기 절차가 유효함을 알 수 있다.

7.6 플로이드-와샬 알고리즘 (Floyd-Warshall algorithm)

지금 까지는 시작 노드에서 시작하여 종료 노드로 끝나는 최단거리의 경로를 구하였다. 이

번에는 주어진 네트워크에서 어느 쌍의 두 노드에 대한 최단거리를 구해보자. 물론, 두 노드

를 주고, 이 노드 간의 최단거리를 다익스트라의 알고리즘에 의해 구하면 모든 쌍의 두 노

드에 대해 최단거리를 구할 수 있을 것이다. 그러나, 한번의 통합된 알고리즘에 의해 구할

수 있는 방법을 알아보자. 우선, 벨맨의 식에서 사용한 용어와 유사한 다음의 용어를 사용하

자.

=iju i에서 j까지의 최단 거리

=)(m

iju i에서 j까지의 경로가 m개 이하의 아크를 포함하여야 한다는 조건하에서의 최단거리

만약, 0=iic 이라면 다음 식이 성립한다.

0)0( =iiu

)( )0( jiuij +=

}{min )()1(

kj

m

ikk

m

ij cuu +=+

이 식들이 의미하는 것은 1−n 번째 차수의 근사값이 우리가 원하는 결과라는 것이다. 즉,

ijn

ij uu =− )1(

가 된다. )1( −n

iju 을 용이하게 구하기 위하여 새로운 형태의 행렬 곱을 사용할 수 있

다는 것이다. 두 행렬 A와 B에 대한 새로운 형태의 행렬 곱을 다음과 같이 정의하자.

}{min

)(

kjikk

ij

ij

bap

BApP

+=

==

)(mU 을 m번째 차수의 근사값이라고 하자. 초기 행렬값인 )0(U 는 다음과 같다.

Page 95: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

87

=

0

0

0

0

)0(U

행렬 )( ijaA = 를 아크에 할당된 거리의 행렬이라고 하자.

)))(((

)(

)0()2()1(

)0()1()2(

)0()1(

AAAUAUU

AAUAUU

AUU

nn ==

==

=

−−

이러한 행렬 곱에서 중요한 사실은 )0(U 는 동치행렬(identity matrix)이라는 것이다. 즉,

AAU =)0( 이다. 이러한 사실에 기초하면, 다음과 같은 식을 유도할 수 있다.

1)1( −− = nn AU

여기서 A의 1−n 승은 위에서 정의된 행렬의 곱을 A에 대해 1−n 번 수행한다는 것이다. A를

1−n 번 곱하여 원하여 결과를 얻는 방법은 단순하다. 12 − nk 을 만족하는 어느 k에 대해서 12 −= nk AA 이 성립하므로 A에 대한 제곱을 k번 반복하는 것이다. 말하자면,

kkk AAAAAAAAA === 22242 ,,, 와 같은 방식으로 한다.

이 방법은 n2log 번의 행렬곱이 필요하고, 한번의 행렬곱의 복잡성은 )( 3nO 이다. 따라서, 이

방법의 복잡성은 )log( 23 nnO 이다. (행렬곱을 구하기 위해 n개의 성분에 대한 최소값을 구하

여야 한다. 이 복잡도는 )(nO 이다. 한 행렬은 2n 개의 성분을 가지므로, 행렬곱에 대한 복잡

도는 )( 3nO 이다)

이 방법을 그림 7-3의 네트워크에 적용하여 보자. [그림 7-3]의 그래프는 방향성이 없는 그래

프이므로 행렬 A는 대각행렬(diagonal matrix)임에 유의하라.

=

0572

5034

73023

2206

4360

A

=

05428

50354

43023

25205

84350

2A

Page 96: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

88

==

05427

50354

43023

25205

74350

4AU

두 노드의 최단거리를 구하기 위한 행렬 곱 방법 보다 더 효율적인 방법은 )( 3nO 의 복잡성

을 갖는 플로이드-와샬 알고리즘이다. 각 노드를 1번부터 번호를 붙였다고 하고, )(miju 을 다

음과 같이 재정의하자.

)(miju = 1+m 이상의 노드, 즉, nmm ,,2,1 ++ 의 노드들을 지나지 않는 조건하에서 i와 j사이

의 최단거리

)1( +miju 의 최단거리를 가지는 경로는 다음 두 경우 중의 하나이다.

1) 1+m 을 지나지 않는다. 이 경우, )()1( mij

mij uu =

+ 이다.

2) 1+m 을 지난다. 이 경우, )(,1

)(1,

)1( mjm

mmi

mij uuu ++

++= 이다.

따라서, 다음의 식을 얻는다.

},min{ )(

,1

)(

1,

)()1(

)0(

m

jm

m

mi

m

ij

m

ij

ijij

uuuu

cu

++

+ +=

=

명백히, ijn

ij uu =)(가 된다(어느 두 노드의 최단 경로는 많아야 n개 노드를 포함한다).

이 식을 이용하여 최단거리를 구하는 방법은 행렬곱에 의한 방법과 유사하다. 그러나, 하나

의 nn 행렬을 위한 저장 공간 만이 필요하여 보다 효율적이다. 알고리즘은 다음과 같다.

알고리즘: FloydWarshallAlgorithm

단계 0] 초기화

0.1 다음의 성분을 갖는 nn 행렬 U를 생성한다.

==

exist not does ),( if ,

if 0,

exists ),( if ),,(

),(0

ji

ji

jijic

jiu

0.2 ijip =),( 의 성분을 갖는 nn 행렬 P를 생성한다

0.3 =k 0

단계 1] 1+kU 생성

1.1 nn 행렬 1+kU 를 다음과 같이 생성한다.

)},1()1,(),,(min{),(1 jkukiujiujiu kkkk +++=+

1.2 만약 ),1()1,( jkukiu kk +++ 이 선택되었다면 ),(),( jkpjip = 로 한다.

Page 97: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

89

단계 2] 정지 조사

2.1 1+= kk

2.2 만약 1+= nk 이면 정지하고 그렇지 않으면 단계 1로 간다.

[그림 7-3]의 네트워크에 플로이드-와샬의 알고리즘을 적용한 결과는 다음과 같다.

=

=

44444

33333

22222

11111

00000

,

0572

5034

73023

2206

4360

)0()0( PU

=

=

44444

33303

22222

10111

00000

,

0572

503104

73023

210206

4360

)1()1( PU

=

=

44141

33303

12222

10111

10000

,

05428

503104

43023

210206

84360

)2()2( PU

=

=

44142

33323

12222

12112

10020

,

05427

50354

43023

25205

74350

)3()3( PU

=

=

44142

33323

12222

12112

10020

,

05427

50354

43023

25205

74350

)4()4( PU

Page 98: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

90

=

=

44142

33323

12222

12112

10020

,

05427

50354

43023

25205

74350

)5()5( PU

어느 두 노드의 최단 경로를 알기 위하여 행렬 P가 계산되었음에 유의하라. 만약, p[i][j]=k

이면 i와 j사이의 최단 경로의 마지막 노드는 k이다.

플로이드-와샬 알고리즘의 JAVA 프로그램을 참고하라. 두 노드의 경로를 알기 위하여 2차원

배열의 p를 추가하였다. p[i][j]=k이면 i와 j사이의 최단 경로는 아크 (k, j)를 포함함을 의미한

다.

문제: 어느 아파트 단지의 쓰레기 통에 대한 위치는 [그림 7-4]와 같다. 쓰레기 수거 차량은

입구에서 들어와 출구로 나가야 하고, 단지 내의 도로는 양방 통행이 가능하다. 한 쓰레기

통에서 쓰레기를 수거하는데 1분이 걸리고, 교차로 간의 운행시간은 [표 7-4]와 같다. 최소의

시간으로 모든 쓰레기 통을 처리하는 경로를 구하여라.

입구출구

A B C D

E F G H

I

J

KL

1동 2동3동

4동 5동 6동

[그림 7-4] 쓰레기통 위치

Page 99: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

91

[표 7-4] 교차로 간 거리

A B C D E F G H I J K L

A 5 5

B 5 5 5

C 5 5 5

D 5 4

E 5 5 5

F 5 5 3

G 5 5 5 5

H 4 5 4

I 5 5 7 10

J 3 7 7

K 5 10 7 5

L 4 5

Page 100: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

92

Page 101: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

93

8 장 할당 문제

8.1 문제 정의

m명의 작업자와 n대의 기계가 있다고 하자. 각 작업자를 기계에 할당하는데 있어 총 할당

비용을 최소로 하는 해를 구하는 것이 할당문제(assignment problem)이다. 할당 문제를 정형적

으로 만들기 위해 다음과 같은 기호를 사용하자.

=ijc i번째 작업자를 j번째 기계에 할당하는데 드는 비용

=ijx i번째 작업자가 j번째 기계에 할당되면 1이고 아니면 0이다.

이러한 기호를 사용하여 할당문제를 수식으로 표현하면 다음과 같다.

jiorx

mjx

nixts

xcMin

ij

m

i

ij

n

j

ij

m

i

n

j

ijij

and allfor ,1 0

,,2,1,1

,,2,1,1 .).

1

1

1 1

=

==

==

=

=

= =

이 할당문제는 선형계획 문제 중 해가 0 또는 1의 값을 갖는 0/1 정수 문제에 속한다. 따라

서, 이 문제의 해는 0/1문제의 해를 구하는 방법을 적용할 수 있다. 그러나, 이 장에선 할당

문제를 그래프로 표현하여 보다 효율적으로 해를 구할 수 있는 방법을 설명한다. 우선, 다음

과 같은 할당문제의 예를 보자.

예제 3명의 작업자를 3대의 기계에 할당하려고 한다. 각 작업자를 각 기계에 할당하는데 드

는 비용은 [표 8-1]같다. 각 작업자를 각 기계에 할당할 수 있는 대안은 모두 6가지로 각 기

계에 할당된 작업자 번호와 총비용을 구한 것은 [표 8-2] 결과와 같다. 이 6가지 대안 중 가

장 좋은 할당은 대안 5로 기계 1, 2, 3에 각각 작업자 3, 1, 2를 할당하는 것이다.

이 예를 그래프로 표현해 보자. [그림 8-1]과 같이 기계들과 작업자들을 노드로 표현하고,

기계에 작업자의 할당이 허락된다면 아크로 두 노드를 연결하자.

[표 8-1] 작업자-기계 할당 비용

기계

작업자

1 2 3

1 5 7 9

2 14 15 16

3 15 18 21

Page 102: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

94

[표 8-2] 할당 대안

기계 1 기계 2 기계 3 총비용

대안 1 1 2 3 41

대안 2 1 3 2 39

대안 3 2 1 3 42

대안 4 2 3 1 41

대안 5 3 1 2 38

대안 6 3 2 1 39

1

14

2

9

2

7

3 3

51

작업자 기계

15

16

15

18

21

[그림 8-1] 할당문제의 그래프 표현

이 그래프의 특징은 쉽게 알 수 있다. 즉, 모든 노드는 두 부분(기계와 작업자)으로 분리될

수 있고, 모든 아크는 서로 다른 부분에 있는 노드들 끼리를 연결하고 있다. 이러한 그래프

를 이분 그래프(bipartite graph)라고 부른다. 우리가 원하는 결과는 이 이분 그래프에서 기계

노드와 작업자 노드를 연결하는 아크들의 집합을 찾는 것이다. 만약, 각 아크에 가중치가 할

당되지 않고, 단순히 서로 연결될 수 있는 최대의 쌍들을 구한다면, 이 문제는 보통 결혼문

제(marriage problem)라고 불린다. 각 부분의 노드를 남자 노드와 여자 노드로 나누고, 가장

많은 결혼 대상들을 맺게 해주는 문제이기 때문이다. 여하튼, 가장 좋은 해는 다음의 조건을

가져야 한다.

1) 선택되는 아크의 수는 },min{ mn 이다 (가능한 많은 쌍을 결혼시킨다).

2) 한 아크의 선택으로 인해 두 노드가 선택된다. 이 때 각 노드는 최대 한번 선택되

어야 한다 (일부일처제 이다).

3) 선택된 아크의 비용 합은 최소가 되어야 한다 (가장 바람직한 결혼을 시킨다).

이 그래프로 표현된 문제를 풀 수 있는 방법은 다음의 헝가리안 알고리즘에 의한다.

Page 103: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

95

8.2 헝가리안 알고리즘

우선, 각 비용을 양의 수라고 가정하고, 기계와 작업자의 수(N)는 동일하다고 하자. 헝가

리안 알고리즘은 다음과 같다.

알고리즘: Hungarian Algorithm1

단계 1: (최소값의 감산)

비용 행렬의 각 행과 열에서 최소값을 뺀다. 즉, 각 행과 열에 0의 값을

갖는 성분이 최소 1 이상 있도록 한다.

단계 2: (최적해 검사:optimality test)

최소개의 라인으로 0의 성분을 가진 행과 열을 지운다. N개의 라인으로

모든 0을 지우면 단계 3으로 간다.

단계 3: 지워지지 않는 성분 중 최소값을 찾아 이를 지워지지 않는 성분에서 빼고,

라인이 겹치는 성분에서는 더한다. 단계 1로 간다.

단계 4: 각 열과 행에 0이 하나씩 있도록 0의 성분(independent 0’s)을 찾는다.

이 알고리즘에 의한 해는 할당문제에 대해 최적해이다. 위의 예에 대해 알고리즘을 적용해

보자. 3명의 작업자와 3대의 기계에 대한 비용 행렬은 다음과 같다.

=

211815

161514

975

),( jic

단계 0에 의해 각 열과 행에서 최소값을 빼자. 우선 각 행에 대해 최소값을 빼면 다음과 같

다.

0 2 4 최소값=5

0 1 2 최소값=14

0 3 6 최소값=15

이제 각 열에 대해 최소값을 빼자.

0 1 2

0 0 0

0 2 4

최소값=0 최소값=1 최소값=2

어느 행과 열에도 0의 성분이 존재한다. 단계 2에 의해 최소의 라인으로 0을 지워보자.

이를 위해 가장 많은 0을 가지고 있는 행 또는 열을 우선적으로 지우자.

0 1 2

0 0 0

0 2 4

두개의 라인으로 지웠으므로 단계 3을 수행하자. 지워지지 않는 부분의 최소값은 1이므로

다음의 비용표를 얻는다.

Page 104: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

96

0 0 1

1 0 0

0 1 3

다시 단계 2를 수행하자.

0 0 1

1 0 0

0 1 3

모두 3개의 행으로 구성된 라인으로 지웠으므로 단계 4를 수행한다. Independent 0은 각 행

과 열에 하나씩 있는 3개의 0들이다.

0 0 1

1 0 0

0 1 3

즉, 최적해는 (작업자 1, 기계 2), (작업자 2, 기계 3), (작업자 3, 기계 1)로 총비용은 단계

0와 단계 2에서 뺀 최소값의 합인 38이다.

이제 이 알고리즘에 관련된 몇가지 의문을 알아보자.

1. 작업자와 기계 수가 다른 경우에는 어떻게 하나?

헝가리안 알고리즘은 같은 수의 행과 열이 있는 비용 행렬에 적용될 수 있다. 만약 행과 열

의 수가 다르면, 가상적인 행과 열을 삽입하여 정사각형 모양의 비용행렬을 만들어야 한다.

이 때 가상적인 행 또는 열의 비용 값은 동일하게 한다.

2. 어느 작업자가 특정의 기계에 할당되면 안되는 조건이 있다면 어떻게 하나?

작업자가 기계에 할당되는 비용을 무한대(big M)로 한다.

3. 왜 단계 1에서 원래의 비용 대신 최소값을 뺀 비용으로 해를 구하나?

원래의 비용은 ijc 이다. 만약 k번째 행에서 이 행의 최소값인 kp 를 뺀 값이 'ijc 이라면 다음

식이 성립한다.

= == === =

−=−==n

i

n

j

kijij

n

i

n

j

kjk

n

j

ijij

n

i

n

j

ijij pxcxpxcxcz1 11 111 1

''

kp 는 상수이므로 원래의 목적함수를 최소화하는 것은 새로운 목적함수(z’)를 최소화하는 것

과 동일하다. 어느 열에 대해서도 위의 관계가 성립한다. 따라서, 최소값을 뺀 새로운 문제

는 원래의 문제와 동일하고, 각 행과 열에 최소치인 0이 존재하도록 하는 이유는 단계 1,2,3

에서의 처리 절차 때문이다.

4. 왜 단계 3에서 라인이 겹치는 성분의 값은 더하나?

단계 3에서 라인이 없는 성분에 대해 최소값을 뺐다. 질문 3의 해답에서 보았지만, 모든 성

Page 105: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

97

분에 대해 이 최소값을 뺄 수 있다. 그러나, 모든 성분 값이 0보다 크거나 같게 하기 위하여

는 라인으로 지워진 성분의 값은 이 최소값을 다시 더하여 원래의 값으로 하여야 한다. 이

때 두 라인이 겹치는 성분의 경우에는 두 번 더하는 효과를 가져오므로, 결국 원래의 값에

최소값을 한번 더하여야 한다.

5. 왜 0을 포함하는 행과 열을 지우는 최소의 라인 수가 n일 때 최적 값이 존재하나?

단계 2에서 0을 cover하는 최소 라인의 수가 n일 때 계산된 행렬에서 0을 포함하는 성분 중

최적해(즉, 단계 4에서의 independent 0들의 존재)가 있다고 결론 짓는다. 이에 대한 이유를

설명하기는 조금 어렵다. 그래프 이론 중 covering과 matching에 관한 이론이 필요하기 때문

이다. 여하튼, Hungary 사람들인 Konig-Egevary의 정리를 보자.

Konig-Egevary의 정리 1

만약, 행렬 A가 0과 1로 구성되어 있다면 maximum independent 0의 수는 0을 cover하는 라인

의 minimum set 수와 같다.

증명: )( ijcA = 의 행을 왼쪽 노드, 열을 오른쪽 노드로 놓고, ),( ji 의 성분이 0이면 두 노드

를 잇는 아크를 추가하여 이분 그래프 ),( EVG = 를 생성하자. A의 independent 0의 최대 수는

G의 maximum matching을 구하는 것이고, 0을 cover하는 최소 라인 수를 구하는 것은 G의

minimum covering을 구하는 것과 같다.

Maximum matching은 이분 그래프에서 두 그룹의 노드들을 가장 많이 일대일로 연결하는 아

크들을 찾는 것이고, minimum covering은 이분 그래프에서 모든 아크를 없앨 수 있는 최소의

노드를 찾는 것이다.

Konig-Egevary의 정리 2

M이 matching이고, K가 covering일때 KM = 이라면 M은 maximum matching이고, K는

minimum covering이다.

증명: Matching 수와 covering수에 대해 항상 다음의 관계가 성립한다.

KM

(왜? covering에 속한 한 노드에 연결된 아크들은 많아야 하나의 matcnhing 아크를 포함한

다. 모든 matching 아크들을 포함하는 covering을 위헤서는 적어도 matching 아크들의 수 보

다 많은 노드들이 covering 되어야 한다. 따라서 covering 수는 matching 수보다 많다)

따라서, M*과 K*이 각각 maximum matching과 minimum covering 이라면 다음 관계가 성립

한다.

KKMM **

이 관계로부터 KM 이라면, M과 K는 각각 maximum matching과 minimum covering이다.

6. Minimum covering과 maximum matching을 어떻게 구하나?

설명된 헝가리안 알고리즘은 직관적인 방법에 의해 단계 2에서 최소의 라인으로 모든 0을

지우고, 단계 4에서 independent 0들을 구한다. 이미 설명한 바와 같이 단계 2는 minimum

Page 106: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

98

covering을 구하는 것이고, 단계 4는 maximum matching을 구하는 것이다. Maximum matching을

구하기 위해서는 다음에 설명될 maximum matching 알고리즘을 사용할 수 있다. 그러나,

maximum matching 알고리즘을 손으로 쉽게 적용할 수 있는 체계적인 방법인 Munkres의 알

고리즘은 보통 헝가리안 알고리즘으로 불린다. 이전에 설명된 알고리즘은 Munkres의 헝가리

안 알고리즘을 직관적인 절차로 수정한 것일 뿐 근본적으로 동일한 알고리즘임에 유의하라.

또한, Munkre의 알고리즘에서 핵심적인 부분 역시 다음에 설명될 maximum matching 알고리

즘과 근본적으로 동일하다.

알고리즘: Hungarian Algorithm2

단계 1: (각 행에서 최소값의 감산)

비용 행렬의 각 행에서 최소값을 뺀다.

단계 2: (별 표시)

비용행렬의 각 0 성분에 대하여 행과 열에 별 표시의 0(starred zero)이 없으면 그 0

성분에 별 표시를 한다.

단계 3: (Covering)

별표시의 0 성분을 갖는 열을 cover한다. 만약, n개 열이 cover 됐다면 별표시의

성분이 최적의 할당으로 종료한다. 그렇지 않으면 다음 단계를 수행한다.

단계 4: (프라임 표시)

Cover 되지 않은 0 성분을 찾아 0’ 표시를 한다. 만약 0’의 행에 0*가 없다면 단

계 5로 간다. 그렇지 않다면 0’의 행을 cover하고, 0*를 포함하는 열의 cover를 제거

한다. 이 단계를 cover되지 않은 0이 없을 때 까지 반복하여 단계 6으로 간다.

단계 5: (새로운 해의 생성)

다음과 같이 일련의 Z들을 구한다. Z0를 단계 4에서 구한 0’ 중 같은 행에 0*가

없는 것, Z1을 Z0를 포함하는 열의 0*, Z2를 Z1을 포함하는 행의 0’이라고 하자. 이

러한 절차를 반복하여 0’에서 끝나고, 열에 0*가 없을 때 까지 Z들을 구한다.

만약 이러한 Z들이 존재한다면 Z1에서 별 표시를 삭제하고, Z0, Z2에 별 표시를

한다. 기타 프라임 표시를 삭제하고, 모든 cover를 삭제한다. 단계 3으로 간다.

만약 이러한 Z들이 없다면 단계 6으로 간다.

단계 6: (성분 값의 수정)

Cover되지 않은 성분 중 가장 작은 값을 cover된 행의 값에 더하고, cover되지 않

은 열의 성분에서 뺀다. 단계 4로 간다.

예제) 이 알고리즘을 이전의 문제에 적용하자. 단계 1, 2, 3에 의한 결과는 다음과 같이 하나

의 열 만을 cover한다.

0* 2 4

0 1 2

0 3 6

따라서, cover 되지 않은 0이 없으므로 단계 4와 단계 5를 넘어 단계 6을 수행한다. 최소

값인 1을 2, 3 열의 성분에서 뺀다.

0* 1 3

0 0 1

0 2 5

다시 단계 4를 수행하여 (1,1) 성분의 0에 프라임을 붙인다.

Page 107: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

99

0* 1 3

0 0’ 1

0 2 5

단계 5에서 2행 2열의 0’을 포함하는 열에 0*이 없으므로 0’을 0*로 바꾼후 단계 3에서 2

열을 cover한다. .

0* 1 3

0 0* 1

0 2 5

단계 6에서 cover되지 않은 최소 성분 1을 빼준 후 단계 4를 수행한다. .(2,3)의 0에 프라임

을 붙이고, 같은 행에 0*가 있으므로 2열의 cover를 없애고, 2행을 cover한다.

0* 1 2

0 0* 0’

0 2 4

Cover 되지 않은 0이 없으므로 단계 6을 수행한다. 최소값 1을 cover되지 않은 성분에서

빼고 cover가 중복된 성분에 더한다.

0* 0 1

1 0* 0’

0 1 3

단계 4에서 (1,2)의 0에 프라임 표시를 하고, 같은 행에 0*가 있으므로 1열의 cover를 없애

고 1행을 cover한다.

0* 0’ 1

1 0* 0’

0 1 3

다시 단계 4에서 (1,3)의 0에 프라임 표시를 한다.

0* 0’ 1

1 0* 0’

0’ 1 3

프라임 표시를 한 3행에 0*가 없으므로 단계 5를 수행한다. 단계 5에서 0’에서 시작하여

0’에서 끝나는 (3,1)의 0’, (1,1)의 0*, (1,2)의 0’, (2,2)의 0*, (2,3)의 0’를 구한다. 이에 따라 0*

를 0로 바꾸고, 0’들을 0*로 바꾼다.

0 0* 1

1 0 0*

0* 1 3

Page 108: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

100

단계 3에서 3개의 열이 cover되므로 0* 가 있는 (1,2), (2,3), (3,1)을 최적해로하고 종료한다.

8.3 최대 매칭 알고리즘

최대 매칭 알고리즘은 주어진 이분 그래프에서 최대로 많은 쌍을 매칭시켜주는 방법이다.

두번째 헝가리안 알고리즘에서 0*와 0’을 이용한 방법 또한 이 방법에 기초한다.

알고리즘: MaximumMatching

입력: ),( EVG =

처리:

단계 0: 모든 노드들을 free node로 한다.

단계 1: Free node v를 선택한다. 만약 free node가 없다면 단계 6으로 간다.

단계 2: v에서 시작하는 확장 트리를 구한다. 트리의 리프 모두 free node가 아니라면 단

계 4로 간다.

단계 3: 트리의 리프인 free node u에서 v까지의 확장 경로를 매칭에 적용한다. 단계 5로

간다.

단계 4: 확장 트리를 그래프 G에서 제거한다.

단계 5: 단계 1로 간다.

단계 6: 매칭된 노드들을 출력한다.

이 알고리즘은 함축적으로 묘사되어 많은 설명이 필요하다. 이해하기 쉬운 설명을 위해 우

선 [그림 8-2-(1)]의 이분 그래프에서 최대 매칭을 구해 보자.

[그림 8-2]의 (1)은 8개의 노드를 갖는 그래프이다. 초기에는 어떤 매칭도 없으므로 모든 노

드들이 free node이다. Free node는 매칭되지 않은 노드들을 의미한다. 알파벳 순으로 노드들을

탐색한다면 우선, 노드 a가 단계 1에서 free node v로 선택된다. 단계 2에서는 a 노드를 root

로 하는 확장 트리(augmented tree)를 생성한다. 확장 트리는 루트에서 각 리프까지의 경로가

확장 경로인 것을 의미한다. 확장경로는 경로의 에지들이 루트에서 시작하여 매칭이 아닌

에지와 매칭인 에지들이 서로 반복되어 나타나는 것이다. 즉, 루트에서 시작하여 연결된 노

드들을 탐색하여 매칭된 노드이면 이에 매칭된 상대 노드를 탐색하고, 아니면(즉, free 노드

이면) 루트에서 그 free노드 까지의 확장 경로를 리턴하는 절차를 반복한다. 위 예에서는 노

드의 탐색을 너비우선 순회 방법에 의하였다. 그림 8-2의 (1)에서 a에 연결된 노드는 b와 c

가 있다. b를 우선적으로 탐색하고, 이것이 free노드이므로 그림 8-2의 (2)와 같은 확장 경로

를 생성한다. 이 확장경로는 기존의 매칭된 노드들을 포함하지 않으므로 이 두 노드를 매칭

시킨다. 그 결과는 [그림 8-2]의 (3)이다.

[그림 8-.2]의 (3)에서의 free노드 c를 루트로 하여 확장 트리를 생성한다. c에 연결된 노드

들은 a와 d이다. a를 우선적으로 탐색하여 매칭된 노드이므로 이에 상대 노드인 b를 탐색한

다. 너비우선 탐색에 의해 다음에 d를 탐색한다. d 노드는 free노드이므로 루트에서 d까지의

확장경로를 리턴한다. 즉, 확장경로 상의 free 노드인 c와 d를 매칭시킨다. 그 결과는 그림

[8-2-(5)]와 같다. 이 그림에서 free 노드 e를 루트로 한다. e에 연결된 노드는 b와 g이다. 우선

적으로 b를 탐색하여 매칭된 노드이므로 상대 노드인 a를 탐색한다. 다음에 g를 탐색하여

free노드이므로 e에서 g까지의 확장경로를 리턴한다. 이 경로 상의 e와 g를 매칭시킨다. 결과

는 [그림 8-2-(7)]이다. Free 노드 f를 루트로 하는 확장 트리는 [그림 8-2-(8)]이다. 이 그림에

서는 확장경로가 존재하지 않는다. 왜냐하면 확장경로는 free노드에서 시작하여 free 노드로

끝나는 경로이기 때문이다. 따라서, 단계 4에 의해 이 트리를 그래프에서 제거한다. 그 결과

는 [그림 8-2-(9)]와 같다. Free 노드 g를 루트로 하는 확장트리는 [그림 8-2-(10)]이다. 그러나,

확장경로는 존재하지 않는다. 이 트리를 [그림 8-2-(9)]의 그래프에서 제거하면 더 이상의

Page 109: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

101

free노드는 존재하지 않게 되어 알고리즘은 종료된다. 결국 최대 매칭은 (a, b), (c, d), (e, g)이

다.

a b

c d

e

f

g

h

a b

c d

e

f

g

h

M

v

(2) Augmented tree (root : a)

a b

c d

e

f

g

h

(1) Graph

(3) Graph with one match

v

a b

uv

a

c d

bM

v u

M

M

(4) Augmented tree (root : c)

v

(5) Graph with two match (6) Augmented tree (root : e)

v u

a b e gM

a b

c d

e

f

g

h

e g

h

v

(8) Augmented tree (root : f)(7) Graph with three match

(9) Graph after removing augmented tree

v

(10) Augmented tree (root : h)

M

M

Ma b

c d f

M

M

v

e g

h v

M

M

[그림 8-2] 이분 그래프에서의 최대매칭

Page 110: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

102

Page 111: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

103

9 장 네트워크 흐름

9.1 최대 흐름

방향을 갖는 그래프 G에서의 각 아크 ),( ji 에 용량인 양의 수 ijc 가 주어졌다고 하자. 이

용량은 안정상태에서 아크의 방향에 따라 노드 i 에서 노드 j로 흐를 수 있는 최대 흐름량

이라고 가정하자. 이러한 용량을 갖는 흐름 네트워크(capacitated flow network)에서 시작 노드

인 s 로부터 종료 노드인 t 까지의 최대 흐름량을 구하는 문제를 만들어 보자. 우선 ijx 를

아크 ),( ji 를 통해 흐르는 양으로 정의하자. 물리적인 흐름의 관점에서 다음의 관계가 성립

한다.

ijijcx 0

흐름 보존의 법칙은 시작 노드와 종료 노드를 제외한 나머지 노드에 대하여 들어오는 양과

나가는 양이 같아야 함을 의미한다.

=

=−

=−tiv

tsi

siv

xxj

ij

j

ji

,

, ,0

,

위의 두 식을 만족하는 각 아크의 흐름량을 유효 흐름(feasible flow)이라고 부르고, v를 흐름

량(flow value)이라고 부른다. s 에서 t 까지의 최대 흐름량을 구하는 문제는 선형계획 문제로

위의 두 식을 제한식으로 갖고, 목적함수는 최대 흐름량인 v*를 달성하는 것이다. 때문에 선

형계획 문제를 풀 수 있는 방법에 의해 최대흐름 문제의 최적해를 구할 수 있을 것이다. 그

러나, 해를 구할 수 있는 보다 효과적인 방법으로 확장 경로 알고리즘(augmenting path

algorithm)이 있다. 이 알고리즘은 두가지 개념인 잔여 네크워크(residual network)와 확장 경로

에 기초하고 있다.

잔여 네트워크는 현재의 해를 고려하여 원래의 네트워크에 부가적인 아크를 포함한다. 만약

현재의 해에서 아크 ),( ji 로 흐름 ijx 가 발생한다면 새로운 아크인 ),( ij 를 네트워크에 추

가한다. 이때 기존의 아크에 대한 용량은 ijijij xcc −=' 으로 감소시키고, 새로운 아크의 용량

은 ijij xc =' 으로 설정한다. 따라서, 아크의 용량들은 유효 용량의 개념을 갖게 된다. 이러한

새로운 아크로의 흐름은 역류 흐름의 의미를 가져 기존의 흐름을 감소 시킬 수 있다는 것을

의미한다.

P를 잔여 네트워크에서 s 로부터 t 로의 경로라고 하자. P에 속한 아크 ),( ji 가 s 에서 t 로

의 방향을 가지는 원래의 아크라면 전진 아크(forward arc)라고 하고, 새로이 추가된 역류 아

크이면 후진 아크(backward arc)라고 부른다. 주어진 흐름 )'(' ijxx = 에 대해 P에 속한 모든

아크 ),( ji 에 대해 '' ijij cx 이면 P를 주어진 흐름에 대한 흐름 확장경로(flow augmenting path)

라고 부른다.

[그림 9-1-(1)]의 네트워크에서 각 아크에 있는 두개의 숫자 중 첫번째 숫자는 용량 ijc 를 의

미하고, 두번째 숫자는 흐름량 ijx 를 의미한다. 이 흐름들은 s=1, t=6일 때 설명된 두 식의

조건을 만족하고, 흐름량은 3임을 쉽게 알 수 있다. 그림에서는 잔여 네트워크를 나타내지

않고 있지만, 그러한 네트워크를 쉽게 생성할 수 있다. [그림 9-1-(1)]에서 아크에 흐름이 있

Page 112: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

104

다면 역류 아크를 추가하면 된다. 주어진 흐름량에 대한 한 확장 경로는 [그림 9-1-(2)]와 같

다. 역류 아크를 따로 표시히지 않았으므로, 흐름이 있는 아크인 경우 방향이 반대인 아크를

포함하는 경로임에 유의하라. 이 그림에서 흐름량을 각 전진 아크로 1단위 증가할 수 있고,

각 후진 아크로 1 단위 감소시킬 수 있음을 알 수 있다. 그 결과는 흐름량이 증가되어 [그

림 9-1-(3)]과 같이 흐름량은 4가 된다. 위 예에서 보듯이 확장 경로가 존재한다는 것은 흐름

량을 증가 시킬 수 있는 여지가 있다는 것을 의미한다. 후진 아크인 (4, 5)로의 1단위 흐름은

원래의 아크인 (5, 4)로의 흐름을 1 단위 감소하고, 그 대신에 전진 아크인 (5, 6)으로의 흐름

을 1단위 증가시킨다는 의미이다.

어느 네트워크에서의 ),( ts -절단 집합(cutset)은 모든 노드가 두 부분의 집합인 ),( TS 로 분리

되는 것으로 TtSs , 이다. 절단 집합 ),( TS 의 용량은 다음과 같이 정의된다.

=Si Tj

ijcTSc ),(

즉, S에서 T로 연결된 모든 아크의 용량을 더한 값이다.

한 ),( ts -흐름의 양은 어느 ),( ts -절단 집합의 용량도 초과할 수 없다. )(ij

xx = 를 흐름이라

고 하고, ),( TS 를 하나의 ),( ts -절단 집합이라고 하자. 다음 식을 얻을 수 있다.

−=

−+−=

−=

Si Tj

jiij

Si Sj Si Tj

jiijjiij

Si j j

jiij

xx

xxxx

xxv

)(

)()(

즉, 어느 흐름양 v는 어떠한 절단집합의 순 흐름과 같다. 그러나, ijijcx 이고, 0

jix 이므

로 다음 관계가 성립한다.

=Si Tj

ijTSccv ),(

[그림 9-1-(3)]에서 보인 확장된 흐름의 경우 흐름량과 똑 같은 용량을 가진 ),( ts -절단 집합

이 존재한다. 예를 들어, S = {1, 2}, T = {3, 4, 5, 6} 일 경우이다. 이 사실은 방금 전의 분석에

서 본 바와 같이 흐름은 최대이고, 절단 집합은 최소 용량을 갖기 때문이다. 만약

TjSi , 이면 각 아크 ),( ji 는 포화 상태가 되어 ijijcx = 이고, TiSj , 이면 0=

ijx 임

에 유의하라.

위에서 살펴 본 사실에 입각하여 네트워크 흐름에서 중요한 세가지 정리를 알아보기로 한다.

정리 (확장 경로 정리)

s에서 t로의 확장경로가 존재하지 않을 경우에만 흐름은 최대이다.

증명) 확장 경로가 존재한다면 명백히 흐름은 최대가 아니다. x를 확장경로를 허락하지 않는

흐름이라고 하자. s에서 j노드(s를 포함하여)로 확장경로를 허용할 때 이 모든 j노드들의 집합

을 S라고 하고, T를 그렇지 않은 노드들이라고 하자. 확장경로의 정의와 S, T의 정의에 따라

모든 TjSi , 에 대해 ijijcx = 이고, 0=

ijx 이다. 따라서,

Page 113: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

105

=Si Tj

ijcv

으로 절단집합 ),( TS 의 용량이다. 이전의 식으로 부터 이 흐름은 최대이다.

2,2

1

2

3

4

5

61,0

2,1

1,0

2,2

1,1

2,1

3,2

s t

1

2 4

5

6

1

2

3

4

5

6

(1) Feasible flow

(2) Augmenting path

(3) Augmented flow

s t+1

3,1

+1

-1

+1

2,2

3,22,2

1,0 1,0

2,2

1,0

3,2

2,2

[그림 9-1] 확장된 흐름

정리 (정수흐름 정리)

만약, 모든 용량이 정수라면, 최대흐름량은 정수이다.

증명) 모든 아크의 용량이 정수라고 가정하고, 모든 i 와 j에 대해 00 =ij

x 라고 하자. 만약,

흐름 )( 00

ijxx = 가 최대가 아니라면, 확장경로가 존재하게 되어

0x 의 값보다 더 큰 값을 갖

는 정수의 흐름 1x 이 있게 된다. 만약,

1x 이 최대가 아니라면, 확장경로가 존재하게 되어

마찬가지로 더 큰 값을 갖는 흐름이 존재한다. 이러한 방법으로 구한 흐름은 이전의 값 보

다 최소한 1 더 큰 값을 가질 수 있다(용량은 정수 이므로). 결국 최대 흐름에 도달하게 되

고, 더 이상의 확장경로가 존재하지 않게 되는 정수의 흐름 값을 갖게 된다.

Page 114: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

106

정리 (최대흐름-최소절단 정리)

한 ),( ts -흐름의 최대 흐름량은 ),( ts -절단집합의 최소 용량과 같다.

증명) 이전의 두 증명으로 모든 용량이 정수일 경우 최대흐름-최소절단 정리를 증명하기에

충분하다.

다음에 설명되는 최대흐름을 구하는 알고리즘은 이 전에 설명된 세 정리에 의한다.

알고리즘: MaximalFlow

단계 0: (시작)

)(ij

xx = 의 값을 0으로 놓고, 시작 노드 s에 확정 라벨 ),( − 을 붙인다.

단계 1: (라벨링)

(1.1) 만약 라벨이 붙은 모든 노드들이 탐색되었다면, 단계 3으로 간다.

(1.2) 라벨이 붙은 노드 중 아직 탐색되지 않은 노드 i 를 선택하여 다음과 같은

절차를 수행한다.

각 아크 ),( ji 에 대하여 만약 ijijcx 이고, j가 아직 라벨이 붙지 않았다

면 j에 라벨 ),(j

i +를 붙인다. 단, },min{

iijijjxc −= 이다.

각 아크 ),( ij 에 대하여 만약 0ij

x 이고, j가 아직 라벨이 붙지 않았다면

j에 라벨 ),(j

i −를 붙인다. 단, },min{

ijijx = 이다.

(1.3) 만약 노드 t 에 라벨이 붙었다면, 단계 2로 간다. 그렇지 않으면 단계 1.1로

간다.

단계 2: (확장)

노드 t에서 시작하여 인덱스된 라벨을 사용하여 확장경로를 생성한다. 전진 아크

에 대해서는 흐름을 i 만큼 증가시키고, 후진아크에 대해서는 i

만큼 흐름을 감소

시킨다. S를 제외한 모든 노드의 라벨을 지우고, 단계 1로 간다.

단계 3: (최소 절단의 생성)

각 아크의 흐름은 최대이다. 라벨이 붙은 노드들을 S에 넣고, 라벨이 붙지 않은

노드들을 T에 놓아 최소 절단을 구한다.

이 알고리즘에서 단계 1의 라벨링은 확장경로를 쉽게 구하기 위한 방법으로 사용된다. 라

벨링이 끝난 후 종료 노드에서 시작하여 라벨의 첫번째 값이 의미하는 노드를 차례로 찾아

가 시작 노드가 나올 때 까지 반복하면 확장경로를 구할 수 있다.

예제) [그림 9-2]는 네트워크에서 최대흐름 알고리즘을 단계적으로 적용한 예를 보이고 있다.

5번의 반복에 의해 최대 흐름량인 5를 구한다. 알고리즘의 단계 3에 따라 반복 5의 마지막

네트워크에서 ),( ts -절단집합은 (1, 3, 4), (2, 5, 6)임을 알 수 있다. 절단집합에 해당하는 아크

들은 {(1,2), (3,5), (4,6)}이다. 이들 아크들의 용량을 합친 최소 절단의 값은 5로서 최대 흐름

량과 같다.

Page 115: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

107

(1) 반복 1

(8,0)

1

2

3

4

5

6

(3,0)

(4,0)

(2,0)(5,0)

(1,0)

s t

(2,0)

(4,0)

(-,)

(1+,2)

(1+,8)

(2+,2)

(2+,2)

(4+,1)

(8,0)

1

2

3

4

5

6

(3,1)

(4,0)

(2,0)(5,0)

(1,1)

s t

(2,1)

(4,0)

(-,)

(1+,1)

(1+,8)

(2+,1)

(2+,1)

(5+,1)

(2) 반복 2

(3) 반복 3

(8,0)

1

2

3

4

5

6

(3,1)

(4,0)

(2,0)(5,1)

(1,1)

s t

(2,2)

(4,1)

(-,)

(4-,1)

(1+,8)

(3+,4)

(3+,2)

(5+,2)

(8,2)

1

2

3

4

5

6

(3,1)

(4,0)

(2,2)(5,3)

(1,1)

s t

(2,2)

(4,1)

(-,)

(4-,1)

(1+,6)

(3+,4)

(2+,1)

(5+,1)

(4) 반복 4

(5) 반복 5

(8,3)

1

2

3

4

5

6

(3,0)

(4,1)

(2,2)(5,4)

(1,1)

s t

(2,2)

(4,2)

(-,)

(1+,5)

(3+,3)

[그림 9-2] 최대흐름 알고리즘의 적용

Page 116: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

108

O

A

C

B D

E

T5

1

4

3

4

27 5

1

4

9

6

0

0

1

0 0

0

0 1

0

00

0

[그림 9-3] 최대 흐름을 위한 예제 네트워크

[표 9-1] 네트워크의 용량 행렬

O A B C D E T

O 0 5 7 4 0 0 0

A 0 0 1 0 3 0 0

B 0 1 0 2 4 5 0

C 0 0 0 0 0 4 0

D 0 0 0 0 0 1 9

E 0 0 0 0 1 0 6

T 0 0 0 0 0 0 0

예제) [그림 9-3]의 네트워크에서 O에서 T까지 최대 흐름을 구한다. 각 아크의 값은 방향에

따른 용량을 나타낸다. 예를 들어, O에서 A로의 용량은 5이고, A에서 O로의 용량은 0이다.

따라서, 아크의 방향은 용량에 따라 결정된다. 즉, A에서 O로의 방향을 가지는 아크는 존재

하지 않는다. 그러나, A와 B사이에 용량 1의 두개 방향을 갖는 아크가 존재한다. 이 문제의

각 아크에 대한 용량을 행렬로 나타내면 표 9-1과 같다.

단계 1) O에서 T까지의 확장경로를 라벨링 방법에 의해 구한다.

노드 라벨

O ),( −

A (O, 5) *

B (O, 7)

C (O, 4)

D (A, 3) *

E (B, 5)

T (D, 9) *

(O, A, D, T)로의 아크에 흐름 3을 생성한다.

Page 117: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

109

단계 2) 각 아크의 여유 용량을 계산한다.

O A B C D E T

O 0 5-3=2 7 4 0 0 0

A 0+3=3 0 1 0 3-3=0 0 0

B 0 1 0 2 4 5 0

C 0 0 0 0 0 4 0

D 0 0+3=3 0 0 0 1 9-3=6

E 0 0 0 0 1 0 6

T 0 0 0 0 0+3=3 0 0

O에서 T까지의 확장경로를 구한다.

노드 라벨

O ),( −

A (O, 2)

B (O, 7) *

C (O, 4)

D (B, 4) *

E (B, 5)

T (D, 6) *

(O, B, D, T)로의 아크에 흐름 4를 생성한다.

단계 3) 각 아크의 여유 용량을 계산한다.

O A B C D E T

O 0 2 7-4=3 4 0 0 0

A 3 0 1 0 0 0 0

B 0+4=4 1 0 2 4-4=0 5 0

C 0 0 0 0 0 4 0

D 0 3 0+4=4 0 0 1 6-4=2

E 0 0 0 0 1 0 6

T 0 0 0 0 3+4=7 0 0

O에서 T까지의 확장경로를 구한다.

노드 라벨

O ),( −

A (O, 2)

B (O, 3) *

C (O, 4)

D (E, 1)

E (B, 5) *

T (E, 6) *

(O, B, E, T)로의 아크에 흐름 3을 생성한다.

단계 4) 각 아크의 여유 용량을 계산한다.

Page 118: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

110

O A B C D E T

O 0 2 3-3=0 4 0 0 0

A 3 0 1 0 0 0 0

B 4+3=7 1 0 2 0 5-3=2 0

C 0 0 0 0 0 4 0

D 0 3 4 0 0 1 2

E 0 0 0+3=3 0 1 0 6-3=3

T 0 0 0 0 7 0+3=3 0

O에서 T까지의 확장경로를 구한다.

노드 라벨

O ),( −

A (O, 2)

B (A, 1)

C (O, 4) *

D (E, 1)

E (C, 4) *

T (E, 3) *

(O, C, E, T)로의 아크에 흐름 3을 생성한다.

단계 5) 각 아크의 여유 용량을 계산한다.

O A B C D E T

O 0 2 0 4-3=1 0 0 0

A 3 0 1 0 0 0 0

B 7 1 0 2 0 2 0

C 0+3=3 0 0 0 0 4-3=1 0

D 0 3 4 0 0 1 2

E 0 0 3 0+3=3 1 0 3-3=0

T 0 0 0 0 7 3+3=6 0

O에서 T까지의 확장경로를 구한다.

노드 라벨

O ),( −

A (O, 2)

B (A, 1)

C (O, 1) *

D (E, 1) *

E (C, 1) *

T (D, 2) *

(O, C, E, D, T)로의 아크에 흐름 1을 생성한다.

단계 6) 각 아크의 여유 용량을 계산한다.

Page 119: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

111

O A B C D E T

O 0 2 0 1-1=0 0 0 0

A 3 0 1 0 0 0 0

B 7 1 0 2 0 2 0

C 3+1=4 0 0 0 0 1-1=0 0

D 0 3 4 0 0 1+1=2 2-1=1

E 0 0 3 3+1=4 1-1=0 0 0

T 0 0 0 0 7+1=8 6 0

O에서 T까지의 확장경로를 구한다.

노드 라벨

O ),( −

A (O, 2)

B (A, 1)

C (B, 2)

D

E (B, 2)

T

라벨이 붙은 모든 노드들이 탐색되었으므로 종료한다.

따라서, 총흐름량은 14로 각 아크의 흐름은 다음과 같다.

O A B C D E T

O 0 5-2=3 7 4 0 0 0

A 0 0 1-1=0 0 3 0 0

B 0 1-1=0 0 2-2=0 4 5-2=3 0

C 0 0 0 0 0 4 0

D 0 0 0 0 0 1-2 < 0 9-1=8

E 0 0 0 0 1 0 6

T 0 0 0 0 0 0 0

위 표에서 아크 D→E의 여유 용량은 2이고, E→D의 여유용량은 0이다. 이는 E→D로 흐름 1

이 발생했음을 의미한다. 시작 노드와 종료노드가 각각 하나인 문제에서 양방향 흐름이 가

능한 아크가 있을 경우 최적해에는 양방향 흐름이 동시에 발생하지 않는다.

9.2 모든 노드 쌍에 대한 최대 흐름

최대흐름 알고리즘은 시작 노드와 종료 노드가 각각 하나씩 주어진 상황에서 적용될 수 있

다. 만약 n개의 노드로 구성된 비 방향성 그래프에서 모든 두 노드를 시작과 종료 노드로

한다면 n × (n − 1)/2 번의 최대흐름 문제를 풀어야 한다. 물론, 방향성 그래프에서는

n × (n − 1)개의 최대 흐름 문제가 존재한다. [그림 9.1]의 네트워크를 예로 든다면 모든 노드

쌍인 30개의 최대 흐름 문제가 존재한다.

비 방향성 그래프인 경우 n − 1번의 최대 흐름 문제를 풀어 모든 노드 쌍에 대한 최대

흐름량을 구할 수 있는 방법은 Gomory-Hu 알고리즘에 의한다. 알고리즘은 초기에 모든 노

드를 하나의 그룹으로 하고, 그룹을 순차적으로 분리하여 트리를 생성한다. 분리된 노드 또

Page 120: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

112

는 노드 그룹들은 분리시킨 그룹 또는 노드와 에지로 이어지고, 에지의 용량은 최대흐름량

으로 한다.

Gomory-Hu 알고리즘

단계 0: 모든 노드 그룹을 하나의 노드로 하는 트리 T를 구성한다.

l = 1

단계 1: G에서 임의의 두 노드 s와 t를 선택한다.

단계 2: s와 t를 시작과 종료 노드로 하여 최대 흐름 알고리즘을 적용한다.

단계 3: 최대 흐름 문제의 해에서 최소 절단을 구하고, 이에 해당하는 에지와 두 노드 그

룹을 노드로 하도록 T를 분리 한다. 에지의 가중치는 최소 절단량으로 한다.

단계 4: l = l + 1

만약 l = n이면 종료한다.

단계 5: T에서 아직 분리 되지 않은 노드 그룹에 있는 임의의 두 노드를 s와 t로 하고, 단

계 2로 간다.

예제) [그림 9-4]와 같은 네트워크에서 모든 노드 쌍을 시작과 종료 노드로 하여 최대 흐

름을 구해보자.

1 3

2

4

5

6 2

4

2

3

3 7

5

[그림 9-4] 모든 노드쌍에 대한 최대 흐름 예제

반복 1: 1번 노드와 5번 노드를 각각 시작노드와 종료 노드로 하여 최대흐름을 구한다. 총

흐름량은 11로 최소 절단은 그림 9-5와 같다. 따라서, 1, 2 번노드와 3, 4, 5번 노드들

을 각각 하나의 그룹으로 한다.

1 3

2

4

5

6 2

4

2

3

3 7

5

1,2 3,4,5

11

[그림 9-5] 반복 1

Page 121: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

113

반복 2: 하나의 그룹을 형성한 1, 2 번 노드를 대상으로 1번 노드를 시작, 2번 노드를 종료노

드로 하여 최대 흐름을 구한다. 총 흐름량은 10으로 최소절단은 그림 9-6과 같다.

1 3

2

4

5

6 2

4

2

3

3 7

5

3,4,511

1 210

[그림 9-6] 반복 2

반복 3: 하나의 그룹인 3, 4, 5 번 노드를 대상으로 3번 노드를 시작, 5번 노드를 종료노드로

하여 최대흐름을 구한다. 총 흐름량은 14로 최소절단은 그림 9-7과 같다.

1 3

2

4

5

6 2

4

2

3

3 7

5

3,411

1 210

514

[그림 9-7] 반복 3

반복 4: 같은 그룹인 3, 4 번 노드를 대상으로 3번 노드를 시작, 4번 노드를 종료노드로 하여

최대흐름을 구한다. 총 흐름량은 12로 최소절단은 그림 9-8과 같다.

1 3

2

4

5

6 2

4

2

3

3 7

5

111 2

105

143 4

12

[그림 9-8] 반복 4

[그림 9-8]로부터 모든 노드쌍에 대한 최대흐름을 구할 수 있다. 예를 들어, 2번 노드에서

Page 122: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

114

5번 노드로 향하는 최대흐름량은 (2, 3), (3, 4), (4, 5)에지의 최소 흐름인 11이 된다.

9.3 최대 용량 경로

최대 흐름 문제에서의 네트워크와 같이 에지의 가중치는 용량을 나타낸다고 하자. 시작노

드 s 에서 종료노드 t 까지의 경로 중 가장 많은 흐름을 허용하는 경로를 찾아보자. 예를 들

어, [그림 9-1]에서 1 번 노드에서 6 번 노드까지의 경로는 모두 4 개이다.

1. 1→2→4→6: 흐름량 = 2

2. 1→2→4→3→5→6: 흐름량 = 1

3. 1→3→5→6: 흐름량 = 2

4. 1→3→2→4→6: 흐름량 = 1

이 중 가장 큰 흐름을 허용하는 경로는 1, 3 번 으로 흐름량은 2 이다.

이 문제는 최단 거리 문제와 유사한 특성을 갖고 있다. 1 번 노드에서 출발하여 6 번노드

까지 오기 위하여 4 번 노드 또는 5 번 노드를 지나야 한다. 1 번 노드에서 4 번과 5 번 노드

노드까지의 최대 용량 경로와 이에 해당하는 최대 용량 F(4), F(5)를 알고 있다고 하면 6 번

노드까지의 최대 용량 F(6)는 다음과 같이 계산될 수 있다.

F(6) = max{min{F(4) , c(4, 6)}, min{F(5), c(5, 6)}}

위 식은 벨맨의 식과 매우 유사하다. 따라서, 밸맨의 식에 의한 최단거리 알고리즘을 수

정하여 최대 용량 경로 문제를 해결할 수 있다. 특히, 모든 두 노드의 최대 용량 경로를 구

하기 위하여는 Flyod-Wharshall 의 방법을 수정할 수 있다. 이는 Hu 가 제안한 방법으로 다음

과 같다.

알고리즘: MaxCapacityPathAlgorithm

단계 0] 초기화

0.2 다음의 성분을 갖는 nn 행렬 F를 생성한다.

==

exist not does ),( if , -

if 0,

exists ),( if ),,(

),(1

ji

ji

jijic

jif

0.2 p i j i( , ) = 의 성분을 갖는 nn 행렬 P를 생성한다

0.3 =k 1

단계 1] 1+kF 생성

1.1 nn 행렬 1+kF 를 다음과 같이 생성한다.

)}},1(),1,(min{),,(max{),(1 jkfkifjifjif kkkk ++=+

1.2 만약 )},1(),1,(min{ jkfkif kk ++ 이 선택되었다면 ),(),( jkpjip = 로 한다.

Page 123: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

115

단계 2] 정지 조사

2.1 1+= kk

2.2 만약 1+= nk 이면 정지하고 그렇지 않으면 단계 1로 간다.

예제) 7 장에 있는 [그림 7-3]의 네트워크에 최대 용량 경로 알고리즘을 적용한 결과는 다

음과 같다.

=

=

44444

33333

22222

11111

00000

,

0572

5034

73023

2206

4360

)1()1( PF

=

=

44441

33303

22202

10011

10000

,

05722

50344

73033

24306

4360

)2()2( PF

=

=

44441

33303

22202

10011

10000

,

05722

50344

73033

24306

24360

)3()3( PF

=

=

44402

33303

22202

20011

20000

,

05733

50344

73033

34306

34360

)4()4( PF

=

=

44403

33303

22202

30011

30000

,

05744

50344

73033

44306

44360

)5()5( PF

=

=

44403

33403

24203

30411

30400

,

05744

50544

75044

44406

44460

)6()6( PF

어느 두 노드의 최대 용량 경로를 알기 위하여 행렬 P가 계산되었음에 유의하라. 만약,

p[i][j]=k이면 i와 j사이의 최대 용량 경로의 마지막 노드는 k이다.

Page 124: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

116

예를 들어, O 에서 B 까지의 최대용량 경로는 O→C→T→B 로 용량은 4 이다.

9.4 최소 비용 흐름(Minimum cost flows)

흐름 네트워크에서 각 아크에 용량 ijc 에 부가하여 비용 ija 가 할당되었다고 하자. 흐름

)( ijxx = 에 대한 비용은 다음과 같다.

i j

ijij xa

이제 주어진 흐름량에서 최소의 비용 흐름을 구하는 문제를 알아보자.

이 문제는 할당문제와 동일하다. n명의 작업자와 n대의 기계가 있고, i번째 작업자를 j번째

기계에 할당하는데 드는 비용은 ija 이다. 이미 설명된 바와 같이 할당문제는 이분 그래프로

표현될 수 있다. 흐름 네트워크 문제로 변형하기 위하여 이분 그래프에 시작 노드와 종료

노드를 추가한다. 시작 노드에서 이분 그래프의 첫번째 부분의 노드들로 잇는 아크를 추가

하고, 두번째 부분의 노드들에서 종료 노드들로 아크를 추가한다. 이분 그래프에서 각 아크

의 (용량, 비용)은 (무한대, ija )이고, 추가된 아크의 경우는 (1, 0)이다. 최소의 비용을 갖는

흐름량 n이 이 문제의 해이다. 이러한 할당문제의 흐름 네트워크는 [그림 9-9]와 같다.

s t

작업자 i 기계 j

(1,0)

(,aij)

(1,0)

1

2

n

1

2

n

[그림 9-9] 할당문제를 위한 네트워크

[그림 9-9]에서 총 흐름량은 n으로 고정되어 있다. s 노드에서 작업자 노드들로의 아크에 대

한 용량이 1이므로 이들 아크들을 통하여 1만큼 흐를 것이다. 기계 노드에서 t노드로의 아

크에 대한 용량도 1이다. 따라서, 각 기계 노드에서 t 노드로의 아크를 통하여 1만큼 흐를

것이다. 문제는 각 작업자 노드에서 기계 노드들로 1만큼 흐르는데 흐름에 대한 총 비용을

최소화하는 것이다.

문제를 해결하기 위하여 우선 다음과 같은 용어를 사용하자.

Page 125: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

117

확장경로의 비용: 전진아크의 비용을 더한 값에 후진아크의 비용을 뺀 값

확장 사이클: 닫혀진 확장경로

확장경로는 최대 흐름문제에서 설명한 것과 같이 시작 노드와 종료 노드가 정해진 경로나,

확장사이클의 경우 시작 노드와 종료 노드가 정해지지 않은 경로에 대한 사이클로 간주하여

야 한다. 어느 확장경로의 비용은 경로를 통한 흐름의 1 단위 증가량에 대한 비용의 순 변

화량이다. 다음 두 정리를 보자. 증명은 참고 문헌을 참고하기를 바란다.

정리) 음수의 비용을 갖는 흐름 확장 사이클이 존재하지 않을 때 만 흐름량 v는 최소 비용

을 갖는다.

정리) 흐름량 v에서 최소 비용의 흐름 확장경로를 통해 만큼 흐름을 증가하면, 최소비용 흐

름량 v+ 를 가져온다.

위의 정리들을 설명하기 위하여 어느 흐름 )( ijxx = 에서 다음과 같은 기호의 정의를 하자.

==+

=−

=

=

0, if ,

0, if ,

0, if },,min{

0, if ,

jiijij

jiijijji

jiijijjiij

jiijijij

ij

xcx

xcxa

xcxaa

xcxa

a

아크의 값이 (용량, 비용)인 [그림 9-10-(a)]에서 경로 A→C→D로 2 만큼 흐르고 비용은 44이

다. [그림 9-10-(b)]는 각 아크의 새로운 비용, ija 을 위의 식에 의해 구한 것이다. 아크의 값

은 (여유용량, ija )를 의미한다. 이 네트워크는 이전에 설명한 잔여 네트워크와 유사함에 유

의하라. 흐름량이 2인 경우 A에서 D로의 이 흐름이 최소 비용인지를 알기 위하여는 [그림

9-10-(b)]에서 음수의 비용을 갖는 흐름 확장 사이클이 존재하는지를 조사하여야 한다. 만약

존재한다면, 그 확장 사이클로의 흐름을 조정하여 보다 적은 비용의 흐름을 구할 수 있다.

[그림 9-10-(b)]에서 다수의 사이클이 존재한다. 그러나, 사이클이 음수의 비용을 갖기 위하여

최소한 하나 이상의 음수 값을 갖는 아크를 포함하여야 한다. 음수 값을 갖는 아크는 이미

흐름이 발생한 아크들이다. 따라서, 다음의 3 사이클을 고려할 수 있다.

A→B→C→A: 비용 = −17

A→B→D→C→A: 비용 = −8

A→C→A: 비용 = 0

음수의 비용을 갖는 사이클이 존재하므로 현재의 흐름은 최소의 비용이 아니다. 만약, 첫번

째 사이클에서 A→B→C→A로 2 만큼 흐르게 하면 흐름 A→B→C→D가 생기고, 비용은 10

(44−172 = 10)이 되어 비용은 34 만큼 줄게 된다.

음수의 비용을 갖는 흐름확장 사이클을 구하기 위하여는 최단거리 구하는 방법인 Floyd-

Warshall방법을 적용할 수 있다.

Page 126: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

118

A

B

C

D

(12,2)

(16,20)

(6,1)

(4,12)

(2,2)

+2 -2

X=2 X=2

A

B

C

D

(12,2) (4,12)

(14,20) (0,)

(2,-2)(2,-20)

(a) Flow value = 2 (b) Augmenting cycle

(6,1)

[그림 9-10] 흐름확장 사이클

최소비용의 확장경로를 구하기 위하여 최단거리 계산 방법인 Dijkstra방법을 적용할 수 있다.

만약, i노드에서 j노드로의 아크가 없다면, 이 아크의 용량은 0이고 비용은 무한대이다. 아크

의 거리가 ija 일 때 s에서 t까지의 최단거리를 갖는 경로가 최소비용 (s, t) 확장경로다. [그림

9-10-(a)]의 네트워크에서 현재 흐름이 없다고 가정하자. 2의 흐름을 최소의 비용으로 A에서

D로 보내려고 한다고 하자. 현재 아무런 흐름이 없으므로, ijij aa = 이다. 이 비용을 이용하여

A에서 D로의 최단거리를 구하면, A→B→C→D로 총 비용은 5이다. 경로의 아크에 걸려있는

용량이 2보다 크거나 같으므로 흐름 2를 보낼 수 있다. 이 때 총 비용은 22 = 4이다.

지금까지 설명한 방법에 기초한 Klein, Busacker, Gowen의 알고리즘을 알아보자.

알고리즘: MinimumCostFlow

단계 0: (시작)

)( ijxx = 를 흐름량 vv ' 인 어느 (s, t) 흐름이라고 하자.

단계 1: (음수의 사이클 제거)

음수의 사이클을 탐지하는 목적에서 ija 인 아크의 거리에 최단거리 알고리즘을

적용한다. 만약, 음수의 사이클이 없다면 단계 2로 간다.

'v 과 같은 흐름량을 가지나 더 작은 비용을 가져오는 음수의 사이클에 흐름을

확장한다. 단계 (1.1)로 간다.

단계 2: (최소 비용 확장)

(2.0) 만약, 흐름량 vv =' 라면, 현재의 흐름은 최적치이므로 종료한다. 그렇지

않다면 단계 (2.1)로 간다.

(2.1) ija 에 대해 s에서 t까지의 최단거리를 구한다. 그러한 최단거리가 존재하

지 않는다면, 최적해는 존재치 않으므로 종료한다.

(2.2) vv +' 가 되도록 단계 (2.1)에서 구한 최단거리의 경로에서 흐름량을

Page 127: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

119

만큼 확장한다. 단계 (2.0)으로 간다.

단계 1은 현재의 흐름이 최적인지를 조사하는 것이고, 단계 2는 흐름을 증가시키는 절차이

다. 만약, 현재의 흐름이 0에서 시작한다면 단계 1은 필요하지 않다.

예제) 할당문제에 위의 알고리즘 단계 2를 적용해보자. [그림 9-11]에서 어느 두 노드 간에

아크가 없다면, 용량이 0이고, 비용이 인 가상적인 아크가 있다고 가정한다.

1

(,14)

2

(,9)

B

(,7)

3 C

(, 5)A

작업자 기계

(,10)

(,12)

(,15)

(,13)

(,16)

s t

(1,0)

(1,0)

(1,0)

(1,0)

(1,0)

(1,0)

[그림 9-11] 할당문제의 흐름 네트워크

1) ija 를 이용한 최단거리는 s→1→A→t로서 총거리는 5이다. 이 경로를 통해 흐름 1을 증가

시킨다.

2) ija 의 계산

S 1 2 3 A B C t

S 0 0

1 0 7 9

2 14 10 12

3 15 13 16

A -5

B 0

C 0

T 0

S에서 t까지의 최단거리는 s→2→B→t이다. 이 경로를 통하여 흐름 1을 증가시킨다.

Page 128: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

120

3) ija 의 계산

S 1 2 3 A B C t

S 0

1 0 7 9

2 0 14 12

3 15 13 16

A -5

B -10

C 0

T 0 0

S에서 t까지의 최단거리는 s→3→B→2→C→t이다. 이 경로를 통하여 흐름 1을 증가시킨다.

즉, 전진아크에는 1을 증가하고, 후진아크에는 1을 감소시킨다.

흐름량은 3이므로 알고리즘은 종료된다. 결과적으로 (1, A), (2, C), (3, B)의 할당이 이루어

진다.

설명된 할당문제외에 여러 문제가 최소비용 흐름문제로 변환될 수 있다. 예를 들어, 수송문

제, 최단거리 문제, 최대 흐름문제 등이 이에 속한다.

9.5 K-연결성

통신 네트워크 설계에서 중요한 문제 중의 하나는 일정 기준의 성능과 신뢰도 조건을 만족

하면서 최소의 비용으로 통신망이 구성되도록 하는 최적의 네트워크을 결정하는 것이다.

통신 네트워크을 그래프로 표현하기 위하여 네트워크 교환기를 노드로 하고, 교환기 간의

통신 라인을 아크로 표현한다. 이러한 그래프에서 통신 네트워크의 신뢰성을 위한 가장 일

반적인 조건은 어느 두 노드 간에도 최소 )2(K 개의 서로 다른 경로가 존재하도록 하는

것이다. 이러한 경로는 에지가 서로 다른 경로(edge-disjoint path)와 노드가 서로 다른 경로

(node-disjoint path)로 구분된다. 이러한 K개의 경로가 존재하는 것을 각각 edge connectivity와

vertex connectivity라고 한다. 일반적인 것은 노드가 서로 다른 경로로 각 경로는 서로 다른

노드들을 포함하고 있는 것이다. 즉, 두 노드 간의 경로들에 이들 노드를 제외하고 어느 노

드도 최대 한번 포함되는 것을 의미한다. 노드가 서로 다른 경로 조건이 에지가 서로 다른

경로 조건 보다 제한적이어서 신뢰성이 더 높은 네트워크를 가능케 한다. 예를 들어, 어느

두 노드 간에 노드가 서로 다른 경로가 2개 있는 경우 한 노드가 고장나도 다른 노드 간의

통신은 가능하다. 고장난 노드를 통과하지 않는 또 다른 경로가 항상 존재하기 때문이다. 그

러나, 에지가 서로 다른 경로인 경우에는 한 노드의 고장으로 이 노드를 연결하는 모든 에

지가 통신이 불가능하여 두 노드 간에 통신이 불가능할 수 있다.

어느 두 노드 간에도 최소 K개의 노드가 서로 다른 경로가 있도록 하는 것을 일반적으로

K-연결성(K-connectivity)이라고 한다. 주어진 그래프 G 가 K-연결성을 만족하는지를 조사하

는 방법은 그래프를 최대 흐름문제로 변형하는 방법을 이용하여 수행할 수 있다.

어느 두 노드 u, v간의 경로 수를 ),( vuk 라고 하자. 그래프 G의 연결성은 다음과 같다.

),(every for )},,(min{)( vuvukGk =

Page 129: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

121

방향성 그래프를 대상으로 ),( vuk 를 구하는 방법은 다음 알고리즘에 의한다. 만약 비방향성

그래프이면 한 에지를 방향이 있는 두 에지로 바꾼 후 다음 알고리즘을 적용한다.

알고리즘: Connectivity

입력: 방향성 그래프 ),( EVG

u, v

출력: ),( vuk

처리:

단계 1: G를 다음과 같이 'G 으로 변형한다.

1) u, v를 제외한 G의 각 노드 iv 를 'G 의 두 노드 1iv , 2iv 로 대치한다.

2) 'G 에 아크 ),( 21 ii vv 를 추가한다.

3) G의 각 아크 ),( xvi 를 'G 의 ),( 12 xvi 으로 대치한다.

단계 2:

1) 'G 의 각 아크의 용량을 1로하여 u에서 v로의 최대 흐름량을 구한다.

2) 구한 최대 흐름량을 ),( vuk 로 출력하고 정지한다.

),( vuk 는 노드 u 에서 v 로의 최대 흐름을 구하는 것이다. 이 때 네트워크의 각 아크에 대

한 용량은 1로 한다. 최소 차수를 갖는 노드 u 의 차수가 d 라면 위의 알고리즘은 최대 흐

름 알고리즘을 )2/)1(1( −+−− dddnO 번 부른다.

예제) [그림 9-2]의 방향성 그래프에서 최대 흐름량 )6,1(k 을 구하기 위해 위 알고리즘의 단

계 1에서 생성된 그래프는 [그림 9-12]와 같다.

1

2

3 5’

4’

6

2’ 4

3’ 5

[그림 9-12] K-연결성 계산을 위한 그래프

연결성 값 )(Gk 를 구하기 위하여 모든 노드의 쌍에 대해 위 알고리즘을 적용하여야 한다.

그러나, 보다 효과적인 방법은 다음과 같다.

알고리즘: KConnectivity

입력: 방향성 그래프 ),( EVG

출력: )(Gk

처리:

Page 130: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

122

단계 1:

1-1) 최소 차수를 갖는 임의의 노드 u 를 선택한다.

1-2) }{|),(min{1 uVvvukk −= , v 는 u 에 인접하지 않다} .

1-3) yxyxkk ,|),(min{2 = 는 u 에 연결된 노드들이고, 서로 인접하고 있지않다}

단계 2: },min{)( 21 kkGK = 를 출력한다.

Page 131: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

123

10 장 활동 네크워크(Activity Networks)

10.1 프로젝트 네트워크

활동(activity: 시간이 걸리는 작업)과 활동 간의 선후행 관계를 나타내는 프로젝트 네트워크

의 표현방법에는 두가지가 있다. Activity-On-Arrow (AOA) 에서는 활동이 아크로 표현되고,

사건(event)은 노드로 표현되는 반면, Activity-On-Node (AON) 에서는 활동이 노드로 표현되고,

선후행 관계가 아크로 표현된다. AON은 보통 Precedence Diagram Method (PDM)으로 불리어

대부분의 상용 프로젝트 관리 소프트웨어에서 사용된다.

이 문서에서 프로젝트 네트워크는 다음의 세 구성요소를 갖는 AOA를 대상으로 한다.

⚫ 아크: 활동을 표현

⚫ 노드: 사건(어떤 활동의 시작 또는 끝)을 표현

⚫ 가상 활동 아크(dummy activity arc): 단지 활동 간의 선 후행관계를 표현

다음의 운영과학 연구에 대한 프로젝트 활동들을 AOA 네트워크로 표현해 보자.

(A) 시스템 구조에 대한 예비 연구

(B) 이론적인 모델의 정립

(C) 데이터 수집

(D) 모델에 알맞도록 데이터의 변환

(E) 가상적인 데이터에 의한 모델 테스트

(F) 전문가에 의한 모델 검증

(G) 사용자에 의한 모델 검증

(H) 모델 수정

(I) 실 데이터를 이용한 모델 테스트

(J) 모델의 최종 수정

(K) 사용자에게 모델 제공

위의 활동 중 어떤 것은 동시에 일어날 수 있고, 어떤 것은 확실한 선 후행관계에 따른다.

프로젝트를 AOA 네트워크로 표현한 것이 그림 10-1이다. 점선으로 표현된 아크는 실제 활

동을 표현한 것이 아니라 단지 활동 간의 선 후행관계를 위한 가상 아크이다.

AOA 네트워크와 AON 네트워크는 서로 변환 가능하다. 그림 10-2는 AOA 네트워크를 AON

네트워크로 변환한 것이다. AON 네트워크에서는 가상 아크가 필요하지 않다.

Page 132: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

124

(A) (C)

(B)

(E)

(F)

(G)

(D)

(H)

(I) (J) (K)

[그림 10-1] AOA 네트워크

[그림 10-2] AON 네트워크

10.2 AOA 네트워크 모델 규칙

AOA 네트워크에서 아크로 표현되는 활동은 시간이 걸리는 일을 의미한다. 반면 노드로 표

현되는 사건은 어떤 활동의 시작과 끝을 의미하며 하나의 사건은 하나 이상의 활동에 관여

할 수 있다. 예를 들어, 그림 10-1에서 하나의 사건이 활동 (D)와 (H)의 끝과 (I)의 시작을

동시에 의미한다.

네트워크 모델은 활동에 대한 논리적 순서를 포함하고 있다. 예를 들어, 그림 10-1에서 활동

(D)는 활동 (C)가 끝나야 시작할 수 있다. 가상활동 아크는 활동의 순서를 위하여 필요할 수

있다. 위의 예에서 (H)는 (F)와 (G)가 끝나야 시작될 수 있다. 만약 이러한 상황을 네트워크

로 그리면 그림 10-3-(1)과 같을 수 있다. 그러나, 두 노드를 잇는 활동은 오로지 하나 만 존

재하여야 한다. 따라서, 그림 10-3-(2)와 같이 0의 시간을 갖는 가상적인 활동을 추가하여 어

느 두 노드 간의 활동이 하나 만 있도록 하여야 한다.

(1) (2)

[그림 10-3] 가상 활동 아크의 사용

시작 A

B

C

E

D

F

G

H

I J K 종료

Page 133: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

125

네트워크는 하나의 시작 노드와 하나의 종료 노드를 갖고 있어야 한다. 따라서, 그림 10-4-(1)

은 틀린 네트워크이고, 이를 수정한 것이 그림 10-4-(2)이다.

(1) (2)

[그림 10-4] 시작 노드와 종료 노드의 유일성

AOA 네트워크에서는 사이클이 있으면 안된다. 아크는 시간이 걸리는 활동임에 유의하라.

만약, 사이클이 존재한다면 시간을 거꾸로 돌릴 수 있다는 말이 된다. 그림 10-5를 보자. 하

나의 사이클이 존재하여 활동 (1)과 (2)가 차례로 끝나고, 활동 (3)이 시작될 수 있음을 나타

낸다. 또 다시 (3)이 끝나면 활동 (1)이 시작될 수 있다. 그러나, 활동 (1)은 이미 과거에 끝

난 활동이다. 과거로 다시 돌아가 (1)을 또 다시 시작할 수 있다는 의미가 된다. 따라서, 이

러한 사이클이 존재하지 않도록 하여야 한다.

(1) (2)

(3)

[그림 10-5] 사이클이 있는 네트워크

지금까지 AOA 네트워크의 규칙을 요약하면 다음과 같다.

(1) 두 노드 간에 존재하는 아크는 최대 하나이다.

(2) 하나의 시작 노드와 하나의 종료노드가 있어야 한다.

(3) 사이클이 없어야 한다.

예제) 표 10-1은 어느 프로젝트의 활동과 그 활동의 수행을 위한 선행 활동들을 나타낸다.

이 표의 정보를 이용해 그린 AOA 네트워크는 그림 10-6과 같다.

Page 134: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

126

[표 10-1] 활동의 선행 관계

활동 선행 활동

A -

B M, F

C K

D I, L, G

E -

F A, C, E

G A

H J, B, D

I A, C, E

J M

K -

L M, F

M K

K

E

A

F

M

C

G

L D H

I

J

B

[그림 10-6] 표 10-1을 표현한 AOA 네트워크

10.3 최상경로 알고리즘(Critical Path Algorithm)

프로젝트의 계획, 관리에 있어 우리가 관심을 가지는 것 중의 하나는 프로젝트가 끝날 수

있는 가장 빠른 시간을 아는 것이다. 이 시간은 네트워크에서 가장 긴 시간을 갖는 경로(시

작 노드에서 종료 노드까지의 최장 경로)에 따른다. 이를 최상 경로(critical path) 라고 부른다.

주어진 네트워크에서 최상 경로를 구하는 방법은 다익스트라의 최단거리 알고리즘을 수정하

여 사용할 수도 있으나, 사이클이 존재하지 않는 네트워크에서는 더욱 간단한 방법을 사용

할 수 있다. 이를 설명하기 위해 우선 다음과 같은 기호를 사용한다.

ji, 를 각각 사건이라고 하자. 사건 i 를 시작 사건으로 하고, 사건 j 를 종료사건으로 하

는 활동을 ),( ji 로 표시하자.

Page 135: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

127

ijD : 활동 ),( ji 의 소요시간

ijES : 활동 ),( ji 의 가장 빠른 시작 시각 (Earliest start time)

ijEF : 활동 ),( ji 의 가장 빠른 종료 시각 (Earliest finish time)

ijLS : 활동 ),( ji 의 가장 늦은 시작 시각 (Latest start time)

ijLF : 활동 ),( ji 의 가장 늦은 종료 시각 (Latest finish time)

iE : 사건 i 이 가장 빨리 발생될 시각 (Earliest time)

iL : 사건 i 이 가장 늦게 발생될 시각 (Latest time)

ijTS : 활동 ),( ji 의 총여유 시간 (Total slack time), 계획된 종료시간을 늦추지 않는 조건 하에

서의 여유 시간

ijFS : 활동 ),( ji 의 자유 여유 시간 (Free slack time), 사건의 가장 빠른 발생 시간에 지연을

주지 않는 조건 하에서의 여유 시간

iS : 사건 i 의 여유 시간 ( ii EL − )

각 사건의 가장 빠른 발생 시각과 가장 늦은 발생시각으로부터 활동에 대한 시각을 구할 수

있다. 즉, 다음의 관계가 성립한다.

iij EES =

ijiij DEEF +=

ijjij DLLS −=

jij LLF =

활동의 총 여유시간( ijTS )은 프로젝트의 계획된 종료시간에 지연을 주지 않는 한도에서의 여

유 시간이다. 다시 말하자면, 다음 활동이 가장 늦게 시작 된다는 가정 하에서의 여유 시간

이다. 즉, 다음 관계가 성립한다.

)( ijijijijijijij DELEFLFESLSTS +−=−=−=

활동의 자유 여유시간( ijFS )은 다음 활동이 가능한 빨리 시작된다는 가정 하에서의 여유 시

간이다. 즉, 다음 관계가 성립한다.

)( ijijij DEEFS +−=

최상 경로는 주어진 네트워크의 시작 노드에서 종료 노드까지 가장 긴 거리를 갖는 경로로

사건 중심으로 최상 경로를 구하는 가장 간단한 방법은 다음과 같다. 시작 노드로부터 종료

노드로 전진하는 전진 경로 계산(forward path computation)을 한 후 종료 노드로부터 시작 노

드로 후진하는 후진 경로 계산(backward path computation)을 수행한다.

다음 알고리즘에서 노드 i에 라벨 ( )(),( ipik )를 붙인다.

1) 전진 경로 계산: 각 사건에 대한 가장 빠른 발생 시각을 구한다.

단계 0: (시작)

모든 노드에 라벨 (-, 0)을 붙인다.

단계 1: (아크 선택)

)(),()( jpjiDip + 인 아크 ),( ji 를 찾는다.

만약 그런 아크가 없다면 정지하고, 아니면 단계 2로 간다.

단계 2: 노드 j의 라벨을 )),()(,( jiDipi + 로 수정하고 단계 1로 간다.

2) 후진 경로 계산: 각 사건에 대한 가장 늦은 발생시각을 구한다.

Page 136: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

128

단계 0: (시작)

노드 i 의 라벨을 ))(,( ip− 로 한다.

단계 1: (아크 선택)

)(),()( ipjiDjp − 인 아크 ),( ji 를 찾는다.

만약 그런 아크가 없다면 정지하고, 아니면 단계 2로 간다.

단계 2: 노드 i의 라벨을 )),()(,( jiDjpj − 로 수정하고 단계 1로 간다.

전진 경로 계산은 시작 노드부터 종료노드 까지의 최장 거리를 구하는 알고리즘이다. 노드

i의 라벨 )(ip 는 가장 빠른 발생 시각으로 iE 에 해당한다. 위의 방법 보다 간단하게 구하는

방법은 다음과 같다.

① 시작 노드에 대해 01 =E 으로 한다.

② iE 가 구해진 노드의 다음 노드에 대해 }max{ ijij DEE +=

후진 경로 알고리즘에서 노드 i의 라벨 )(ip 는 가장 늦은 발생 시각으로 iL 에 해당한다. 간

단하게 구하는 방법은 다음과 같다.

① 종료 노드에 대해 tt EL = 로 한다.

② iL 가 구해진 이전의 노드에 대해 }min{ ijji DLL −=

사건에 대한 시각을 이용하여 이미 설명된 식에 의해 각 활동에 대한 시각을 구할 수 있다.

예제) 그림 10-7의 AOA 네트워크에서 각 사건에 대한 시각을 구한 결과는 표 10-2와 같다.

그림 10-7에서 각 노드의 라벨은 ),( ii LE 를 의미한다. 표 10-2의 결과를 이용해 각 활동에

대한 시각을 구한 결과는 [표 10-3]과 같다. [표 10-3]에서 총 여유 시간이 0인 활동들이 최상

경로로 1→2→3→4→5→7→9→12→13이다.

Page 137: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

129

1

2

3

4

5 6

87

109

11 12

13

6

4

10

4

5

8

07

9

2

4 5

6

(0,0)

(2,2)

(6,6)

7(20,20) (22,26)

(29,33)

(38,42)

(25,25)

(33,33)

(44,44)

(38,38)

(37,38)

1

(16,16)

[그림 10-7] 최상 경로

최상 경로는 프로젝트를 수행하는데 있어 치명적인 일련의 활동들을 의미한다. 치명적이란

것은 그 활동들이 계획시간 보다 지연될 때 총 프로젝트의 시간이 지연되는 것을 의미한다.

따라서, 치명적이지 않은 활동들은 약간의 지연이 있어도 총 프로젝트 시간에 영향을 미치

지 않는다. 치명적이 아닌 활동들에 허용될 수 있는 여유시간은 총 여유시간( ijTS )이다. 예를

들어, 위의 예에서 활동 (4,6)은 치명적인 활동이 아니고, 총 여유시간은 4이다. 만약, 이 활

동의 소요시간이 6이 아니고, 4가 증가한 10이라도, 총 프로젝트 시간에 영향을 미치지 않는

다. 이 활동의 소요시간이 5 증가한 11이면 총 프로젝트의 시간은 45로 증가된다.

치명적인 활동들이 계획된 시간 보다 더 지연된다면 총 프로젝트의 시간은 그만큼 증가한다.

따라서, 프로젝트의 관리에 있어 이러한 치명적인 활동들을 집중적으로 관리할 필요가 있다.

[표 10-2] 사건에 대한 CPM 계산

노드 iE i

L iS 치명적 노드

1 0 0 0 *

2 2 2 0 *

3 6 6 0 *

4 16 16 0 *

5 20 20 0 *

6 22 26 4

7 25 25 0 *

8 29 33 4

9 33 33 0 *

Page 138: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

130

10 38 42 4

11 37 38 1

12 38 38 0 *

13 44 44 0 *

[표 10-3] 활동에 대한 CPM 계산

활동 ijD

ijES ijEF ijLF ijLS ijTS ijFS

(1,2) 2 0 2+0=2 2 2-2=0 0-0=0 2-(2+0)=0

(2,3) 4 2 4+2=6 6 6-4=2 2-2=0 6-(4+2)=0

(3,4) 10 6 10+16=1

6

16 16-10=6 6-6=0 16-(10+16)0

(4,5) 4 16 4+16=20 20 20-4=16 16-16=0 20-(4+16)=0

(4,6) 6 16 6+16=22 26 26-6=20 20-16=4 22-(6+16)=0

(4,7) 7 16 7+16=23 25 25-7=18 18-16=2 25-(7+16)=2

(5,7) 5 20 5+20=25 25 25-5=20 20-20=0 25-(5+20)=0

(6,8) 7 22 7+22=29 33 33-7=26 26-22=4 29-(7+22)=0

(7,9) 8 25 8+25=33 33 33-8=25 25-25=0 33-(8+25)=0

(8,10) 9 29 9+29=38 42 42-9=33 33-29=4 38-(9+29)=0

(9,11) 4 33 4+33=37 38 38-4=34 34-33=1 37-(4+33)=0

(9,12) 5 33 5+33=38 38 38-5=33 33-33=0 38-(5+33)=0

(10,13) 2 38 2+38=40 44 44-2=42 42-38=4 44-(2+38)=4

(12,13) 6 38 6+38=44 44 44-6=38 38-38=0 44-(6+38)=0

10.4 최상 경로 방법에 의한 비용모델(CPM Cost Model)

이전에 구한 최상 경로에서는 프로젝트 활동의 비용을 고려하지 않았다. 그러나, 프로젝트의

관리에서 중요한 것 중의 하나는 최소의 비용으로 프로젝트를 수행 가능토록 하는 것이다.

프로젝트 관리자는 다음과 같은 문제에 대한 해답을 찾아야 한다.

1. 프로젝트의 수행 기간과 비용에 대한 관계는?

2. 프로젝트의 납기가 주어졌을 때 이를 만족하는 최소의 비용은?

3. 프로젝트의 총비용이 주어졌을 때 이를 만족하는 최소 기간은?

어느 프로젝트의 활동에 대한 기간과 비용을 비교적 정확하게 추정할 수 있다면, CPM을 이

용할 수 있다. CPM에서 총 프로젝트의 비용은 직접비와 간접비의 합계로 계산된다. CPM에

서는 우선 활동 네트워크를 생성한다. 그 다음에는 각 활동에 대한 비용과 기간을 추정한다.

대부분의 CPM은 두가지 기간-비용 추정치를 사용한다.

1. 정상적(normal) 기간과 비용

2. 긴급(crash) 기간과 비용

Page 139: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

131

정상적 기간은 어떤 활동을 정상적으로 수행할 때의 기간이고, 긴급 기간은 어느 활동을 가

능한 가장 빨리 수행할 때의 기간이다. 긴급 비용은 이에 따른 증가된 비용이다.

만약, 프로젝트의 총 기간을 감소시키기 위해 어느 활동을 긴급으로 하려고 한다면, 긴급으

로 하여야 하는 활동은 어떤 것이며, 얼마나 많이 긴급으로 하여야 할까? 첫번째 문제의 답

은 명백하다. 최상 경로에 속한 활동 중 시간 대 긴급 비용의 증가율이 가장 적은 것을 선

택하는 것이다. 두번째 문제의 답은 모든 활동에 대한 정상적, 긴급 기간-비용의 함수를 구

하는 것이다.

프로젝트의 총 비용에 대한 증가를 최소화하기 위한 긴급 활동의 결정 방법은 다음과 같다.

최소비용 긴급 스켸듈 결정 알고리즘

단계 1: 단위 시간에 대한 비용변화(CC/UT)를 계산한다.

CC/UT = (긴급비용 – 정상비용) / (정상기간 – 긴급기간)

단계 2: 정상적인 기간에 의한 프로젝트 스켸듈을 CP 알고리즘에 의해 구한다.

단계 3: 정상적 스켸듈의 모든 활동에 대한 정상적 비용을 합하여 직접비용을 구한다.

단계 4: 최상 경로 상의 활동 중 가장 적은 CC/UT를 갖는 것의 기간을 한 단위 감소시킨

다.

단계 5: 더 이상 긴급으로 할 수 있는 활동이 없을 때 까지 단계 4를 반복한다.

예제) 그림 10-8의 프로젝트 활동에 대한 정상적 기간과 긴급기간 그리고 이에 따른 비용은

표 10-4, 10-5와 같다. 총 프로젝트 비용을 최소화하는 긴급 스켸듈을 구해보자. 정상적인 스

켸듈에서 총 직접비용은 995로 기간은 15일 이다. 최상 경로의 활동 중 가장 적은 CC/UT를

갖는 것은 E이다. 따라서, 정상적인 스켸듈에서의 기간 15일 보다 1 적은 14일에 끝낼 수

있기 위하여 활동 E를 1일 감소 시킨다. 이 때 총 직접비용은 5 증가한다. 알고리즘의 단계

별 결과는 표 10-6과 같다.

1

3

2

4

5 6

A

(0,0)

B

C

D E

F

G

H

I

J

(5,5)

(4,5)

(11,11) (15,15)

(8,9)

[그림 10-8] 예제의 최상 경로

Page 140: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

132

[표 10-4] 정상기간-비용 과 긴급기간-비용

활동 기간 비용

정상 긴급 정상 긴급

A 5 3 100 120

B 4 3 110 130

C 8 5 95 110

E 6 4 80 90

F 4 3 150 180

G 5 4 90 130

H 2 2 70 70

I 3 3 100 100

J 4 2 200 220

[표 10-5] CC/CU

활동 CC/CU CP

A 10 *

B 20

C 5

E 5 *

F 30

G 40

H NO

I NO

J 10 *

[표 10-6] 최소 비용 긴급 스켸듈

반복 최상 경로 긴급

활동

추가

직접비

총 직접비 총 시간 최소 시간의

활동

0 AEJ - - 995 15 H, I

1 AEJ E(5) 5 1000 14 H, I

2 AEJ

CHJ

E(4)

C(7)

5

5

1010 13 H, I, E

3 AEJ

CHJ

BGJ

J(3) 10 1020 12 H, I, E

4 AEJ

CHJ

BGJ

J(2) 10 1030 11 H, I, E, J

5 AEJ

CHJ

BGJ

A(4)

C(6)

B(3)

10

5

20

1065 10 H, I, E, J, B

Page 141: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

133

6 AEJ

CHJ

BGJ

A(3)

C(5)

G(4)

10

5

40

1120 9 H, I, E, J, B, A,

C, G

위에서 설명한 CPM 방법은 각 활동들을 관리하는 목적에서 개발되었으며, 활동에 걸리는

시간을 불확실성이 없는 확정적 시간으로 가정한다. 때문에, 프로젝트의 수행에 있어 각 활

동의 소요시간을 보다 정확하게 추정할 수 있는 건설 등의 프로젝트 관리에 많이 사용된다.

만약, 활동의 시간에 대한 불확실성으로 CPM방법을 사용하기 어렵다면 다음에 설명되는

PERT 방법을 이용하는 것이 좋다. 그러나, 시간의 불확실성을 고려한 차이이외에는 각 사건

또는 활동에 대한 시간을 구하는 방법은 CPM방법과 동일하다. 때문에, PERT와 CPM을 구분

하지 않고, 일반적으로 PERT/CPM이라고 부른다.

10.5 PERT (Program Evaluation and Review Technique)

만약, 활동에 걸리는 시간이 불확실성을 가진 확률변수라면, 이를 추정하여야 한다. PERT에

서는 활동에 대한 시간을 다음의 3가지 값을 이용하여 추정한다 (이 추정 방법은 PERT에서

뿐이 아니라 일반적으로 불확실성이 많은 확률변수의 분포를 추정하는데 이용된다).

⚫ m: 최빈치 (most-likely estimate)

⚫ a: 하한치 (optimistic estimate)

⚫ b: 상한치 (pessimistic estimate)

이 3가지 추정치를 이용하여 활동의 시간에 대한 다음과 같은 가정을 세운다.

1) 활동 시간의 표준편차는 다음과 같다 (대부분의 경우 3 안에 존재하므로).

)(6

1)( abtV tee −==

2) 활동 시간은 다음의 기대치를 가지는 베타분포(beta distribution)에 따른다(그림 10-9).

)](2[3

1)(

21 bamtE e ++=

3) 활동 시간들은 통계적으로 서로 독립이다(statistically independent).

4) 최상 경로는 항상 다른 경로보다 길다. 즉, 총 프로젝트 시간의 평균과 분산은 최상

경로의 평균과 분산이다.

5) 총 프로젝트타임은 정규분포에 따른다(central limit theorem에 의해).

가정 1)과 2)에 의해 각 활동에 대한 평균과 분산을 구하고, 각 활동의 평균 시간에 의한 최

상 경로를 구했다면, 가정 3), 4)에 의해 총 프로젝트 시간에 대한 평균과 분산은 다음과 같

다.

=

=

path critical),(

path critical),(

)()(

)()(

ji

ijp

ji

ijp

tVtV

tEtE

가정 5)에 의해 총 프로젝트 시간이 T안에 끝날 확률은 다음과 같다.

Page 142: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

134

−=

−=

)(

)(

)(

)(

)(

)(][

p

p

p

p

p

ppp

tV

tETzP

tV

tET

tV

tEtPTtP

여기서 z은 표준 정규분포의 확률변수이다.

[그림 10-9] 베타 분포 곡선 (위키피디아)

예제) 그림 10-10의 네트워크에서 각 활동의 숫자는 시간에 대한 (평균, 분산)을 의미한다.

예정 만료일은 22개월이다.

1) 평균 시간에 의한 최상 경로를 구해보자.

사건에 대한 최상 경로를 구한 그림 10-11에 의해 경로는 1→3→4→5→7로 총 평균 시간

은 19이다.

2) 프로젝트가 예정 만료일 내에 완료될 수 있는 확률을 구해보자.

최상 경로 총 시간에 대한 분산은 34(10+6+12+8=34)이다.

697.0514496.034

3

34

)1922

34

19]22[ =

==

−= zP

tPtP

pp

Page 143: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

135

1

2

3

4

5

6

7

(4,5)

(6,10)

(4,8)

(3,6)

(8,12)

(7,14)

(5,12)

(3,5)

(5,8)

(5,7)

[그림 10-10] 프로젝트 네트워크 예

1

2

3

4

5

6

7

(0.0)

6

4

3

8

7

5

3

5

5

4

(4.5)

(6.6)

(14.14)

(9.9)

(13.14)

(19.19)

[그림 10-11] 최상 경로

10.6 자원 소요의 평준화

작업을 스케줄링 할 때 계획 수립자는 시간과 자원 비용에 대한 상충된 목적에 직면한다.

프로젝트의 후반에 위치한 작업에 가능한 많은 여유를 갖게 함으로써 초기 작업의 지연에

대한 시간적인 완충을 갖는 것이 바람직 할 것이다. 그러나, 스케줄에 앞서 인력과 자원의

제한을 고려하여야 한다. 어떤 스케줄을 수행하는데 필요한 인력과 자원이 조사되면 스케줄

을 수정하여야 하거나 또는 네트워크 자체를 수정할 필요성에 직면하게 된다. 스케줄이 주

어졌을 때 필요한 인력과 자원을 파악하는데 가장 많이 사용되는 도구는 자원 프로파일

(resource profile)이다. 이는 각 시간대별로 요구되는 자원의 양을 나타내는 히스토그램이다.

그림 10-7의 네트워크에서 PERT/CPM의 EST에 각 활동이 시작될 경우 스케줄은 그림 10-12

과 같은 간트 챠트로 표현될 수 있다. 이 간트 챠트로부터 그림 10-13과 같은 비용 소요에

대한 히스토 그램을 작성할 수 있다. 이 히스토 그램은 시간대별로 요구되는 자원의 양에

많은 변동이 있음을 나타낸다. 만약, 요구되는 자원이 기계라면 최대로 필요한 양 만큼 사거

나 빌려 사용하고, 필요치 않는 나머지 시간에는 유휴 상태로 남아 있게 되어 자원의 낭비

Page 144: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

136

를 초래할 것이다. 만약, 인력이라면, 최대로 필요한 수 만큼 고용하고, 필요치 않는 시간에

는 쉬게 될 것이다. 또는, 변동을 고려하여 필요한 만큼 고용하고, 필요치 않을 때 해고할

수 있을 것이다. 그러나, 일반적으로 소요 비용, 소요 인력 등의 자원은 프로젝트 기간에 걸

쳐 평준화 되는 것이 바람직하다.

그림 10-14는 여유 시간을 포함하는 간트 챠트를 나타내어 여유 시간 내에서 각 활동의 시

작시간이 변경 가능하다. 따라서, 활동들의 시작 시간을 적절히 변경하여 가능한 평준화된

자원 소요를 가져오는 스케줄을 재작성할 수 있다. 그림 10-15는 이러한 변경된 스케줄을

나타내고, 그림 10-16은 이에 따른 보다 안정적인 자원 소요를 나타낸다.

J

I

H

G

F

E

C

B

A

151413121110987654321

100

110

95

80

150

90

70

100

220

[그림 10-12] 간트 챠트

Page 145: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

137

[그림 10-13] 자원 소요 다이어그램

J

I

H

G

F

E

C

B

A

151413121110987654321

100

110

95

80

150

90

70

100

220

[그림 10-14] 여유 시간을 포함한 간트 챠트

0

100

200

300

400

500

600

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

비용

Page 146: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

138

J

I

H

G

F

E

C

B

A

151413121110987654321

100

110

95

80

150

90

70

100

220

[그림 10-15] 새로운 스케줄

[그림 10-16] 평준화 된 비용 할당

그렇다면 최적의 평준화된 자원 소요를 가져오는 스케줄은 어떻게 작성할까? 물론, 선형계

획법과 같은 방법을 이용하여 최적화 문제를 작성하고, 이 문제의 최적해를 구할 수 있다.

그러나, 프로젝트에 포함된 활동의 수가 많을 경우 문제가 거대해져 해를 구하는 시간과 비

용을 감안하면 실용성 있는 방법이 아니다. 가장 많이 사용되는 방법은 경험적 방법으로 짧

0

50

100

150

200

250

300

350

400

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

비용

Page 147: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

139

은 시간에 근사 최적해를 구하는 목적을 갖는다.

자원 평준화 문제는 크게 두가지로 자원의 한계가 없는 경우와 자원의 한계가 있는 경우로

나뉜다. 자원의 한계가 없는 경우는 단지 소요 자원의 평준화를 꾀하나, 자원의 한계가 있는

경우에는 평준화 시 허용되는 자원의 한계를 고려하여야 한다.

자원의 한계가 없는 경우 소요 자원의 평준화

다음 방법은 경험적 방법으로 소요 자원의 평준화를 목적으로 한다.

단계 1: PERT/CPM 방법에 의해 일정을 산출하고, 각 활동이 EST에 따를 경우 소요 자원의

히스토그램을 구한다.

단계 2: 히스토 그램에서 가장 많은 자원 소요가 있는 기간에 있는 활동들 중 가장 많은 여

유시간을 갖는 활동을 가장 소요자원이 적은 기간으로 이동시킨다(여유 시간 내에

서).

단계 3: 단계 2를 더 이상의 조정이 불가능할 때 까지 반복한다.

단계 4: 히스토 그램에서 가장 적은 자원 소요가 있는 기간의 활동을 가능한 앞으로 이동시

킨다. 단, 최대 소요 자원은 증가하지 않도록 한다.

단계 5: 단계 4를 더 이상의 조정이 불가능 할 때 까지 반복한다.

자원의 한계가 있는 경우 소요 자원의 평준화

자원의 한계가 있는 경우 평준화를 하기 위한 여러 방법이 제안되었다. 여기서는 Moder와

Phillips의 방법을 소개한다.

우선 다음의 기호를 사용한다.

EAS: 모든 선행활동의 일정이 끝난 활동의 집합

OSS: EAS 중 주어진 시간 T에 있어서 TESij 인 활동들을 가장 늦은 시각 ijLS 순으로

그리고 같은 시각이면 소요시간 ijD 의 순으로 정렬한다.

단계 0: 초기화

각 활동의 ijijijij TSLSESD ,,, 를 구한다. 0=T 으로 한다.

단계 1: 활동의 정렬

EAS = 0이면 정지하고,

아니면 T에서 시작 가능한 새로운 EAS를 구한 후 OSS를 구한다. 이미 일정이

확정된 활동은 EAS에서 제외한다.

단계 2: 일정 수립

1) OSS에서 활동을 하나씩 꺼내 가용자원 내에서 일정을 수립한다.

2) 나머지 활동의 ES를 수정하고 가용자원을 수정한다.

3) T에서 가용자원이 0이거나 일정을 매길수 없다면 T=T+1로하고 단계 1로 간다.

예제) 그림 10-7의 네트워크를 대상으로 위의 알고리즘을 적용하자. 각 활동의 필요 자료는

표 10-7과 같다.

최대 소요 자원의 한계를 350이라고 하자.

Page 148: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

140

반복 1: T = 0, EAS = {A, B, C}, OSS = {A, B, C}

A, B, C를 차례로 시각 0에서 시작하도록 한다(표 10-8).

반복 2: T=4, EAS = {E, F, G, H, I}, OSS = {G}

G를 삽입하여 표 10-9의 결과를 얻는다.

반복 3: T=5, EAS = {E, F, H, I}, OSS = {E, F}

E를 삽입하여 표 10-10의 결과를 얻는다.

반복 4: T = 8, EAS = {H, F, I}, OSS={H}

H를 삽입하여 표 10-11의 결과를 얻는다.

반복 5: T = 9, EAS = {F, I, J}, OSS = {F, I}

F를 삽입하여 표 10-12의 결과를 얻는다.

반복 6: T=10, EAS = {I, J}, OSS = {I}

I를 삽입하여 표 10-13의 결과를 얻는다.

반복 7: T=11, EAS={J}, OSS={J}

J를 삽입하여 표 10-14의 결과를 얻는다.

[표 10-7] 자원의 한계가 있는 경우 필요 자료

활동 기간 EST LS TS 소요 비용

A 5 0 0 0 100

B 4 0 1 1 110

C 8 0 1 1 95

E 6 5 5 0 80

F 4 5 11 6 150

G 5 4 6 2 90

H 2 8 9 1 70

I 3 8 12 4 100

J 4 11 11 0 200

[표 10-8] 평준화 반복 1 결과

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

A 100 100 100 100 100

B 110 110 110 110

C 95 95 95 95 95 95 95 95

E

F

G

H

I

J

소요 305 305 305 305 195 95 95 95

용량 350 350 350 350 350 350 350 350 350 350 350 350 350 350 350

여유 45 45 45 45 155 255 255 255 350 350 350 350 350 350 350

Page 149: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

141

[표 10-9] 평준화 반복 2 결과

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

A 100 100 100 100 100

B 110 110 110 110

C 95 95 95 95 95 95 95 95

E

F

G 90 90 90 90 90

H

I

J

소요 305 305 305 305 285 185 185 185 90

용량 350 350 350 350 350 350 350 350 350 350 350 350 350 350 350

여유 45 45 45 45 65 165 165 165 260 350 350 350 350 350 350

[표 10-10] 평준화 반복 3 결과

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

A 100 100 100 100 100

B 110 110 110 110

C 95 95 95 95 95 95 95 95

E 80 80 80 80 80 80

F

G 90 90 90 90 90

H

I

J

소요 305 305 305 305 285 265 265 265 170 80 80

용량 350 350 350 350 350 350 350 350 350 350 350 350 350 350 350

여유 45 45 45 45 65 95 95 95 180 270 270 350 350 350 350

Page 150: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

142

[표 10-11] 평준화 반복 4 결과

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

A 100 100 100 100 100

B 110 110 110 110

C 95 95 95 95 95 95 95 95

E 80 80 80 80 80 80

F

G 90 90 90 90 90

H 70 70

I

J

소요 305 305 305 305 285 265 265 265 240 150 80

용량 350 350 350 350 350 350 350 350 350 350 350 350 350 350 350

여유 45 45 45 45 65 95 95 95 110 200 270 350 350 350 350

[표 10-12] 평준화 반복 5 결과

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

A 100 100 100 100 100

B 110 110 110 110

C 95 95 95 95 95 95 95 95

E 80 80 80 80 80 80

F 150 150 150 150

G 90 90 90 90 90

H 70 70

I

J

소요 305 305 305 305 285 265 265 265 240 300 230 150 150

용량 350 350 350 350 350 350 350 350 350 350 350 350 350 350 350

여유 45 45 45 45 65 95 95 95 110 50 120 200 200 350 350

Page 151: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

143

[표 10-13] 평준화 반복 6 결과

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

A 100 100 100 100 100

B 110 110 110 110

C 95 95 95 95 95 95 95 95

E 80 80 80 80 80 80

F 150 150 150 150

G 90 90 90 90 90

H 70 70

I 100 100 100

J

소요 305 305 305 305 285 265 265 265 240 300 330 250 250

용량 350 350 350 350 350 350 350 350 350 350 350 350 350 350 350

여유 45 45 45 45 65 95 95 95 110 50 20 100 100 350 350

[표 10-14] 평준화 반복 7 결과

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

A 100 100 100 100 100

B 110 110 110 110

C 95 95 95 95 95 95 95 95

E 80 80 80 80 80 80

F 150 150 150 150

G 90 90 90 90 90

H 70 70

I 100 100 100

J 200 200 200 200

소요 305 305 305 305 285 265 265 265 240 300 330 450 450 200 200

용량 350 350 350 350 350 350 350 350 350 350 350 350 350 350 350

여유 45 45 45 45 65 95 95 95 110 50 20 150 150

Page 152: 1 장 그래프란 무엇인가 - hnu.krmip.hnu.kr/courses/network/lab/Network(final).pdf네트워크 알고리즘 i 목 차 목 차..... 7 장 최단거리 구하기 (Shortest Path)

네트워크 알고리즘

144

참고 문헌

1. Introduction to Graph Theory, Robin J. Wilson, Academic Press, 1972.

2. Graph Theory, Ronald Gould, The Benjamin/Cummings Publishing Co., 1988.

3. Applied and Algorithmetic Graph Theory, Gary Chartrand and Ortrud R. Oellermann, McGraw-Hill,

1993.

4. Graphs and Networks: Introduction, W. L. Price, London Butterworths, 1971.

5. Fundamentals of Network Analysis, D. T. Phillips and A. Garcia-Diaz, Prentice Hall, 1981.

6. Combinatorial Optimization: Networks and Matroids, E. L. Lawler, Holt, Rinehart and Winston, 1976.

7. Introduction to Operations Research (4-th ed.), Hillier and Liberman, Holden Day, 1986.