Algorithm Theory
λμ νλ‘κ·Έλλ°(Dynamic Programming)
Meng's Computer
2020. 12. 14. 23:46
π’ λμ νλ‘κ·Έλλ°
- λμ νλ‘λλ°(DP, Dynamic Programming) : μκ³ λ¦¬μ¦ μ€κ³μ μΌλ°μ κΈ°λ² μ€ νλ
- μΈλ» 보기μ λ§μ μκ°( μ¬μ§μ΄ μ§μ μκ° )μ΄ μμλ κ² κ°μ λ¬Έμ μ μ£Όλ‘ μ μ©νλ€.
- μ μ©μ 쑰건μ :
π λΆλ¬Έμ λ¨μμ±(Simple Subproblems) : λΆλ¬Έμ λ€μ΄ j,k,l,m λ±κ³Ό κ°μ λͺ κ°μ λ³μλ‘ μ μ λ μ μλ κ²½μ°
π λΆλ¬Έμ μ΅μ μ±(Optimality Subproblems) : μ 체 μ΅μ μΉκ° μ΅μ μ λΆλ¬Έμ λ€μ μν΄ μ μλ μ μλ κ²½μ°
π λΆλ¬Έμ μ€λ³΅μ±(Overlap Subproblems) : λΆλ¬Έμ λ€μ΄ λ 립μ μ΄ μλλΌ μνΈ κ²Ήμ³μ§ κ²½μ° ( μ¦, μν₯μμΌλ‘ κ΅¬μΆ ) - λνμ μμ
π νΌλ³΄λμΉ μ(Fibonacci progression)μμ N-λ²μ§Έ μ μ°ΎκΈ°
π κ·Έλνμ μ΄νμ νμ κ³μ°νκΈ° - λμ νλ‘κ·Έλλ° vs λΆν ν΅μΉλ²
곡ν΅μ
π μκ³ λ¦¬μ¦ μ€κ³κΈ°λ²μ μΌμ’
π λ¬Έμ κ³΅κ° : μμ -λͺ©νμ ꡬ쑰 ( μμ : λ¬Έμ μ μ΄κΈ° λλ κΈ°μ΄μ§μ / λͺ©νμ : μ΅μ’ ν΄κ° μꡬλλ μ§μ )
μ°¨μ΄μ
π λ¬Έμ ν΄κ²° μ§ν λ°©ν₯
λμ νλ‘κ·Έλλ°(λ¨λ°©ν₯) : μμ -> λͺ©νμ
λΆν ν΅μΉλ²(μλ°©ν₯) : λͺ©νμ -> μμ -> λͺ©νμ ( λ¨, ν΄λ₯Ό ꡬνκΈ° μν μ°μ°μ μ§ν, λ°©ν₯μ μμ ->λͺ©νμ )
μ±λ₯
π λμ νλ‘κ·Έλλ° : λ¨λ°©ν₯ νΉμ±λλ¬Έμ μ’ μ’ ν¨μ¨μ
π λΆν ν΅μΉλ² : λΆν νμ(λ³΄ν΅ 2λΆν μ νλ€.) , μ€λ³΅μ°μ° μν νμμ λ°λΌ λ€λ¦ - μ΄λ¦μ "λμ "νλ‘κ·Έλλ°μ΄μ§λ§, μ€μ λ‘ μ°λ¦¬κ° μλ "λμ ", κ·Έλκ·Έλ μ¬μ©νλ κ·Έλ° μλ―Έλ μλλ€.
νλ ꡬν κ²μ, λ€λ₯Ό λ, μ¬μ©νλ μλ―ΈμΌ λΏμ΄κ³ , μ΄λ¬ν κΈ°λ²μ μ΄λ¦μ μ§μ μ¬λμ΄ κ·Έλ₯ "λμ νλ‘κ·Έλλ°"μ΄λΌ μλͺ ν κ² μΌ λΏμ΄λ€. μ€ν΄νμ§λ§μ.
π’ λμ νλ‘κ·Έλλ° μμ
- N-λ²μ§Έ νΌλ³΄λμΉ μ μ°ΎκΈ° : νΌλ³΄λμΉ μμ΄(Fibonacci Progression)μ i = 0,1μ λν΄ f(i) = 1μ΄λ©°, i >= 2 μ λν΄
f(i) = f(i-1) + f(i-2)μΈ μμ΄μ΄λ€. - μ¦, f(0) = 1, f(1) = 1, f(2) = 2, f(3) = 3, f(4) = 5, f(5) = 8, .......
- f(n), μ¦ νΌλ³΄λμΉ μμ΄μ n-λ²μ§Έ μλ₯Ό μ°ΎκΈ° μν΄, μ μλ‘λΆν° μ§μ μ¬κ·μκ³ λ¦¬μ¦ fλ₯Ό μμ±ν μλ μμ§λ§,
λΆννλ μ§μμκ°(exponential time)μ μννλ―λ‘ λ무λ λΉν¨μ¨μ μ΄λ€ !! - μ΄λ₯Ό, λμ νλ‘κ·Έλλ°μ κΈ°μ΄νμ¬ f(n)μ μ°Ύλ λΉμ¬κ·, μ νμκ° μκ³ λ¦¬μ¦μ λ€μ λ λ²μ ΌμΌλ‘ μμ±ν΄λ³΄μ.
π 1. μ ν곡κ°μΌλ‘ μννλ λ²μ Ό
π 2. μμ곡κ°μΌλ‘ μννλ λ²μ Ό
Alg f(n) // μ ν 곡κ°
if(n == 0 || n == 1)
return 1
A[0] <- 1
A[1] <- 1
for i <- 2 to n
A[i] <- A[i-1] + A[i-2]
return A[n]
=============================
Alg f(n) // μμ 곡κ°
if(n == 0 || n == 1)
return 1
a <- 1
b <- 1
for i <- 2 to n
c <- a + b
a <- b
b <- c
return c
728x90
λ°μν