23
4. 외판원 문제(TSP) 4. 외판원 문제(TSP) Tour (Hamiltonian circuit) 정점에서 다른 모든 정점을 거쳐 다시 자기 자신으 정점에서 다른 모든 정점을 거쳐 다시 자기 자신으 로 돌아오는 경로 optimal tour optimal tour 2 v 1 v 2 7 1 length[v 1 , v 2 , v 3 , v 4 , v 1 ] = 22 l th[ ] 26 6 9 6 7 4 3 length[v 1 , v 3 , v 2 , v 4 , v 1 ] = 26 length[v 1 , v 3 , v 4 , v 2 , v 1 ] = 21 v 4 v 3 8 알고리즘 설계 2(Page 26)

알고리즘 13주차 2차시 1 - KOCWcontents.kocw.net/KOCW/document/2014/ChoHaengrae/122.pdf · 2016-09-09 · 알고리즘 설계2장(Page 27) ... Matrix: W 알고리즘설계2장(Page

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 알고리즘 13주차 2차시 1 - KOCWcontents.kocw.net/KOCW/document/2014/ChoHaengrae/122.pdf · 2016-09-09 · 알고리즘 설계2장(Page 27) ... Matrix: W 알고리즘설계2장(Page

4. 외판원 문제(TSP)4. 외판원 문제(TSP) Tour (Hamiltonian circuit)

한 정점에서 다른 모든 정점을 거쳐 다시 자기 자신으 한 정점에서 다른 모든 정점을 거쳐 다시 자기 자신으로 돌아오는 경로

optimal tour optimal tour

2

v1 v2

7

1 length[v1, v2, v3, v4, v1] = 22

l th[ ] 2669

67

43

length[v1, v3, v2, v4, v1] = 26

length[v1, v3, v4, v2, v1] = 21

v4 v38

알고리즘설계 2장 (Page 26)

Page 2: 알고리즘 13주차 2차시 1 - KOCWcontents.kocw.net/KOCW/document/2014/ChoHaengrae/122.pdf · 2016-09-09 · 알고리즘 설계2장(Page 27) ... Matrix: W 알고리즘설계2장(Page

문제의 복잡성문제의 복잡성

각 정점마다 다른 정점과 n-1개의 연결이 존재한다고 가정할 경우 정점 에서 시작하는 to 의 수정할 경우, 정점 v1에서 시작하는 tour의 수 =

(n-1)*(n-2)*…*1 = (n-1)!

동적 프로그래밍으로 해결 가능? 가정: optimal tour = v1 vk … v1정 p 1 k 1 Then, vk … v1는 vk에서 나머지 정점들을 한번만거쳐서 v1으로 가는 shortest path.따라서 최적의 원칙이 적용되며 적 래밍을 적 따라서 최적의 원칙이 적용되며, 동적 프로그래밍을 적용 가능.

알고리즘설계 2장 (Page 27)

Page 3: 알고리즘 13주차 2차시 1 - KOCWcontents.kocw.net/KOCW/document/2014/ChoHaengrae/122.pdf · 2016-09-09 · 알고리즘 설계2장(Page 27) ... Matrix: W 알고리즘설계2장(Page

TSP를 풀기 위한 자료구조TSP를 풀기 위한 자료구조

v1 v2

2

1

1 2 3 4

1 0 2 9 ∞

6 673

2 1 0 6 4

3 7 0 8

v4 v38

94

3 3 ∞ 7 0 8

4 6 3 ∞ 08

Adjacency Matrix: W

알고리즘설계 2장 (Page 28)

Page 4: 알고리즘 13주차 2차시 1 - KOCWcontents.kocw.net/KOCW/document/2014/ChoHaengrae/122.pdf · 2016-09-09 · 알고리즘 설계2장(Page 27) ... Matrix: W 알고리즘설계2장(Page

TSP를 풀기 위한 동적 프로그래밍(1)TSP를 풀기 위한 동적 프로그래밍(1) V = 정점들의 집합, A = V의 부분집합

D[v ][A] v에서 시작하여 A에 있는 정점들을 한번씩 지 D[vi][A] = vi에서 시작하여 A에 있는 정점들을 한번씩 지나면서 v1까지 가는 최소 경로의 길이 A = 일 경우, D[vi][] = W[i][1]i A ≠ 일 경우, D[vi][A] = min(W[i][j] + D[vj][A-{vj}]),

j:vj A. A의 값을 에서 V-{v1}까지 하나씩 증가 A의 값을 에서 V {v1}까지 하나씩 증가.

Example D[v2][] = 1, D[v3][] = ∞, D[v4][] = 6 D[v2][{v3}] = W[2][3] + D[v3][] = 6 + ∞ = ∞ D[v ][{v }] = W[2][4] + D[v ][] = 10 D[v2][{v4}] = W[2][4] + D[v4][] = 10 D[v3][{v2}] = 7 + 1 = 8, D[v3][{v4}] = 8 + 6 = 14 D[v4][{v2}] = 3 + 1 = 4, D[v4][{v3}] = ∞ + ∞ = ∞

알고리즘설계 2장 (Page 29)

Page 5: 알고리즘 13주차 2차시 1 - KOCWcontents.kocw.net/KOCW/document/2014/ChoHaengrae/122.pdf · 2016-09-09 · 알고리즘 설계2장(Page 27) ... Matrix: W 알고리즘설계2장(Page

TSP를 풀기 위한 동적 프로그래밍(2)TSP를 풀기 위한 동적 프로그래밍(2) A의 원소 수가 2개 일 경우

[ 2][{ 3 }] i ( [2][3] [ 3][ ] D[v2][{v3,v4}] = min(W[2][3] + D[v3][v4], W[2][4] + D[v4][v3])

= min(6 + 14 4 + ∞) = 20= min(6 + 14, 4 + ∞) = 20 D[v3][{v2,v4}] = min(7 + 10, 8 + 4) = 12 D[v4][{v2 v3}] = min(3 + ∞ ∞ + 8) = ∞ D[v4][{v2,v3}] min(3 + ∞, ∞ + 8) ∞

A의 원소 수가 3개일 경우 D[v1][{v2,v3,v4}] = min(W[1][2] + D[2][{v3,v4}],

W[1][3] + D[3][{v2,v4}],W[1][4] + D[4][{v2,v3}])

= min(2+20, 9+12, ∞+∞) = 21

알고리즘설계 2장 (Page 30)

Page 6: 알고리즘 13주차 2차시 1 - KOCWcontents.kocw.net/KOCW/document/2014/ChoHaengrae/122.pdf · 2016-09-09 · 알고리즘 설계2장(Page 27) ... Matrix: W 알고리즘설계2장(Page

알고리즘알고리즘

입력: 정점의 수 n, 그래프 W[][]출력: optimal tour의 길이 minlength 경로 P[][] 출력: optimal tour의 길이 minlength, 경로 P[][]

void travel(int n, number W[][], index P[][], number& minlength) {i d i j kindex i, j, k;number D[1..n][subset of V – {v1}];

f (i 2 i i ) D[i][] W[i][1]for (i = 2; i <= n; i++) D[i][] = W[i][1];for (k = 1; k <= n – 2; k++)

for (all subsets of A V – {v1} containing k vertices)f ( h h d ) {for (i such that i ≠ 1 and vi is not in A) {

D[i][A] = min(W[i][j] + D[j][A – {vj}]), j:vj A;P[i][A] = value of j that gave the minimum;

}D[1][V – {v1}] = minimum(W[1][j] + D[j][A – {vj}]), 2 ≤ j ≤ n;P[1][V – {v1}] = value of j that gave the minimum;

알고리즘설계 2장 (Page 31)

minlength = D[1][V – {v1}];}

Page 7: 알고리즘 13주차 2차시 1 - KOCWcontents.kocw.net/KOCW/document/2014/ChoHaengrae/122.pdf · 2016-09-09 · 알고리즘 설계2장(Page 27) ... Matrix: W 알고리즘설계2장(Page

배열 P[][]를 이용한 최적 경로 출력배열 P[][]를 이용한 최적 경로 출력

3 4 23

P[1][{v2, v3, v4}]

4

P[3][{v2, v4}]

2

P[4][{v2}]

첫 번째 노드의 인덱스 P[1][{v2,v3,v4}] = 3

두 번째 노드의 인덱스 P[3][{v2, v4}] = 4

세 번째 노드의 인덱스 P[4][{v2}] = 2

최적의 경로 = [v1, v3, v4, v2, v1]

알고리즘설계 2장 (Page 32)

Page 8: 알고리즘 13주차 2차시 1 - KOCWcontents.kocw.net/KOCW/document/2014/ChoHaengrae/122.pdf · 2016-09-09 · 알고리즘 설계2장(Page 27) ... Matrix: W 알고리즘설계2장(Page

복잡성 계산을 위한 사전 정리 3.1복잡성 계산을 위한 사전 정리 3.1

1 nn nn

11 11

kk k

nn

kn

k

1

0

1

011

11

knk

n

k

n

k kn

nk

nn

11

00

2)11(

nn

kk

nn

kk

이항계수 정리(Binomial Theorem)

n

k

knkn baknk

nba0 )!(!

!)(

알고리즘설계 2장 (Page 33)

)(

Page 9: 알고리즘 13주차 2차시 1 - KOCWcontents.kocw.net/KOCW/document/2014/ChoHaengrae/122.pdf · 2016-09-09 · 알고리즘 설계2장(Page 27) ... Matrix: W 알고리즘설계2장(Page

시간 복잡성 계산시간 복잡성 계산

1)1()(

2n nkknnT

21

)1()(1k

nn

kkknnT

2)1(

1)1(thatNote

kn

nk

nkn

2

2n n

대입하면식에위의

2)1()(

2

1

n

k kn

knnT

)2(2)2)(1()(,3.1

23 nn nnnnT

적용하면을정리앞의

알고리즘설계 2장 (Page 34)

).2(2)2)(1()( nnnnT

Page 10: 알고리즘 13주차 2차시 1 - KOCWcontents.kocw.net/KOCW/document/2014/ChoHaengrae/122.pdf · 2016-09-09 · 알고리즘 설계2장(Page 27) ... Matrix: W 알고리즘설계2장(Page

공간 복잡성공간 복잡성

D[][] 배열과 P[][] 배열의 크기?b [1 ][ b f { 1}] number D[1..n][subset of V – {v1}]

V – {v1}의 부분집합의 수 = 2n-1

D[][] 배열의 크기 = n*2n-1 D[][] 배열의 크기 = n*2n 1

P[][] 배열도 마찬가지.

공간 복잡도 M(n) = 2 * n*2n-1 = n2n (n2n )

알고리즘설계 2장 (Page 35)

Page 11: 알고리즘 13주차 2차시 1 - KOCWcontents.kocw.net/KOCW/document/2014/ChoHaengrae/122.pdf · 2016-09-09 · 알고리즘 설계2장(Page 27) ... Matrix: W 알고리즘설계2장(Page

(n – 1)!과 (n – 1)(n – 2)2n-3의 차이점?(n 1)!과 (n 1)(n 2)2 의 차이점?

n이 20이며, 단위 연산이 1s일 경우19! 3857 19! s = 3857 years

(20 – 1)(20 – 2)220 – 3 s = 45 seconds

알고리즘설계 2장 (Page 36)

Page 12: 알고리즘 13주차 2차시 1 - KOCWcontents.kocw.net/KOCW/document/2014/ChoHaengrae/122.pdf · 2016-09-09 · 알고리즘 설계2장(Page 27) ... Matrix: W 알고리즘설계2장(Page

알고리즘 설계 3장알고리즘 설계 – 3장

탐욕적인 방법(Greedy Method)( y )Reference:1. R. Neapolitan and K. Naimipour, Foundations of Algorithms using Java

P d d J d B tl tt P bPseudocode, Jones and Bartlett Pub.

Page 13: 알고리즘 13주차 2차시 1 - KOCWcontents.kocw.net/KOCW/document/2014/ChoHaengrae/122.pdf · 2016-09-09 · 알고리즘 설계2장(Page 27) ... Matrix: W 알고리즘설계2장(Page

목차목차

탐욕적인 방법의 소개최소비용 신장 트리 최소비용 신장 트리 Prim의 방법

Kruskal의 방법 Kruskal의 방법 단일 출발점 최단 경로 문제 0-1 배낭 채우기 문제 0 1 배낭 채우기 문제

알고리즘설계 3장 (Page 1)

Page 14: 알고리즘 13주차 2차시 1 - KOCWcontents.kocw.net/KOCW/document/2014/ChoHaengrae/122.pdf · 2016-09-09 · 알고리즘 설계2장(Page 27) ... Matrix: W 알고리즘설계2장(Page

1. 탐욕적인 방법의 소개1. 탐욕적인 방법의 소개 결정을 해야 할 때마다 그 순간에 가장 좋다고 생각되는것을 해답으로 선택함으로써 최종적인 해답에 도달것을 해답으로 선택함으로써 최종적인 해답에 도달

그 순간의 선택은 그 당시(local)에는 최적이다 그 순간의 선택은 그 당시(local)에는 최적이다.

그러나 최적이라고 생각했던 해답들을 모아서 최종적인러나 최적이라 생각했 해 들을 아서 최종적(global)해답을 만들었다고 해서, 그 해답이 궁극적으로최적이라는 보장이 없다.

따라서 탐욕적인 방법이 항상 최적의 해답을 주는지를 반드시 검증드시 검증

알고리즘설계 3장 (Page 2)

Page 15: 알고리즘 13주차 2차시 1 - KOCWcontents.kocw.net/KOCW/document/2014/ChoHaengrae/122.pdf · 2016-09-09 · 알고리즘 설계2장(Page 27) ... Matrix: W 알고리즘설계2장(Page

탐욕적인 알고리즘의 설계 절차탐욕적인 알고리즘의 설계 절차

선정 과정(selection procedure)현재 상태에서 가장 좋으리라고 생각되는( d ) 해 현재 상태에서 가장 좋으리라고 생각되는(greedy) 해답을 찾아서 해답모음(solution set)에 포함

적정성 점검(feasibility check) 새로 얻은 해답모음이 적절한지를 결정새 해 이 적절 지를 결정

해답 점검(solution check) 새로 얻은 해답모음이 최적의 해인지를 결정

알고리즘설계 3장 (Page 3)

Page 16: 알고리즘 13주차 2차시 1 - KOCWcontents.kocw.net/KOCW/document/2014/ChoHaengrae/122.pdf · 2016-09-09 · 알고리즘 설계2장(Page 27) ... Matrix: W 알고리즘설계2장(Page

보기: 거스름돈 문제보기: 거스름돈 문제 동전의 개수가 최소가 되도록 거스름 돈을 주는 문제

탐욕적인 알고리즘거스름돈을 x라 하자 거스름돈을 x라 하자.

먼저, 가치가 가장 높은 동전부터 x가 초과되지 않도록계속 내준다.계속 내 다

이 과정을 가치가 높은 동전부터 내림차순으로 총액이정확히 x가 될 때까지 계속한다.

현재 우리나라에서 유통되고 있는 동전만을 가지고, 이 알고리즘을 적용하여 거스름돈을 주면 항상 동전의 개수는고리즘을 적용하여 거스름돈을 주면, 항상 동전의 개수는최소가 된다. 따라서 이 알고리즘은 최적(optimal)!

알고리즘설계 3장 (Page 4)

Page 17: 알고리즘 13주차 2차시 1 - KOCWcontents.kocw.net/KOCW/document/2014/ChoHaengrae/122.pdf · 2016-09-09 · 알고리즘 설계2장(Page 27) ... Matrix: W 알고리즘설계2장(Page

최적의 해를 얻지 못하는 경우최적의 해를 얻지 못하는 경우

12원 짜리 동전을 새로 발행했다고 하자.

이 알고리즘을 적용하여 거스름돈을 주면, 항상 동전의 개수가 최소가 된다는 보장이 없다수가 최소가 된다는 보장이 없다.

보기: 거스름돈 액수 = 16원기 거 액수 탐욕 알고리즘의 결과:

12원 × 1개 = 12원, 1원 × 4개 = 4원 동전의 개수 = 5개 ⇒ 최적(optimal)이 아님! 최적의 해:

10원 1개 5원 1개 1원 1개가 되어 동전의 10원 × 1개, 5원 × 1개, 1원 × 1개가 되어 동전의개수는 3개가 된다.

알고리즘설계 3장 (Page 5)

Page 18: 알고리즘 13주차 2차시 1 - KOCWcontents.kocw.net/KOCW/document/2014/ChoHaengrae/122.pdf · 2016-09-09 · 알고리즘 설계2장(Page 27) ... Matrix: W 알고리즘설계2장(Page

2. 최소비용 신장 트리(Minimum cost spanning tree)(Minimum cost spanning tree)

신장 트리(spanning tree)의 정의연결된 비방향성 그래프 G의 모든 정점을 다 포함하면 연결된, 비방향성 그래프 G의 모든 정점을 다 포함하면서 트리가 되는 연결된 부분 그래프

신장 트리를 만드는 방법 G에서 순환 경로를 제거하면서 연결된 부분 그래프가에서 경 를 제거하 서 결 부 래 가되도록 에지를 제거

알고리즘설계 3장 (Page 6)

Page 19: 알고리즘 13주차 2차시 1 - KOCWcontents.kocw.net/KOCW/document/2014/ChoHaengrae/122.pdf · 2016-09-09 · 알고리즘 설계2장(Page 27) ... Matrix: W 알고리즘설계2장(Page

신장 트리의 예신장 트리의 예

v1 v21 v1 v2

1

3 36 6

v3 v44 v3 v4

4

5

2 5

v5

5

v5 v5

알고리즘설계 3장 (Page 7)

Page 20: 알고리즘 13주차 2차시 1 - KOCWcontents.kocw.net/KOCW/document/2014/ChoHaengrae/122.pdf · 2016-09-09 · 알고리즘 설계2장(Page 27) ... Matrix: W 알고리즘설계2장(Page

정의: 최소비용 신장 트리정의: 최소비용 신장 트리 최소비용 신장트리(minimum cost spanning tree)

신장트리가 되는 G의 부분 그래프 중에서 가중치가 최 신장트리가 되는 G의 부분 그래프 중에서 가중치가 최소가 되는 부분 그래프

최소의 가중치를 가진 부분그래프는 반드시 트리임.

관찰: 모든 신장트리가 최소비용 신장트리는 아니다.

알고리즘설계 3장 (Page 8)

Page 21: 알고리즘 13주차 2차시 1 - KOCWcontents.kocw.net/KOCW/document/2014/ChoHaengrae/122.pdf · 2016-09-09 · 알고리즘 설계2장(Page 27) ... Matrix: W 알고리즘설계2장(Page

최소비용 신장 트리의 예최소비용 신장 트리의 예

v1 v21

v1 v21

3 36 3

v3 v44

v3 v44

5

2 5

5

2

v5 v5

알고리즘설계 3장 (Page 9)

Page 22: 알고리즘 13주차 2차시 1 - KOCWcontents.kocw.net/KOCW/document/2014/ChoHaengrae/122.pdf · 2016-09-09 · 알고리즘 설계2장(Page 27) ... Matrix: W 알고리즘설계2장(Page

최소비용 신장트리의 응용 분야최소비용 신장트리의 응용 분야

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

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

배관( l b ) 배관(plumbing) 파이프의 총 길이가 최소가 되도록 연결하는 문제

알고리즘설계 3장 (Page 10)

Page 23: 알고리즘 13주차 2차시 1 - KOCWcontents.kocw.net/KOCW/document/2014/ChoHaengrae/122.pdf · 2016-09-09 · 알고리즘 설계2장(Page 27) ... Matrix: W 알고리즘설계2장(Page

탐욕적인 접근 방법탐욕적인 접근 방법

문제: 비방향성 그래프 G = (V,E)가 주어졌을 때, F ⊆ E를만족하면서 (V F)가 G의 최소비용 신장트리(MST)가 되는만족하면서, (V,F)가 G의 최소비용 신장트리(MST)가 되는F를 찾는 문제.

알고리즘: F := 0; 최종해답을 얻지 못하는 동안 다음 절차를 계속 반복

선정 절차: 적절한 최적해 선정절차에 따라서 하나의 에지를 선정의 에지를 선정

적정성 점검: 선정한 에지를 F에 추가시켜도 순환경로가 생기지 않으면, F에 추가시킨다.로가 생기지 않으면, F에 추가시킨다.

해답 점검: T = (V,F)가 신장트리 이면, T가 최소비용 신장트리 이다.

알고리즘설계 3장 (Page 11)