๋์ ํ๋ก๊ทธ๋๋ฐ(DP)์ 'ํฐ ๋ฌธ์ ๋ฅผ '์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ฉฐ ๋์จ ํด'๋ฅผ ๊ฒฐํฉํ์ฌ ํด๊ฒฐํ๋ ๊ฒ'์ด๋ค. ์ด๋ ๋ถํ ์ ๋ณต๋ฒ๊ณผ ์ ์ฌํด ๋ณด์ธ๋ค. ๋ถํ ์ ๋ณต๋ฒ ๋ํ '์๋ ๋ฌธ์ ๋ฅผ ๋ช ๊ฐ์ ๋ถ๋ถ ๋ฌธ์ ๋ก ๋ถํ ํ๋ฉฐ ์ฌ๊ท์ ์ผ๋ก ํด๊ฒฐ'ํ๋ค. ์ด๋ ๊ฒ ์ฐพ์ ๋ถ๋ถ ๋ฌธ์ ์ ํด๋ฅผ ๊ฒฐํฉํ์ฌ ์๋ ๋ฌธ์ ์ ํด๋ฅผ ์ฐพ๋๋ค. ๊ทธ๋ ๋ค๋ฉด DP์ ์ฐจ์ด์ ์?
DP๋ ๋ฌธ์ ์ ์ต์ ๋ถ๋ถ ๊ตฌ์กฐ(optimal substructure)์ ์ค๋ณต ๋ถ๋ถ ๋ฌธ์ (overlapping subproblems)๊ฐ ์์ ๋ ์ ์ฉํ ์ ์๋ค. ์ต์ ๋ถ๋ถ ๊ตฌ์กฐ๋, ๋ถ๋ถ ๋ฌธ์ ์ ์ต์ ํด๊ฐ ์๋ ๋ฌธ์ ์ ์ต์ ํด ์์ ํฌํจ๋์ด ์๋ค๋ ๊ฒ์ด๋ค. ์ค๋ณต ๋ถ๋ถ ๋ฌธ์ ๋ ๋ถ๋ถ ๋ฌธ์ ๋ค์ ํด๊ฒฐํด ๊ฐ๋ ๊ณผ์ ์์ ์ค๋ณต๋๋(=๋์ผํ ๊ฐ์ ๊ณ์ฐํ๊ธฐ ์ํ) ๊ฐ์ ๋ฐ๋ณตํด์ ํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
์ ๊ทธ๋ฆผ์ ๋ถํ ์ ๋ณต๋ฒ์ผ๋ก ํผ๋ณด๋์น์์ด์ ๋ค์ฏ๋ฒ ์งธ๋ฅผ ๋ํ๋ผ ๋๊น์ง ํ์ํ ํจ์ ํธ์ถ์ด๋ค. fibo(3)์ ๋ ๋ฒ ๊ณ์ฐ๋๋ฉฐ fibo(2)์ fibo(1)์ ๊ฐ๊ฐ ๋ ๋ฒ์ฉ ์ด ๋ค ๋ฒ ํธ์ถํด์ผ ํจ์ ์ ์ ์๋ค. ์๊ฐ ๋นํจ์จ์ ์ด๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ์๋ค. ์ด๋ฅผ Overlapping Subproblem์ด๋ผ๊ณ ํ๋ค. ์ด๋ฐ ๋นํจ์จ์ ํด๊ฒฐํ๊ธฐ ์ํด DP์ Memoization(๋ฉ๋ชจ์ด์ ์ด์ )์ ํ์ฉํ ์ ์๋ค.
Memoization(๋ฉ๋ชจ์ด์ ์ด์ ) - Top-Down
F = {1:1, 2:1}
def fib2(n):
if n in F:
return F[n]
else:
F[n] = fib2(n-1) + fib2(n-2)
return F[n]
print(fiv2(5))
print(F)
- ๊ธฐ๋ก(์ ์ฅ)์ ํด๋๊ณ , ์ฌ์ฌ์ฉํ๋ ๊ตฌ์กฐ
๊ณ์ฐํด์ ์ด๋ฏธ ์ ์ฅํด๋ ๊ฒ์ '๋ฐ๋ก' ๋ฆฌํดํ์!
์ ์ฝ๋์ ๊ฐ์ด F dictionary์ n์ด ์์ผ๋ฉด F์ value ๊ฐ์ '๋ฐ๋ก' return ํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ์ฌ๊ท(fib2(n-1) + fib2(n-2))๋ก ๊ตฌํ ๊ฐ์ F[n]์ ์ ์ฅํ๊ณ , value ๊ฐ์ return ํ๋ ๊ฒ์ด๋ค. 'F[n]'์ ์ ์ฅํ๋ ๊ฒ์ด memoization ์์์์ ์ ์ ์๋ค. ์ด๋ ๊ฒ ์ค๋ณต ๋ถ๋ถ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ๊ฐ๋ฅํ๋ค.
Tabulation(ํ๋ทธ๋ ์ด์ ) - Bottom-Up
F = {}
def fib3(n):
F[1] = F[2] = 1
for i in range(3, n+1):
F[i] = F[i-1] + F[i-2]
return F[n]
print(fib3(5))
print(F)
- ์ฌ๊ท์์ผ๋ก ์ํฅ์ ํด๋ฒ์ ์ฐพ์์ ๋ฐ๋ณต๋ฌธ์ผ๋ก ์ ํํ์ฌ ์ค๋ณต ๋ถ๋ถ ๋ฌธ์ ํด๊ฒฐํ๋ ๊ตฌ์กฐ
๋ฐ์์๋ถํฐ ์ ์ฅํ๋ ๊ฒ์ ์์๊ฐ์!
์ ์ฝ๋์ ๊ฐ์ด fib3 ํจ์๊ฐ ์คํ๋ ๋ ๋น์ด ์๋ F dictionary๋ ๋ฐ๋ณต๋ฌธ์ด ์งํ๋ ์๋ก ๊ฐ์ด key ๊ฐ์ด ์ฆ๊ฐํ๋ฉฐ ๋์์ value ๊ฐ์ด ์ ์ฅ๋๋ค. ์ด๋ฅผ DP์ Tabulation์ด๋ผ๊ณ ํ๋ค.
ํ DP ๊ฐ์ ์๋ฃ์ '๋ฌธ์ ๋ฅผ ๋ดค์ ๋, DP ๋ฌธ์ ์ธ์ง๋ ๋ชจ๋ฅด๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค'๊ณ ์จ์ ธ ์์๋ค. ๋ถ๋ถ ๋ฌธ์ ๊ฐ ๋ ๋ฆฝ์ ์ด์ง ์๊ณ , memoization, tabulation์ ํ์ฉํ ์ ์๋ค๋ฉด DP๊ฐ ์๋์ง ์์ฌํด๋ณด๋ ๊ฒ์ด ์ข๊ฒ ๋ค.
๋ฒ์จ ์ ๊ธ์์ WEEK3๊ฐ ์์๋์๋ค.
์๊ฐ์ด ์ ๋ง ๋น ๋ฅด๊ฒ ํ๋ฌ๊ฐ๋ค.
์ด์ ์ ๋๋ณด๋ค ์ค๋ 1%๋ง ๋ ๋์์ง์. 100์ผ์ด๋ฉด 2.7๋ฐฐ.