ㅇTL

dynamic programming 본문

2-2/알고리즘

dynamic programming

정노르레기 2021. 10. 17. 04:46

dynamic programming

= big problem을 smaller prob로 쪼개는 것, 이때 각 정보를 re-use한다 (저장해두고 나중에 다시 사용함) 캐시한다 ~.~

(divide and conquer은 쪼개고 아래 정보들 다시 사용 xx. revisit안함)


Assembly-line scheduling

given: 두개(이상)의 assembly lines

goal: fastest assembly time and path 구하기

-> 가장 빠른 path와 그때의 time을 찾는다 !

-> 이전 노드들에서 다음 노드로 가는 가장 빠른 웨이를 찾는 방식

 

알고리즘 설명

슈도코드

 

space constumption

-> s: 2n, l:2n -> Θ(n)

 

running time

각 테이블에 한 요소를 채우는건 Θ(1) 인데  이걸 2n번, 2n번 하기때문에 Θ(n)

 

fastest time only

path 구할 필요가 없으면 테이블 s에서 해당 i의 정보랑, 그 전 i의 정보만 저장하면 됨 -> 4개만 저장해서 쓰면 됨

(i의 값구할 때 그전 i의 정보만 쓰고, 구한 후에는 그 전i들의 정보 지운당 그리고 i애들 정보를 바탕으로 i+1의 값을 구한당. 2->4->2->4)

-> Θ(1) space만 필요 !! 

 


Rod Cutting

rod-cutting problem 

given: 길이가 n인 통나무, 통나무 길이에 따른 해당 통나무의 price 표

goal: 어캐 잘라야 최대의 수익을 낼 수 있는가!!

-> 통나무 자르는 경우의수는 2^(n-1) (머 통나무길이 4면 자를 곳은 3군데니까 2^3 = 8가지 경우의수가 있다 !)

algorithm

 

슈도코드

 

 

space consumption 

: r[i]는 n개, s[i]도 n개 !!

-> Θ(n)

running time

: 그 하나하나에서 최대 r[i]구할 때, i가 1이면 1번, i가 2면 2번, ... 7이면 7번 ... -> 1+2+3+4+..+n이 된다-> n(n+1)/2 = Θ(n^2)

 

'2-2 > 알고리즘' 카테고리의 다른 글

Sorting in linear time  (0) 2021.10.16
quick sort  (0) 2021.10.15
Heapsort  (0) 2021.10.12
Solving recurrences  (0) 2021.10.10
Asymptotic notation  (0) 2021.10.10