52
동적 계획 알고리즘 명지대학교 컴퓨터공학과 충기

명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

동적 계획 알고리즘

명지대학교

컴퓨터공학과

이 충기

Page 2: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

지난 주 강의 내용

• 탐욕적인 접근 방법

• 거스름돈 구하기

• 최소비용 신장 트리 찾기

• 단일 출발점 최단경로 찾기

• 0-1 배낭 채우기

Page 3: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

이번 주 강의 내용

• 동적 계획 알고리즘의 개념, 전략, 설계 과정

• 행렬 곱셈

• 모든 쌍 최단 경로 찾기

• 배낭 채우기

Page 4: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

동적 계획 알고리즘

• _________________은 하향식 해결법으로서 나누어진 부분문제들 사이에 서로 상관 관계가 없는 문제를 해결하는데 적합하다.

• 토끼문제 알고리즘의 경우에는 나누어진 부분문제들이 서로 연관이 있다. 즉, 분할 정복을 적용하여 알고리즘을 설계하게 되면 같은 계산을 한 번 이상 하는 결과를 초래하게 되므로 효율적이지 않다.

• 동적 계획 알고리즘은 ____ 해결법을 사용하여 알고리즘을 설계하는 방법이다. 이 방법은 분할정복식 방법과 마찬가지로 문제를 나눈 후에 나누어진 부분문제들을 먼저 푼다. 그러나 이미 풀어서 답을 알고 있는 부분문제의 결과가 다시 필요한 경우에는 반복하여 계산하는 대신에 이미 계산된 결과를 그냥 사용한다.

Page 5: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

• 분할 정복 알고리즘의 부분문제들 사이의 관계: A는 B와

C로 분할되고, B는 D와 E로 분할되는데, D와 E의 해를 취합하여 B의 해를 구한다. 단, D, E, F, G는 각각 더 이상 분할할 수 없는 (또는 가장 작은 크기의) 부분문제들이다.

• 마찬가지로 F와 G의 해를 취합하여 C의 해를 구하고, 마지막으로 B와 C의 해를 취합하여 A의 해를 구한다.

분할 정복과 동적 계획 비교

Page 6: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

분할 정복과 동적 계획 비교(계속)

• 동적 계획 알고리즘은 먼저 최소 단위의 부분 문제 D, E, F, G의 해를 각각 구한다. 그 다음에

• D, E, F의 해를 이용하여 B의 해를 구한다.

• E, F, G의 해를 이용하여 C의 해를 구한다.

• B와 C의 해를 구하는데 E와 F의 해 모두를 이용한다.

• 분할 정복 알고리즘은 부분문제의 해를 중복 사용하지 않는다.

Page 7: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

분할 정복과 동적 계획 비교(계속)

• 동적 계획 알고리즘에는 부분문제들 사이에 ______ 관계가 존재한다.

– 예를 들면, D, E, F의 해가 B를 해결하는데 사용되는 의존적 관계가 있다.

• 이러한 관계는 문제 또는 입력에 따라 다르고, 대부분의 경우 뚜렷이 보이지 않아서 ‘함축적인 순서’ (implicit order)라고 한다.

Page 8: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

동적 계획 알고리즘 전략

• 문제를 더 작은 _________들로 분할한다.

• 작은 부분 문제들을 먼저 풀고 그 결과를 ____한다.

• 나중에 우리가 한 결과를 필요로 할 때마다 그 결과를 다시 ____하는 대신에 _____ 사용한다.

Page 9: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

동적 계획 알고리즘 설계 과정

1. 우리가 풀고자 하는 문제의 ___________(form)을 정의한다.

2. 이 문제들을 풀기 위한 ___를 정한다. 한 문제는 순서에서 앞선 문제들에 대한 해법을 이용하여 풀 수 있다.

3. 문제 풀이 순서의 처음에 있는 문제들은 자명한 해법들을 가져야 한다.

4. 문제풀이 순서의 목록에 나와 있는 순서대로 문제들을 푼다. 이미 풀은 문제들에 대한 해법들을 저장하기 위해 표를 사용한다. 목록의 마지막 문제는 본래의 문제여야 한다.

Page 10: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

행렬 곱셈 적용 예

Page 11: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

행렬 곱셈 적용 예 (계속)

행렬 A와 B의 곱은 각 대학이 구입한 상품들의 총액과 총 무게를 나타낸다:

14 9 3 20000 0.5 5380000 28

AB= 2 11 15 500000 2 = 8540000 38

0 12 17 200000 1 9400000 41

5 2 3 1700000 9.5

Page 12: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

행렬 곱셈 문제

p

kkjikpjipjijiij babababac

12211 ...

Page 13: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

예: 행렬 곱셈 문제

Page 14: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

행렬 곱셈 (계속)

1100 1001 5100

100100

5100

5100

000,505100100

000,101001100

수곱셈의

000,60

5100

50051100

50051001

1000

1100 51

Page 15: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

행렬 곱셈 문제

jki rrr 1 j),1matmult(k k) matmult(i,

Page 16: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

분할 정복 해법

Page 17: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

동적 계획 알고리즘

Page 18: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

예: 동적 계획 알고리즘 수행 과정

20*10 50*20 1*50 100*1

011 m 022 m 033 m 044 m

000,1012 m

200,113 m

200,214 m

000,123 m

000,324 m

000,534 m

14m

)( 4321 MMMM

4321 MMMM

4321 MMMM

2010 10020

5010 10050

!

2200

100*1*1001200

최선

1001

011 m 000,324 m

000,1012 m000,534 m

200,113 m 044 m

000,23

100*20*10000,30

000,65

100*50*10000,5000,10

110

Page 19: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

예: 동적 계획 알고리즘 수행 과정

321 )( MMM

5010 150

000,1012 m 033 m

)( 321 MMM

2010 120

011 m 000,123 m

500,10

1*50*100000,10

!최선

6

)12)(1(

2

)1()(

1

1

nnnnnnlln

n

l

)(6

)1)(1(

62322

32323

nnnnnnnnn

1200

1*20*1010000

Page 20: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

모든 쌍 최단 경로 찾기

예: 한 도시에서 다른 도시로 가는 최단 경로를 찾아라

Page 21: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

모든 쌍 최단 경로 찾기 문제

가중치를 포함한 방향 그래프가 주어지면 각 정점에서 모든 다른 정점으로 가는 가장 짧은 경로를 찾아라. 즉, 가중치를 포함한 방향 그래프를 나타내는 행렬 W가 주어지면 행렬 D[1..N, 1..N]을 구하라. D[i, j]는 정점 i에서 정점 j로 가는 가장 짧은 경로의 비용이다.

Page 22: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

모든 쌍 최단 경로 찾기

Page 23: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

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

Page 24: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

동적 계획 알고리즘 아이디어

• 동적 계획 알고리즘으로 모든 쌍 최단 경로 문제를 해결하려면 먼저 부분문제들을 찾아야 한다.

• 이를 위해 일단 그래프의 정점의 수가 적을 때를 생각해보자.

• 그래프에 3개의 정점이 있는 경우, 정점 i에서 정점 j까지의 최단 경로를 찾으려면 2가지 경로, 즉, 정점 i에서 정점 j로 직접 가는 경로와 정점 1을 경유하는 경로 중에서 짧은 것을 선택하면 된다.

j i

1

Page 25: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

동적 계획 알고리즘 아이디어

• 또 하나의 중요한 아이디어 – 경유 가능한 정점들을 정점 1로부터 시작하여, 정점 1

과 2, 그 다음엔 정점 1, 2, 3으로 하나씩 추가하여, 마지막에는 정점 1∼n까지의 모든 정점을 경유 가능한 정점들로 고려하면서, 모든 쌍의 최단 경로의 거리를 계산한다.

• 부분문제 정의: 단, 입력 그래프의 정점을 각각 1, 2, 3, ⋯, n이라 하자.

Dijk = 집합 {1, 2, ⋯, k}에 있는 정점만을 경유 가능

한 정점들로 고려하여, 정점 i로부터 정점 j까지의 모든 경로 중에서 가장 짧은 경로의 거리

Page 26: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

동적 계획 알고리즘 아이디어

• 여기서 주의할 것은 정점 1에서 정점 k까지의 모든 정점들을 반드시 경유하는 경로를 의미하는 것이 아니다.

• 심지어는 Dijk는 이 정점들을 하나도 경유하지 않

으면서 정점 i에서 정점 j에 도달하는 경로, 즉 연결선 (i, j)가 최단 경로가 될 수도 있다.

• 여기서 k≠i, k≠j이고, k=0인 경우, 정점 0은 그래프에 없으므로 어떤 정점도 경유하지 않는다는 것을 의미한다. 따라서Dij

0은 입력으로 주어지는 연결선 (i, j)의 가중치이다.

Page 27: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

동적 계획 알고리즘 아이디어

Dij1 i j

1

Page 28: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

동적 계획 알고리즘 아이디어 • 다음으로 i에서 정점 2를 경유하여 j로 가는 경로

의 거리와 Dij1 중에서 짧은 거리를 Dij

2로 정한다. 단, 정점 2를 경유하는 경로의 거리는 Di2

1 + D2j1

이다.

• 모든 쌍 i와 j에 대하여 Dij2를 계산하는 것이 그

다음으로 큰 부분 문제들이다. 단, i≠2, j≠2이다.

i j

2

Dij2

Page 29: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

동적 계획 알고리즘 아이디어

• 정점 i에서 정점 k를 경유하여 j로 가는 경로의 거리와 Dij

k-1 중에서 짧은 것으로 정한다. 단, 정점 k를 경유하는 경로의 거리는 Dik

k-1 + Dkjk-1 이

고, i≠k, j≠k이다.

i j

k

Dijk

Page 30: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

동적 계획 알고리즘 아이디어

• 이런 방식으로 k가 1에서 n이 될 때까지 Dij

k를 계산해서, Dijn, 즉, 모든 점을 경유

가능한 점들로 고려된 모든 쌍 i와 j의 최단 경로의 거리를 찾는 방식이 플로이드의 모든 쌍 최단 경로 알고리즘이다.

Page 31: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

동적 계획 주 아이디어

x y

내에있다모두L

)()1()0( ,....,, nDDD

i j

Page 32: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

예 1: 모든 쌍 최단 경로 찾기

예 1: 0 1 ∞ 1 5

9 0 3 2 ∞

∞ ∞ 0 4 ∞ ∞ ∞ 2 0 3

3 ∞ ∞ ∞ 0

1v 2v

3v4v

5v

1

1 2

2

3

3

3

4

5

9

5]5][2[

5]5][2[

14]5][2[

14]5][2[

14]5][2[

)5(

)4(

)3(

)2(

)1(

D

D

D

D

D

WD )0(

542

542

512

512

512

vvv

vvv

vvv

vvv

vvv

6]3][5[

7]3][5[

7]3][5[

]3][5[

)4(

)3(

)2(

)1(

D

D

D

D

3415

3215

3215

vvvv

vvvv

vvvv

Page 33: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

모든 쌍 최단 경로 찾기

• 어떻게 로부터 을 구하는가?

고려해야 할 새 경로

을 통과하는 정점 i 부터 정점 j 까지 경로는 두 가지 경우로 나눌 수 있다.

- 을 통과하지 않는 경로

이는 내의 정점들만을 통과하는 정점 i 부터 정점 j 까지의 경로들의

집합이다.

- 을 통과하는 경로

= MIN(MIN cost(p), MIN cost(p)) MIN cost(p)=

에 속하는 모든 경로 p는 위 그림에서 보여진 대로 2개의 경로들로 나누어 질 수 있다.

q - 내의 정점들만을 통과하는 정점 i 부터 정점 k + 1 까지의 경로

)(kD )1( kD

},....,,{ 21 kvvvL

},,...,{ 121 kk vvvv

1P 1kv

},...,{ 21 kvvv

2P 1kv)1( k

ijD)(k

ijD

1Pp 2Pp

2P

},...,{ 21 kvvv

1Pp

Page 34: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

모든 쌍 최단 경로 찾기 (계속)

},...,{ 21 kvvv

),()(

,1

)(

1,

)()1( k

jk

k

ki

k

ij

k

ij DDDMIND

2Pp

Page 35: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

예 2: 모든 쌍 최단 경로 찾기

예 2: 1 2 3 4 5 1 0 1.5 1 0.8

W =2 2 0 ∞ 1.8 ∞

3 1.4 ∞ 0 0.6 1

4 1.5 1.5 0.5 0 0.9

5 2 ∞ 1.2 ∞ 0

인천 서울

용인 수원

대전

1v2v

3v4v

5v

5.1

5.11

1

5.18.1

2

8.0

5.0

6.0

2.19.0

4.12

WD )0(

7.1]5][1[

7.1]5][1[

2]5][1[

]5][1[

]5][1[

)5(

)4(

)3(

)2(

)1(

D

D

D

D

D

1.2]2][3[

1.2]2][3[

9.2]2][3[

9.2]2][3[

9.2]2][3[

)5(

)4(

)3(

)2(

)1(

D

D

D

D

D 213 vvv

531 vvv

541 vvv

541 vvv

243 vvv

1 1

8.0 9.0

4.1 5.1

243 vvv

213 vvv

213 vvv

Page 36: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

예 2: 모든 쌍 최단 경로 찾기 (계속)

L = {서울, 인천, 수원} L = {서울, 인천, 수원, 용인}

서울

대전

서울

용인

대전

Page 37: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

모든 쌍 최단 경로 찾기 알고리즘

Page 38: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

모든 쌍 최단 경로 찾기 알고리즘 2

Page 39: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

시간복잡도

• 모든 쌍 최단 경로 찾기 알고리즘의 시간복잡도는 위의 예제에서 보았듯이 각 k에 대해서 모든 i, j 쌍에 대해 계산되므로, 총 nxnxn = n3회 계산이 이루어지고, 각 계산은 O(1) 시간이 걸린다.

• 따라서 모든 쌍 최단 경로 찾기 알고리즘의 시간복잡도는 O(n3)이다.

Page 40: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

응용

• 네이버와 구글 (Google) 웹사이트의 지도 서비스

• 자동차 네비게이션 서비스

• 지리 정보 시스템 (GIS)에서의 네트워크 분석

• 통신 네트워크와 모바일 통신 분야

• 게임

• 산업 공학,경영 공학의 Operations Research (운영 연구)

• 로봇 공학

• 교통 공학

• VLSI 디자인 분야 등

Page 41: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

배낭 채우기 문제

• 배낭 (Knapsack) 문제는 n개의 물건과 각 물건 i의 무게 wi와 가치 vi가 주어지고, 배낭의 용량은 C일 때, 배낭에 담을 수 있는 물건의 최대 가치를 찾는 문제이다. 단, 배낭에 담은 물건의 무게의 합이 C를 초과하지 말아야 하고, 각 물건은 1개씩만 있다.

6kg

4kg

5kg

3kg

10만원

30만원

50만원

Page 42: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

배낭 채우기 문제

• 배낭 문제는 제한적인 입력에 대해서 동적 계획 알고리즘으로 해결할 수 있다.

• 먼저 배낭 문제의 부분 문제를 찾아내기 위해 문제의 주어진 조건을 살펴보면 물건, 물건의 무게, 물건의 가치, 배낭의 용량, 모두 4가지의 요소가 있다.

• 이중에서 물건과 물건의 무게는 부분 문제를 정의하는데 반드시 필요하다.

• 왜냐하면 배낭이 비어 있는 상태에서 시작하여 물건을 하나씩 배낭에 담는 것과 안 담는 것을 현재 배낭에 들어 있는 물건의 가치의 합에 근거하여 결정해야 하기 때문이다.

• 또한 물건을 배낭에 담으려고 할 경우에 배낭 용량의 초과 여부를 검사해야 한다.

Page 43: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

배낭 채우기 문제

• 따라서 배낭 문제의 부분문제를 아래와 같이 정의할 수 있다.

• K[i, w] = 물건 1 ∼ i까지만 고려하고, (임시) 배낭의 용량이 w일 때의 최대 가치

단, i = 1, 2, ⋯, n이고, w = 1, 2, 3, ⋯, C이다.

• 그러므로 문제의 최적해는 K[n, C]이다.

• 여기서 주의하여 볼 것은 배낭의 용량이 C이지만, 배낭의 용량을 1부터 C까지 1씩 증가시킨다는 것이다.

• 이 때문에 C의 값이 매우 크면, 알고리즘의 수행시간이 너무 길어지게 된다.

• 따라서 다음의 알고리즘은 제한적인 입력에 대해서만 효용성을 가진다.

Page 44: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

배낭 채우기 알고리즘

입력: 배낭의 용량 C, n개의 물건과 각 물건 i의 무게 wi와 가치 vi, 단, i = 1, 2, ⋯, n

반환 값: K[n, C]

1. for i = 0 to n K[i, 0]=0 // 배낭의 용량이 0일 때

2. for w = 0 to C K[0,w]=0 // 물건 0이란 어떤 물건도 고려하지 않을 때

3. for i = 1 to n

4. for w = 1 to C // w는 배낭의 (임시) 용량

5. if ( wi > w ) // 물건 i의 무게가 임시 배낭 용량을 초과하면

6. K[i, w] = K[i-1, w]

7. else // 물건 i를 배낭에 담지 않을 경우와 담을 경우 고려

8. K[i ,w] = max{K[i-1, w], K[i-1, w-wi] + vi}

9. return K[n, C]

Page 45: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

배낭 채우기 알고리즘 설명

• Line 1에서는 2차원 배열 K의 0번 열을 0으로 초기화시킨다. 그 의미는 배낭의 (임시) 용량이 0일 때, 물건 1∼n까지 각각 배낭에 담아보려고 해도 배낭에 담을 수 없으므로 그에 대한 각각의 가치는 0일 수밖에 없다는 뜻이다.

• Line 2에서는 0번 행의 각 원소를 0으로 초기화시킨다. 여기서 물건 0이란 어떤 물건도 배낭에 담으려고 고려하지 않는다는 뜻이다. 따라서 배낭의 용량을 0에서 C까지 각각 증가시켜도 담을 물건이 없으므로 각각의 최대 가치는 0이다.

• Line 3 ~ 8에서는 물건을 1에서 n까지 하나씩 고려하여 배낭의 (임시) 용량을 1에서 C까지 각각 증가시키며, 다음을 수행한다.

Page 46: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

배낭 채우기 알고리즘 설명

• Line 5 ~ 6에서는 현재 배낭에 담아보려고 고려하는 물건 i의 무게 wi가 (임시) 배낭 용량 w보다 크면 물건 i를 배낭에 담을 수 없으므로, 물건 i까지 고려했을 때의 최대 가치 K[i, w]는 물건 (i-1)까지 고려했을 때의 최대 가치 K[i-1, w]가 된다.

• Line 7 ~ 8에서는 만일 현재 고려하는 물건 i의 무게 wi가 현재 배낭의 용량 w보다 같거나 작으면, 물건 i를 배낭에 담을 수 있다. 그러나 현재 상태에서 물건 i를 추가로 배낭에 담으면 배낭의 무게가 (w+wi)로 늘어난다. 따라서 현재의 배낭 용량인 w를 초과하게 되어, 물건 i를 추가로 담을 수는 없다.

Page 47: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

K[i-1, w]

K[i-1, w-wi]

K[i, w]

물건 1 ∼(i-1)까지 고려하여 현재 배낭의 용량이 (w - wi)인 경우의 최대 가치

물건 i의 가치 v

i +

물건 1 ∼ (i-1)까지 고려하여 현재 배낭의 용량이 w인 경우의 최대 가치

물건 i

0

1

배낭에서 물건 i를 담을 공간을 마련

Page 48: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

배낭 채우기 알고리즘 설명

• 그러므로 앞의 그림에서와 같이, 물건 i를 배낭에 담기 위해서는 2가지 경우를 살펴보아야 한다.

• 물건 i를 배낭에 담지 않는 경우 K[i,w] = K[i-1,w]가 된다.

• 물건 i를 배낭에 담는 경우, 현재 무게인 w에서 물건 i의 무게인 wi를 뺀 상태에서 물건을 (i-1)까지 고려했을 때의 최대 가치인 K[i-1,w-wi]와 물건 i의 가치 vi의 합이 K[i,w]가 되는 것이다.

• Line 8에서는 이 2가지 경우 중에서 큰 값이 K[i, w]가 된다.

Page 49: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

배낭 채우기 알고리즘 설명

• 배낭 문제의 부분 문제간의 함축적 순서는 다음과 같다. 즉, 2개의 부분 문제 K[i - 1, w - wi]과 K[i - 1, w]가 미리 계산되어 있어야만 K[i, w]를 계산할 수 있다.

Page 50: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

시간복잡도

• 하나의 부분 문제에 대한 해를 구할 때의 시간복잡도는 line 5에서의 무게를 한 번 비교한 후 line 6에서는 1개의 부분문제의 해를 참조하고, line 8에서는 2개의 해를 참조한 계산하므로 O(1) 시간이 걸린다.

• 그런데 부분 문제의 수는 배열 K의 원소 수인 nC개이다. 여기서 C는 배낭의 용량이다.

• 따라서 배낭채우기 알고리즘의 시간복잡도는 O(1)xnxC = O(nC)이다.

Page 51: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

응용

• 배낭 문제는 다양한 분야에서 의사 결정 과정에 활용된다. 예를 들어, 원자재의 버리는 부분을 최소화시키기 위한 자르기/분할, 금융 포트폴리오와 자산 투자의 선택, 암호 생성 시스템 (Merkle–Hellman Knapsack Cryptosystem) 등에 활용된다.

Page 52: 명지대학교 컴퓨터공학과 이 충기elearning.kocw.net/KOCW/document/2015/myongji/leechungki/8.pdf · •동적 계 알고리즘의 개념, 전략, 설계 과정 •행렬

요약

• 동적 프로그래밍의 개념, 전략, 설계 과정

• 행렬 곱셈

• 모든 쌍 최단 경로 찾기

• 배낭 채우기