06. dynamic programming - kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf ·...

48
알고리즘 알고리즘(Algorithm) (Algorithm) Dynamic Programming Dynamic Programming (동적 동적 프로그래밍 프로그래밍) (동적 동적 프로그래밍 프로그래밍) 2011 2011년 봄학 봄학기 강원대학교 강원대학교 컴퓨터과학전공 컴퓨터과학전공 문양세 문양세

Upload: others

Post on 14-Jan-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

알고리즘알고리즘(Algorithm) (Algorithm) Dynamic Programming Dynamic Programming

((동적동적 프로그래밍프로그래밍))((동적동적 프로그래밍프로그래밍))

20112011년년 봄학봄학기기

강원대학교강원대학교 컴퓨터과학전공컴퓨터과학전공 문양세문양세강원대학교강원대학교 컴퓨터과학전공컴퓨터과학전공 문양세문양세

Page 2: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic Programming Dynamic Programming 개요개요 (1/2)(1/2)Dynamic Programming

Divide & Conquer 기법은

하향식접근법(top-down approach)으로, 나누어진부분들사이에하향식접근법( p pp )으로, 나누어진부분들사이에

서로상관관계가없는문제를해결하는데적합하다.

피보나찌알고리즘경우

• 나누어진부분들이서로연관이있다 • 나누어진부분들이서로연관이있다. f(5)를계산하기위해 f(2)를세번사용?

• 즉, 분할정복식방법을적용하여알고리즘을설계하게되면같은항을한번즉, 분할정복식방법을적용하여알고리즘을설계하게되면같은항을한번

이상계산하는결과를초래하게되므로효율적이지않다.

• 따라서, 이경우에는 Divide & Conquer 기법은적합하지않다.

Computer Algorithmsby Yang-Sae MoonPage 2

Page 3: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic Programming Dynamic Programming 개요개요 (2/2)(2/2)Dynamic Programming

Dynamic programming 기법은

상향식해결법(bottom-up approach)을사용하여알고리즘을설계상향식해결법( p pp )을사용하여알고리즘을설계

하는방법이다. • 이방법은 Divide & Conquer 기법과마찬가지로문제를나눈후에나누어진부방 q

분들을먼저푼다.

• 그러나이미풀어서답을알고있는부분의결과가다시필요한경우에는반복하

여계산하는대신에이미계산된결과 냥사용한다여계산하는대신에이미계산된결과를그냥사용한다.

즉 는위에서시작하여필요한계산을해 나가는즉, Divide & Conquer는위에서시작하여필요한계산을해 나가는

반면에, Dynamic programming은밑에서시작하여결과를저장하

면서원하는답을찾아나간다 면서원하는답을찾아나간다.

Computer Algorithmsby Yang-Sae MoonPage 3

Page 4: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

강의강의 순서순서Dynamic Programming

이항 계수 (Binomial Coefficient)

최단 경로 문제 (Shortest Path Problem)

최적의 원칙 (The Principle of Optimality)

연쇄행렬곱셈 (Matrix-Chain Multiplication)

Computer Algorithmsby Yang-Sae MoonPage 4

Page 5: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

이항계수이항계수(Binomial Coefficient) (Binomial Coefficient) –– 정의정의Dynamic Programming

이항계수구하는공식

!n n ! for 0!( )!

n n k nk k n k

• The binomial coefficient is the number of ways of picking k unordered outcomes from n possibilities, also known as a combination nCk.

nk

계산량이많은 n!이나 k!을계산하지않고이항계수를구하기위해

서통상다음수식을사용한다.

1 1n n 1 1 ( 1)! ( 1)!1 ( 1)!( )! !( 1)!

n n n nk k k n k k n k

1 1if 0

11 if 0or

n nn k n

k kk

k k n

1 ( 1)!( )! !( 1)!( 1)! ( )( 1)!

!( )!( 1)! ! ( 1)! !

k k k n k k n kk n n k n

k n kk n n k n n

Computer Algorithmsby Yang-Sae MoonPage 5

( ) ( )!( )! !( )!k n k k n k

Page 6: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

이항계수이항계수 –– Divide & Conquer Divide & Conquer 알고리즘알고리즘Dynamic Programming

문제: 이항계수를계산한다.

입력 음수가아닌정수 과 k 여기서 k입력: 음수가아닌정수 n과 k, 여기서 k n

출력: 이항계수결과값nk

알고리즘:

k

int bin(int n, int k){

1 1if 0

1n n

n k nk k

k

if (k == 0 || n == k)return 1;

else

1 if 0ork k n

elsereturn (bin(n-1,k-1) + bin(n-1,k));

}

Computer Algorithmsby Yang-Sae MoonPage 6

Page 7: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic Programming이항계수이항계수 –– Divide & Conquer Divide & Conquer 시간복잡도시간복잡도 (1/3)(1/3)

분할정복알고리즘은작성하기는간단하지만, 효율적이지않다.

Wh ? 알고리즘을재귀호출( i ll)할때동일한(id i l) Why? 알고리즘을재귀호출(recursive call)할때동일한(identical) 계산을반복해서수행하기때문이다.

예를들면, bin(n-1,k-1)과 bin(n-1,k)는둘다 bin(n-2,k-1)의결과가

필요한데, 따로중복하여계산된다.

을구하기위해서, Divide & Conquer 알고리즘이계산하는항

(term)의개수는다음과같다 (다음페이지증명)

nk (term)의개수는다음과같다. (다음페이지증명)

2 1nk

이는 factorial 복잡도로서 실제알고리즘으로사용할수없다

k

Computer Algorithmsby Yang-Sae MoonPage 7

이는 factorial 복잡도로서, 실제알고리즘으로사용할수없다.

Page 8: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic Programming이항계수이항계수 –– Divide & Conquer Divide & Conquer 시간복잡도시간복잡도 (2/3)(2/3)

증명: (n에 대한수학적귀납법으로증명)

항의개 이 일때 이됨을n Induction Basis: 항의개수 n이 1일때, 이됨을

보이면된다. 는 k = 0이나 1 일 때, 1이므로 항의개수는항상

2 1 2 1 1 1nk

1k

1이다.

Induction Hypothesis: 을 계산하기위한항의개수는nk

2 1nk

Induction Hypothesis: 을 계산하기위한항의개수는

이라가정한다.

d 을 계산하기위한항의개수가 임을

k k

1n

12

n Induction Step: 을 계산하기위한항의개수가 임을

보이면된다.k

2 1

k

1 1 • 알고리즘에의해서 이므로, 를계산하기위한항의총

개수는 을계산하기위한총개수와 를계산하기위한항의총개수에,

11

n n nk k k

1nk

1n

k

nk

Computer Algorithmsby Yang-Sae MoonPage 8

이둘을더하기위한항하나를더한수가된다.

Page 9: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic Programming이항계수이항계수 –– Divide & Conquer Divide & Conquer 시간복잡도시간복잡도 (3/3)(3/3)

(증명계속)

그런데 을계산하기위한항의개수는가정에의해서 이고n

2 1n

• 그런데, 을계산하기위한항의개수는가정에의해서 이고,

를계산하기위한항의개수는가정에의해서 이다.

따라서항의총개수는다음과같이 로계산된다

1k nk

2 11k

2 1

nk

1

2 1n • 따라서항의총개수는다음과같이 로계산된다.

2 1 2 1 11

n nk k

2 1k

“+1”은자기자신항을나타낸다.

! !( 1 ) ! ( 1 ) ! ! ( ) !

! ( 1 )

1

2 1n nk n k k n k

n k n k

k k

! ( 1 )! ( 1 ) !

! ( 1 )! ( 1 ) !

2 1

2 1

n k n kk n k

n nk n k

( 1 ) !! ( 1 ) !2 1

12 1

nk n k

n

Computer Algorithmsby Yang-Sae MoonPage 9

2 1k

Page 10: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

이항계수이항계수 –– Dynamic Programming Dynamic Programming 설계설계 (1/2)(1/2)Dynamic Programming

재귀관계식(recursive property)을 정립

2차원배열 B를 만들고 각 B[i][j]에는 값을저장하도록한다i • 2차원배열 B를 만들고, 각 B[i][j]에는 값을저장하도록한다.

• 그러면, 그 값은다음과같은관계식으로계산할수있다.j

[ 1][ 1] [ 1][ ] if 0[ ][ ]

1 if 0orB i j B i j j i

B i jj j i

1 if 0orj j i

1 1n n 1 1if 0

11 if 0or

n nn k n

k kk

k k n

Computer Algorithmsby Yang-Sae MoonPage 10

Page 11: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

이항계수이항계수 –– Dynamic Programming Dynamic Programming 설계설계 (2/2)(2/2)Dynamic Programming

상향식접근법을 적용

를 구하기위해서 다음과같이 B[0][0]부터 시작하여위에서n • 를 구하기위해서, 다음과같이 B[0][0]부터 시작하여위에서

아래로재귀관계식을적용하여배열을채워나가면된다.

결국 구하려는값은 에 저장된다

k

• 결국, 구하려는값은 B[n][k]에 저장된다.

i j이므로 대각선포함j

아래쪽만값을구하면된다.

Computer Algorithmsby Yang-Sae MoonPage 11

Page 12: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

이항계수이항계수 –– Dynamic Programming Dynamic Programming 알고리즘알고리즘Dynamic Programming

문제: 이항계수를계산한다.

입력 음수가아닌정수 과 k 여기서 k입력: 음수가아닌정수 n과 k, 여기서 k n

출력: 이항계수결과값nk

알고리즘:

k

jint bin2(int n, int k){

index i, j;i t B[0 ][0 k] iint B[0..n][0..k];for(i=0; i <= n; i++)

for(j=0; j <= minimum(i,k); j++)if (j 0 || j i) [i][j] 1

i

if (j==0 || j==i) B[i][j] = 1;else B[i][j] = B[i-1][j-1] + B[i-1][j];

return B[n][k];

Computer Algorithmsby Yang-Sae MoonPage 12

}

Page 13: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

이항계수이항계수 –– Dynamic Programming Dynamic Programming 시간복잡도시간복잡도Dynamic Programming

단위연산: for-j 루프안의문장

입력의크기: n, k입력의크기 ,• i = 0일때 j-루프수행횟수 : 1• i = 1일때 j-루프수행횟수 : 2

i 2일때 j 루프수행횟수 3• i = 2일때 j-루프수행횟수 : 3• ………………..• i = k-1일때 j-루프수행횟수 : k• i = k일때 j-루프수행횟수 : k + 1• i = k+1일때 j-루프 수행횟수 : k + 1•• ………………..• i = n일때 j-루프 수행횟수 : k + 1

따라서, 총 횟수는다음과같이계산된다.1times

( 1)1 2 3 ( 1) ( 1) ( 1)( 1)2

(2 2)( 1)

n kk kk k k n k k

n k k

Computer Algorithmsby Yang-Sae MoonPage 13

(2 2)( 1) ( )2

n k k nk

Page 14: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic Programming이항계수이항계수 –– D&C vs. DPD&C vs. DP

시간복잡도에있어서큰 차이를보이며, DP가 D&C에비해훨씬우

수한알고리즘임을알수있다수한알고리즘임을알수있다.

공간복잡도측면에서는언뜻보기에배열을사용하는 DP가 D&C

보다더복잡한것으로보인다.

정말그럴까?

DP의공간복잡도는 O(n2)이다. 이를 O(n)으로 낮출수있는가?

한행의계산이끝나면 그 이전에계산한값은필요하지않다한행의계산이끝나면, 그 이전에계산한값은필요하지않다.

이성질을사용하면가능하다. 알고리즘을변경해보세요.

Computer Algorithmsby Yang-Sae MoonPage 14

Page 15: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

강의강의 순서순서Dynamic Programming

이항 계수 (Binomial Coefficient)

최단 경로 문제 (Shortest Path Problem)

최적의 원칙 (The Principle of Optimality)

연쇄행렬곱셈 (Matrix-Chain Multiplication)

Computer Algorithmsby Yang-Sae MoonPage 15

Page 16: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic Programming그래프그래프 용어용어 (Shortest Path Problem (Shortest Path Problem 이전에이전에…)…)

정점, 노드(vertex, node), 이음선, 에지(edge, arc)

방향 래방향그래프(directed graph)

가중치(weight), 가중치 (포함) 그래프(weighted graph)( g ) ( ) ( g g p )

경로(path): 노드와노드를잇는일련의노드들

• 단순경로(simple path): 같은정점을두번지나지않음단순경로(simple path): 같은정점을두번지나지않음

순환(cycle): 한정점에서다시그정점으로돌아오는경로

순환그래프(cyclic graph) vs 비순환그래프(acyclic graph)

경로의길이(length)경 의길이( g )• 가중치그래프: 경로상에있는가중치의합

• 일반그래프: 에지의개수

Computer Algorithmsby Yang-Sae MoonPage 16

Page 17: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic Programming가중치가중치 포함포함 방향방향 그래프그래프 예제예제

v1 v23

1

9

v5

3

5

9

1 235

v v23

3

v4 v34

Computer Algorithmsby Yang-Sae MoonPage 17

Page 18: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic Programming최단경로최단경로 문제문제(Shortest Path Problem)(Shortest Path Problem)

보기 : 한 도시에서 다른 도시로 직항로가 없는 경우 가장 빨리 갈

수 있는 항로를 찾는 문제수 있는 항로를 찾는 문제

문제: 가중치 포함, 방향성 그래프에서 최단경로 찾기

최단경로 찾기 문제는 최적화 문제에 속한다.

최적화 문제(optimization problem)란?최적화 문제(optimization problem)란?

주어진 문제에 대하여 하나 이상의 많은 해답(candidate solutions)

이 존재할 때 이 가운데에서 가장 최적인 해답이 존재할 때, 이 가운데에서 가장 최적인 해답(optimal solution)

을 찾아야 하는 문제

최단경로 찾기 문제는 최적화 문제에 속한다.

Computer Algorithmsby Yang-Sae MoonPage 18

Page 19: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic Programming최단경로최단경로 찾기찾기 –– 무작정무작정 알고리즘알고리즘 (1/2)(1/2)

무작정 알고리즘(brute-force algorithm)

한 노드에서 다른 노드로의 모든 가능한 경로의 길이를 구한다• 한 노드에서 다른 노드로의 모든 가능한 경로의 길이를 구한다.

• 그들 경로 중에서 최소길이를 찾는다.

v1 v2

3

1

9

v5

3

5

9

1 23

v4 v3

23

3

4

E.g.) v1 v3: (1) v1 v2 v3, (2) v1 v4 v3, (3) v1 v2 v4 v3

Computer Algorithmsby Yang-Sae MoonPage 19

Page 20: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic Programming최단경로최단경로 찾기찾기 –– 무작정무작정 알고리즘알고리즘 (2/2)(2/2)

분석:

그래프가 n개의 노드를 가지고 있고 모든 노드들 사이에 이음선이 존재한다고• 그래프가 n개의 노드를 가지고 있고, 모든 노드들 사이에 이음선이 존재한다고

가정하자.

• 그러면 한 노드 v 에서 어떤 정점 v 로 가는 경로들을 다 모아 보면 그 경로들• 그러면 한 노드 vi에서 어떤 정점 vj로 가는 경로들을 다 모아 보면, 그 경로들

중에서 나머지 모든 정점을 한번씩 은 꼭 거쳐서 가는 경로들도 포함되어 있는

데, 그 경로들의 수 만 우선 계산해 보자. ,

• vi에서 출발하여 처음 도착할 수 있는 정점의 가지 수는 n-2개(vj 제외)이고, 그

중 하나를 선택하면, 그 다음에 도착할 수 있는 정점의 가지 수는 n-3개 이고,

이렇게 계속 계산해 보면, 총 경로의 개수는 (n-2)(n-3)…1 = (n-2)!이 된다.

• 이 경로의 개수 만 보아도 지수보다 훨씬 크므로, 이 알고리즘은 절대적으로 비

효율적이다!

Computer Algorithmsby Yang-Sae MoonPage 20

Page 21: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic ProgrammingDP DP 기반기반 최단경로최단경로 –– 자료자료 구조구조 (1/2)(1/2)

그래프의 인접행렬(adjacent matrix)식 표현: W

가 치 에서 가 이음선이있 경우 [ ][ ]

0

i j

i j

v vW i j v v

i j

가중치 에서 로 가는 이음선이있는 경우

에서 로 가는 이음선이없는 경우

인경우

그래프에서 최단경로 길이의 표현

0 i j 인경우

( ) h 1kD k 그래프에서 최단경로 길이의 표현:

의 정점들만을 통해서 vi에서 vj로 가는최단경로의 길이

( ) , where 1kD k n ( )

1 2[ ][ ]: { , ,..., }kkD i j v v v

최단경로의 길이

Computer Algorithmsby Yang-Sae MoonPage 21

Page 22: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic ProgrammingDP DP 기반기반 최단경로최단경로 –– 자료자료 구조구조 (2/2)(2/2)

보기:

• W: 그림 3 2에 있는 그래프의 인접행렬식 표현• W: 그림 3.2에 있는 그래프의 인접행렬식 표현

• D: 각 정점들 사이의 최단 거리

[ ][ ] 1 2 3 4 5W i j [ ][ ] 1 2 3 4 5D i j[ ][ ] 1 2 3 4 51 0 1 1 52 9 0 3 2

W i j

[ ][ ] 1 2 3 4 51 0 1 3 1 42 8 0 3 2 5

D i j

3 0 44 2 0 35 3 0

3 10 11 0 4 74 6 7 2 0 35 3 4 6 4 0

D(0)

= W이고 D(n)

= D임은 분명하다 따라서 D를 구하기 위해서는

5 3 0 5 3 4 6 4 0

D = W이고, D = D임은 분명하다. 따라서 D를 구하기 위해서는

D(0)를 가지고 D

(n)을 구할 수 있는 방법을 고안해 내야 한다.

Computer Algorithmsby Yang-Sae MoonPage 22

Page 23: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic ProgrammingDP DP 기반기반 최단경로최단경로 –– 설계설계

1. D(k-1)

을 가지고 D(k)를 계산하는 재귀 관계식(recursive property)을 정립

( ) ( 1) ( 1) ( 1)

1 2

[ ][ ] min( [ ][ ], [ ][ ] [ ][ ])k k k kD i j D i j D i k D k j 경우 경우

경우 1: {v1, v2,…, vk}의 정점들 만을 통해서 vi에서 vj로 가는 최단경로가v 를 거치지 않는 경우vk를 거치지 않는 경우.보기: D(5)[1][3] = D(4)[1][3] = 3경우 2: {v1, v2,…, vk}의 정점들 만을 통해서 vi에서 vj로 가는 최단경로가경 { 1, 2, , k} 정 통 i j 경vk를 거치는 경우.보기: D(2)[5][3] = D(1)[5][2] + D(1)[2][3] = 4 + 3 = 7보기 D(2)[5][4]보기: D(2)[5][4]

2. 상향식으로 k = 1부터 n까지 다음과 같이 상기 과정을 반복하여 해를 구한다.

Computer Algorithmsby Yang-Sae MoonPage 23

D(0), D(1),……., D(n)

Page 24: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic ProgrammingDP DP 기반기반 최단경로최단경로 –– Floyd Floyd 알고리즘알고리즘 1 (1/2)1 (1/2)

문제: 가중치 포함 그래프의 각 정점에서 다른 모든 정점까지의

최단거리를 계산하라최단거리를 계산하라.

입력: 가중치 포함 방향성 그래프 W, 그래프에서의 정점의 수 n

출력: 최단거리의 길이가 포함된 배열 D

Computer Algorithmsby Yang-Sae MoonPage 24

Page 25: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic ProgrammingDP DP 기반기반 최단경로최단경로 –– Floyd Floyd 알고리즘알고리즘 1 (2/2)1 (2/2)

알고리즘

id fl d(i t t b W[][] b D[][])

( ) ( 1) ( 1) ( 1)

1 2

[ ][ ] min( [ ][ ], [ ][ ] [ ][ ])k k k kD i j D i j D i k D k j 경우 경우

void floyd(int n, const number W[][], number D[][]){

int i, j, k;D = W;;for(k=1; k <= n; k++)

for(i=1; i <= n; i++)for(j=1; j <= n; j++)

D[i][j] i i (D[i][j] D[i][k]+D[k][j])D[i][j] = minimum(D[i][j], D[i][k]+D[k][j]);}

모든 경우를 고려한 분석:

• 단위연산: for-j 루프안의 지정문• 단위연산: for-j 루프안의 지정문

• 입력크기: 그래프에서의 정점의 수 n3 3( ) ( )T n n n n n n

Computer Algorithmsby Yang-Sae MoonPage 25

( ) ( )T n n n n n n

Page 26: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic ProgrammingDP DP 기반기반 최단경로최단경로 –– Floyd Floyd 알고리즘알고리즘 2 (1/4)2 (1/4)

문제: 가중치 포함 그래프의 각 정점에서 다른 모든 정점까지의 최

단거리를 계산하고 각각의 최단경로를 구하라단거리를 계산하고, 각각의 최단경로를 구하라.

입력: 가중치 포함 방향성 그래프 W, 그래프에서의 정점의 수 n

출력: 최단경로의 길이가 포함된 배열 D, 그리고 다음을 만족하는

배열 P배열 P

[ ][ ]P i j

vi에서 vj 까지 가는 최단경로의 중간에 놓여 있는 정점이 최소한

하나는 있는 경우 그 놓여 있는 정점 중에서 가장 큰 인덱스[ ][ ]i j 최단경로의 중간에 놓여 있는 정점이 없는 경우 0

Computer Algorithmsby Yang-Sae MoonPage 26

Page 27: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic ProgrammingDP DP 기반기반 최단경로최단경로 –– Floyd Floyd 알고리즘알고리즘 2 (2/4)2 (2/4)

알고리즘

void floyd2(int n, const number W[][], number D[][], index P[][]){

index i, j, k;for(i=1; i <= n; i++)

for(j=1; j <= n; j++)P[i][j] = 0;

D = W; vi에서 vj로 가는데 vk를D = W;for(k=1; k<= n; k++)

for(i=1; i <= n; i++)for(j=1; j<=n; j++)

vi에서 vj로 가는데 vk를

지난다는 정보를 저장

if ((D[i][k] + D[k][j]) < D[i][j]) {P[i][j] = k;D[i][j] = D[i][k] + D[k][j];

}}}

Computer Algorithmsby Yang-Sae MoonPage 27

D[i][j] = minimum(D[i][j], D[i][k]+D[k][j]);

Page 28: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic ProgrammingDP DP 기반기반 최단경로최단경로 –– Floyd Floyd 알고리즘알고리즘 2 (3/4)2 (3/4)

그림 3-2의 예를 가지고 (D와) P를 구해 보시오.[ ][ ] 1 2 3 4 5D i j

[ ][ ] 1 2 3 4 51 0 0 4 0 4

P i j[ ][ ] 1 2 3 4 51 0 1 3 1 42 8 0 3 2 5

D i j

2 5 0 0 0 43 5 5 0 0 4

3 10 11 0 4 74 6 7 2 0 35 3 4 6 4 03 5 5 0 0 4

4 5 5 0 0 05 0 1 4 1 0

5 3 4 6 4 0

5 0 1 4 1 0

Computer Algorithmsby Yang-Sae MoonPage 28

Page 29: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic ProgrammingDP DP 기반기반 최단경로최단경로 –– Floyd Floyd 알고리즘알고리즘 2 (4/4)2 (4/4)

최단경로 출력 알고리즘void path(index q,r)p ( q, ){

if (P[q][r] != 0) {path(q,P[q][r]);

t << “ ” << P[ ][ ]cout << “ v” << P[q][r];path(P[q][r],r);

}}}

앞서의 P로 path(5,3)을 출력하면 다음과 같다.path(5 3) = 4path(5,3) = 4path(5,4) = 1

path(5,1) = 0v1

5 4 2v1path(1,4) = 0

v4path(4 3) = 0

1

Computer Algorithmsby Yang-Sae MoonPage 29

path(4,3) = 0결과: v1 v4. (즉, v5에서 v3으로 가는 최단경로는 v5, v1, v4, v3,이다.)

Page 30: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

강의강의 순서순서Dynamic Programming

이항 계수 (Binomial Coefficient)

최단 경로 문제 (Shortest Path Problem)

최적의 원칙 (The Principle of Optimality)

연쇄행렬곱셈 (Matrix-Chain Multiplication)

Computer Algorithmsby Yang-Sae MoonPage 30

Page 31: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic ProgrammingDynamic ProgrammingDynamic Programming에에 대한대한 설계설계 절차절차

문제의 입력에 대해서 최적(optimal)의 해답을 주는 재귀

관계식(recursive property)을 설정

상향적으로 최적의 해답을 계산 (D P 계산)상향적으로 최적의 해답을 계산 (D, P 계산)

상향적으로 최적의 해답을 구축 (경로 출력)

잠깐 쉬어갈까 잠깐 쉬어갈까

Computer Algorithmsby Yang-Sae MoonPage 31

Page 32: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic Programming최적의최적의 원칙원칙 (The Principle of Optimality)(The Principle of Optimality)

어떤 문제의 입력에 대한 최적 해가 그 입력을 나누어 쪼갠 여러 부

분에 대한 최적 해를 항상 포함하고 있으면 그 문제는 최적의 원칙분에 대한 최적 해를 항상 포함하고 있으면, 그 문제는 최적의 원칙

이 적용된다 라고 한다.

보기: 최단경로를 구하는 문제에서, vk를 vi에서 vj로 가는 최적 경

로 상의 정점이라고 하면, vi에서 vk 로 가는 부분경로와 vk에서 vj

로 가는 부분경로도 반드시 최적이어야 한다. 이렇게 되면 최적의

원칙을 준수하게 되므로 Dynamic Programming을 사용하여 이 문

제를 풀 수 있다.

Computer Algorithmsby Yang-Sae MoonPage 32

Page 33: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic Programming최적의최적의 원칙이원칙이 적용되지적용되지 않는않는 예제예제

최장경로(Longest Path) 문제

v1에서 v4로의 최장경로는 [v1, v3, v2, v4]가 된다

v1가 된다.

그러나, 이 경로의 부분 경로인 v1에서

11

v3으로의 최장경로는 [v1, v3]이 아니고, [v1, v2, v3]이다.

v23

v32

따라서 최적의 원칙이 적용되지 않는다.

주의: 여기서는 단순경로(simple path), v4

경 ( p p ),즉 순환(cycle)이 없는 경로만 고려한다.

v4

Computer Algorithmsby Yang-Sae MoonPage 33

Page 34: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

강의강의 순서순서Dynamic Programming

이항 계수 (Binomial Coefficient)

최단 경로 문제 (Shortest Path Problem)

최적의 원칙 (The Principle of Optimality)

연쇄행렬곱셈 (Matrix-Chain Multiplication)

Computer Algorithmsby Yang-Sae MoonPage 34

Page 35: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic Programming연쇄행렬곱셈연쇄행렬곱셈 (Matrix(Matrix--Chain Multiplication) (1/2)Chain Multiplication) (1/2)

i j 행렬과 j k행렬을 곱하기 위해서는 일반적으로 i j k번만큼의 기본적인 곱셈이 필요하다 만큼의 기본적인 곱셈이 필요하다.

연쇄적으로 행렬을 곱할 때, 어떤 행렬곱셈을 먼저 수행하느냐에

따라서 필요한 기본적인 곱셈의 횟수가 달라지게 된다따라서 필요한 기본적인 곱셈의 횟수가 달라지게 된다.

예를 들어서, 다음 연쇄행렬곱셈을 생각해 보자:

• A1 A2 A3

• A1의 크기는 10 100이고,

• A2의 크기는 100 5이고,

• A3의 크기는 5 50라고 하자.

• A1 A2를 먼저 계산한다면, 기본적인 곱셈의 총 횟수는 7,500회

• A2 A3를 먼저 계산한다면, 기본적인 곱셈의 총 횟수는 75,000회

Computer Algorithmsby Yang-Sae MoonPage 35

Page 36: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic Programming연쇄행렬곱셈연쇄행렬곱셈 (Matrix(Matrix--Chain Multiplication) (2/2)Chain Multiplication) (2/2)

또 다른 예제: 교재 p. 105

연쇄적으로 행렬을 곱할 때 기본적인 곱셈의 횟수가 가장 적게 되

는 최적의 순서를 결정하는 알고리즘 개발이 목표이다.

Computer Algorithmsby Yang-Sae MoonPage 36

Page 37: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic Programming연쇄행렬곱셈연쇄행렬곱셈 –– 무작정무작정 알고리즘알고리즘

알고리즘: 가능한 모든 순서를 모두 고려해 보고, 그 가운데에서

가장 최소를 택한다 가장 최소를 택한다.

시간복잡도 분석: 최소한 지수(exponential-time) 시간

증명 증명:

• n개의 행렬(A1 , A2 ,…, An)을 곱할 수 있는 모든 순서의 가지 수를 tn이

라고 하자 라고 하자.

• 만약 A1이 마지막으로 곱하는 행렬이라고 하면, 행렬 A2 ,…, An을 곱하

는 데는 tn-1개의 가지수가 있을 것이다. 는 데는 tn 1개의 가지수가 있을 것이다.

• An이 마지막으로 곱하는 행렬이라고 하면, 행렬 A1,…, An-1을 곱하는 데

는 또한 tn-1개의 가지수가 있을 것이다.

• 그러면, tn tn-1 + tn-1 = 2 tn-1이고, t2= 1이라는 사실은 쉽게 알 수 있다.

• 따라서 tn 2tn-1 22tn-2 … 2

n-2t2 = 2

n-2= (2

n)이다.

Computer Algorithmsby Yang-Sae MoonPage 37

Page 38: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic ProgrammingDP DP 기반기반 연쇄행렬곱셈연쇄행렬곱셈 –– 설계설계 (1/2)(1/2)

dk를 행렬 Ak의 열(column)의 수라고 하자. 그러면 자연히 Ak의 행

(row)의 수는 d 가 된다(row)의 수는 dk-1가 된다.

Computer Algorithmsby Yang-Sae MoonPage 38

Page 39: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic ProgrammingDP DP 기반기반 연쇄행렬곱셈연쇄행렬곱셈 –– 설계설계 (2/2)(2/2)

A1의 행의 수는 d0라고 하자. 그러면, 다음과 같이 재귀 관계식을

구축할 수 있다구축할 수 있다.

M[i][j] =i < j일 때 Ai부터 Aj까지의 행렬을 곱하는데M[i][j] =i < j일 때 Ai부터 Aj까지의 행렬을 곱하는데

필요한 곱셈의 최소 횟수 (1 i < j n)

11min ( [ ][ ] [ 1][ ] )

[ ][ ]i k ji k j

M i k M k j d d d i jM i j

[ ][ ]

0j

i j

1i k k jA A A A k = i, i+1, ..., j-2, j-1

Computer Algorithmsby Yang-Sae MoonPage 39

1i kd d k jd d

Page 40: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic ProgrammingDP DP 기반기반 연쇄행렬곱셈연쇄행렬곱셈 –– 재귀식재귀식 적용적용 예예

1 2 3 4 5 6

5 2 2 3 3 4 4 6 6 7 7 8A A A A A A

5 2 2 3 3 4 4 6 6 7 7 8

4 5[ 4 ][6 ] m in ( [ 4 ][ 4 ] [ 5 ][6 ] 4 6 8 , [ 4 ][ 5 ] [6 ][ 6 ] 4 7 8 )

kM M M M M

4 5[ ][ ] ( [ ][ ] [ ][ ] [ ][ ] [ ][ ] )

m in ( 0 6 7 8 4 6 8 , 4 6 7 0 4 7 8 )m in ( 5 2 8 , 3 9 2 ) 3 9 2

k

[ ][ ] 1 2 3 4 5 61 0 30 64 132 226 348

M i j1 0 30 64 132 226 3482 0 24 72 156 2683 0 72 198 3664 0 168 3925 0 336

Computer Algorithmsby Yang-Sae MoonPage 40

6 0

Page 41: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic ProgrammingDP DP 기반기반 연쇄행렬곱셈연쇄행렬곱셈 –– 최적최적 순서의순서의 구축구축

최적 순서를 얻기 위해서는 M[i][j]를 계산할 때 최소값을 주는 k값을 P[i][j]에 기억한다 을 P[i][j]에 기억한다.

예: P[2][5] = 4인 경우의 최적 순서는 (A2 A3 A4)A5이다. 구축한 P는 다음과 같다구축한 P는 다음과 같다.

[ ][ ] 1 2 3 4 5 61 1 1 1 1 1

P i j1 1 1 1 1 12 2 3 4 53 3 4 53 3 4 54 4 55 5

따라서, 최적 분해는 (A1((((A2 A3) A4) A5) A6))이다.

5 5

Computer Algorithmsby Yang-Sae MoonPage 41

( (((( ) ) ) ))

Page 42: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic ProgrammingDP DP 기반기반 연쇄행렬곱셈연쇄행렬곱셈 –– 알고리즘알고리즘 (1/2)(1/2)

문제: n개의 행렬을 곱하는데 필요한 기본적인 곱셈 횟수의 최소치

를 결정하고 그 최소치를 구하는 순서를 결정하라를 결정하고, 그 최소치를 구하는 순서를 결정하라.

입력: 행렬의 수 n, 배열 d[0..n](d[i-1] d[i]는 i번째 행렬의 규모를 나타낸다.)

출력:출력:

• 기본적인 곱셈의 횟수의 최소치를 나타내는 minmult;

• 최적의 순서를 얻을 수 있는 배열 P• 최적의 순서를 얻을 수 있는 배열 P(여기서 P[i][j]는 행렬 i부터 j까지가 최적 순서로 갈라지는 기점을 나타낸다.)

Computer Algorithmsby Yang-Sae MoonPage 42

Page 43: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic ProgrammingDP DP 기반기반 연쇄행렬곱셈연쇄행렬곱셈 –– 알고리즘알고리즘 (2/2)(2/2)

알고리즘

i i l (i i d[] i d [][])

[ ][ ] 1 2 3 4 5 61 0 30 64 132 226 3482 0 24 72 156 268

M i j

int minmult(int n, const int d[], index P[][]){

index i, j, k, diagonal;

2 0 24 72 156 2683 0 72 198 3664 0 168 3925 0 336

int M[1..n, 1..n];for(i=1; i <= n; i++)

M[i][i] = 0;

6 0

for(diagonal = 1;diagonal <= n-1;diagonal++)for(i=1;i <= n-diagonal;i++) { // i = row

j = i + diagonal; // j = columnM[i][j] = minimum (M[i][k]+M[k+1][j]+d[i-1]*d[k]*d[j]);

ikj-1P[i][j] = 최소치를 주는 k의 값

}return M[1][n];

}

11min ( [ ][ ] [ 1][ ] )

[ ][ ]0

i k ji k jM i k M k j d d d i j

M i ji j

Computer Algorithmsby Yang-Sae MoonPage 43

Page 44: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic ProgrammingDP DP 기반기반 연쇄행렬곱셈연쇄행렬곱셈 –– 알고리즘알고리즘 분석분석

단위연산: 각 k값에 대하여 실행된 명령문(instruction), 여기서 최

소값인 지를 알아보는 비교문도 포함한다소값인 지를 알아보는 비교문도 포함한다.

입력크기: 곱할 행렬의 수 n

분석: j = i + diagonal이므로,

• k-루프를 수행하는 횟수 =• k-루프를 수행하는 횟수 =

f i 루프를 수행하는 횟수 di l

( 1) 1 1 1j i i diagonal i diagonal

• for-i-루프를 수행하는 횟수 = n – diagonal

• diagonal의 범위는 1 ~ (n-1)이므로, 모든 경우 시간 복잡도는 다음과 같다 2 ( 1)(2 1)n n n n 모든 경우 시간 복잡도는 다음과 같다.

3

1 ( 1)( 1)[( ) ] ( )n n n nn diagonal diagonal n

2

1

( 1)(2 1)6i

n n ni

Computer Algorithmsby Yang-Sae MoonPage 44

1[( ) ] ( )

6diagonaln diagonal diagonal n

Page 45: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic ProgrammingDP DP 기반기반 연쇄행렬곱셈연쇄행렬곱셈 –– 최적최적 해의해의 출력출력 (1/2)(1/2)

문제: n개의 행렬을 곱하는 최적의 순서를 출력하시오.

입력 과 앞서 구한 차원 배열입력: n과 앞서 구한 2차원 배열 P

출력: 최적의 순서

알고리즘:

void order(index i, index j)( , j){

if (i == j) cout << “A” << i;else {

[ ][ ] 1 2 3 4 5 61 1 1 1 1 1

P i j

k = P[i][j];cout << “(”;order(i,k);

1 1 1 1 1 12 2 3 4 53 3 4 5

order(k+1,j);cout << “)”;

}}

4 4 55 5

Computer Algorithmsby Yang-Sae MoonPage 45

}

Page 46: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic ProgrammingDP DP 기반기반 연쇄행렬곱셈연쇄행렬곱셈 –– 최적최적 해의해의 출력출력 (2/2)(2/2)

order(i,j)의 의미:의 계산을 수행하는데 기본적인 곱셈의 수가 가장Ai ... Aj 의 계산을 수행하는데 기본적인 곱셈의 수가 가장

적게 드는 순서대로 괄호를 쳐서 출력하시오.

복잡도 분석 T( ) ( ) Wh ?복잡도 분석: T(n) (n) Why?

Computer Algorithmsby Yang-Sae MoonPage 46

Page 47: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic ProgrammingDP DP 기반기반 연쇄행렬곱셈연쇄행렬곱셈 –– 개선된개선된 솔루션솔루션

Yao(1982) (n2)

Hu and Shing(1982, 1984) (n lg n)

Computer Algorithmsby Yang-Sae MoonPage 47

Page 48: 06. Dynamic Programming - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/06.pdf · 2016-06-02 · Dynamic Programming 개요(1/2) Dynamic Programming Divide & Conquer 기법은

Dynamic Programming교재의교재의 나머지나머지 부분부분 (( 자세한자세한 내용내용 생략생략))

최적 이진검색 트리: 주어진 키 값에 대해서 검색을 최소화하는

(가장 균형 잡힌) 이진트리를 구축하는 방법(가장 균형 잡힌) 이진트리를 구축하는 방법

• 교재의 알고리즘(Gilbert & Moore 1959) (n3)

• Yao(1982) (n2)

외판원 문제(Traveling Salesman Problem: TSP): 모든 도시를 방

문하되 출장 시간을 최소화하는 문제

• 무작정 알고리즘 (n!) 56 7389 94

• 교재의 알고리즘 (n2n)

• 최악의 경우 시간복잡도가 지수보다 좋은 TSP 32

51

62

115

108 49

89 94

알고리즘을 찾은 사람은 아무도 없다.

• 또한, 그런 알고리즘이 불가능하다고 증명한 사람도 없다.

Computer Algorithmsby Yang-Sae MoonPage 48