์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ๊ฐ๋ฐ
- ๋ฆฌ์กํธ
- ๊น๋ฏธ๊ฒฝ์๋งํ์์
- ๋ง์ผ๋ด๊ฐ์ธ์์๋ค์์ฐ๋ค๋ฉด
- ์ํ
- ๋ฐ์ํ
- ๋ผํ๋ผ์ค์๋ง๋
- ์ฑ
- ์ปดํจํฐ๊ณผํ
- K๋ฐฐํฐ๋ฆฌ
- css
- JavaScript
- ์ค๋ธ์
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ComputerScience
- ์นํ์ด์ง๋ง๋ค๊ธฐ
- database
- Python
- ์นํผ๋ธ๋ฆฌ์ฑ
- ํ์ด์ฌ
- ์๋ฐ์คํฌ๋ฆฝํธ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- html
- K๋ฐฐํฐ๋ฆฌ๋ ๋ณผ๋ฃจ์
- ์ฝ๋ฉ
- ํ๋ก๊ทธ๋๋ฐ
- Java
- ์ค๋ผํด
- ์๋ฐ
- ๋ ์
- Today
- Total
JiYoung Dev ๐ฅ
[ํ์ด์ฌ] ์๊ณ ๋ฆฌ์ฆ ํจ๋ฌ๋ค์ : Dynamic Programming ๋ณธ๋ฌธ
2023.02.27 ์ฝ๋์ ํ์ต๋ด์ฉ
๐ Dynamic Programming
๋ณต์กํ ๋ฌธ์ ๋ฅผ ๋ ์๊ณ ๊ฐ๋จํ ํ์ ๋ฌธ์ ๋ก ๋ถํดํ์ฌ ๊ฐ๊ฐ์ ํ์ ๋ฌธ์ ๋ฅผ ํ ๋ฒ๋ง ํ๊ณ , ๊ฐ ํ์ ๋ฌธ์ ์ ํด๊ฒฐ์ฑ ์ ํ์ ์ ์ฅํ ํ ํ์์ ๋ฐ๋ผ ์ฌ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ ํจ๋ฌ๋ค์.
Dynamic Programming์ ์กฐ๊ฑด
1. ์ต์ ๋ถ๋ถ ๊ตฌ์กฐ (Optimal Substructure)
์ต์ ๋ถ๋ถ ๊ตฌ์กฐ๊ฐ ์๋ค๋ ๊ฒ์ ๋ถ๋ถ ๋ฌธ์ ๋ค์ ์ต์ ์ ๋ต์ ์ด์ฉํ์ฌ ๊ธฐ์กด ๋ฌธ์ ์ ์ต์ ์ ๋ต์ ๊ตฌํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํจ.
์ฆ, ๊ธฐ์กด ๋ฌธ์ ๋ฅผ ๋ถ๋ถ ๋ฌธ์ ๋ก ๋๋์ด ํ ์ ์์ด์ผ ํจ. (ex. ํผ๋ณด๋์น ์์ด)
2. ์ค๋ณต๋๋ ๋ถ๋ถ ๋ฌธ์ (Overlapping Subproblems)
ํผ๋ณด๋์น ์์ด๊ณผ ๊ฐ์ด ์ต์ ๋ถ๋ถ ๊ตฌ์กฐ๊ฐ ์๋ ๋ฌธ์ ๋ฅผ ํ ๋์๋ ์ค๋ณต ๋๋ ๋ถ๋ถ ๋ฌธ์ ๋ค์ด ์์ ์ ์์.
์๋ฅผ ๋ค๋ฉด, ํผ๋ณด๋์น ์ ํจ์ fib(5)๋ฅผ ๊ตฌํ๊ธฐ ์ํด์๋ ์๋์ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์นจ
fib(5) = fib(4) + fib(3)
= fib(3) + fib(2) + fib(3)
= fib(2) + fib(1) + fib(2) + fib(2) + fib(1)
์์ ๊ฐ์ด fib(5)๋ฅผ ํธ๋๋ฐ fib(3) ์ ์ฌ๋ฌ๋ฒ ๊ณ์ฐํด์ผ ํจ. ์ด๋ ๊ฒ ๊ฐ์ ๋ฌธ์ ๋ฅผ ์ฌ๋ฌ๋ฒ ํธ๋ ๊ฒ์ ๋นํจ์จ์ .
์ด๋ฌํ ๋นํจ์จ์ ํด๊ฒฐํ๋ ์๊ณ ๋ฆฌ์ฆ ํจ๋ฌ๋ค์์ด ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ์์ ๊ฐ์ด ํ ๋ฒ ๊ณ์ฐํ ๊ฒฐ๊ณผ๋ฅผ ํ์ ์ ์ฅํด๋์๋ค ํ์ํ ๋ ๊บผ๋ด ์ฐ๋ ๋ฐฉ์์ ์ฌ์ฉ
→ ํ ๋ฒ ๊ณ์ฐํ ๊ฒฐ๊ณผ๋ฅผ ์ฌํ์ฉํ๋ ๋ฐฉ์
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์๋ Memoization๊ณผ Tabulation ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์.
๐ Memoization
์ค๋ณต๋๋ ๊ณ์ฐ์ ํ ๋ฒ๋ง ๊ณ์ฐ ํ ๋ฉ๋ชจํ๊ณ ๊ทธ ์ดํ์๋ ๋ฉ๋ชจ๋ฅผ ์ฐธ๊ณ ํ๋ ๋ฐฉ์์ผ๋ก, ์ฌ๊ท๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑ.
๋ฉ๋ชจ๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ ์ฆ, ๋ค์ ์ธ ๊ฐ์ ์ ์ฅํด ๋๋ ๊ณต๊ฐ์ ์บ์(cache)๋ผ ํจ. ์ค๋ณต๋๋ ๊ณ์ฐ์ ์บ์์ ์ ์ฅํด ๋๊ณ ๋ค์ ๊ณ์ฐํด์ผ ํ ๋ ๊บผ๋ด ์.
โผโผโผ Memoization์ผ๋ก ํผ๋ณด๋์น ํจ์ ์์ฑ โผโผโผ
โ base case์ recursive ์ผ์ด์ค ์ฐพ๊ธฐ
- base case : n์ด 1 ํน์ธ 2์ผ ๋ 1์ ๋ฆฌํดํจ
- recursive case → 2๊ฐ์ง ๊ฒฝ์ฐ๋ก ๋๋ ์ ์์
1) ์ด๋ฏธ cache์ ํค n์ ๋ํ ๊ฐ์ด ์ ์ฅ ๋์ด ์์ ๋ → cache[n] ๋ฆฌํด
2) cache์ ํค n์ ๋ํ ๊ฐ์ด ์์ ๋ → ์ฌ๊ท ํ์ฉํ์ฌ ํค n์ ๋ํ ๊ฐ์ ๊ตฌํ ํ cache[n] ๋ฆฌํด
์์ ๊ฐ์ด memoization์ ๋งจ ์์์๋ถํฐ ์์ํด ํ๋์ฉ ๋ด๋ ค๊ฐ๋ ์ฌ๊ณ ๋ฐฉ์(ํํฅ์ ์ ๊ทผ, Top down approach).
memoization๊ณผ ๋ฐ๋๋ก f(1)๋ถํฐ ์ฐจ๋ก๋๋ก ๊ณ์ฐํ์ฌ ๊ตฌ๋ํ๋ Bottom-up approach ๋ฐฉ์์ด ์์. ์ด ๋ฐฉ์ ๋ํ ํ ๋ฒ๋ง ๊ณ์ฐํ๋ฏ๋ก dynamic programming ์ค ํ๋. ์ด๋ฌํ ๋ฐฉ์์ Tabulation์ด๋ผ ํจ.
๐ Tabulation
Table ๋ฐฉ์์ผ๋ก ์ ๋ฆฌํ๋ค๋ ๋ป์ผ๋ก ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํด์ ๋ฆฌ์คํธ๋ฅผ ์ฑ์๋๊ฐ๊ฒ ๋จ
โผโผโผ Tabulation์ผ๋ก ํผ๋ณด๋์น ํจ์ ์์ฑ โผโผโผ
โ ํผ๋ณด๋์น ์๋ฅผ ์ ์ฅํ ๋ฆฌ์คํธ ์์ฑ (tab) ํ๊ณ 0 ~ 2๋ฒ์งธ ๊ฐ ๋ฃ๊ธฐ
→ ๋ฆฌ์คํธ๋ ์ธ๋ฑ์ค 0๋ถํฐ ์์ํ๋ฏ๋ก n๋ฒ์งธ์ ํผ๋ณด๋์น ์๋ฅผ ์ฐพ๊ธฐ ์ํด์ ์ธ๋ฑ์ค 0์ 0 ์ ๋ ฅ
โก ๋ฐ๋ณต๋ฌธ ์ฌ์ฉํ์ฌ tab์ ํผ๋ณด๋์น ์ ์ถ๊ฐ
โผโผโผ Tabulation์ผ๋ก ํผ๋ณด๋์น ์ ์ฐพ๊ธฐ (๋ด๊ฐ ์์ฑํ ์ฝ๋) โผโผโผ
์ฐจ์ด์ : ๋ฆฌ์คํธ ๋์ ๋์ ๋๋ฆฌ, for๋ฌธ ๋์ while๋ฌธ ํ์ฉํ์ฌ ์์ฑ
๐ Memoization vs Tabulation
๊ณตํต์ : ์ค๋ณต๋๋ ๋ถ๋ถ ๋ฌธ์ ์ ๋นํจ์จ์ ํด๊ฒฐ
์ฐจ์ด์ : Memoization์ ์ฌ๊ทํจ์, Tabulation์ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉ
memoization์ ๊ฒฝ์ฐ ์ฌ๊ท ํจ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํ๊ธฐ ๋๋ฌธ์ ์ฌ๊ท ํธ์ถ์ด ๋๋ฌด ๋ง์ด ์ผ์ด๋๋ฉด ์คํ์ด ์์ฌ ๊ณผ๋ถํ๊ฐ ๋์ด ์ค๋ฅ ๋ฐ์. ๋ฐ๋ฉด, Tabulation์ ์ฒ์๋ถํฐ n๋ฒ์งธ๊น์ง ๋ชจ๋ ๊ณ์ฐํ๊ธฐ ๋๋ฌธ์ ์ค๊ฐ์ ํ์์๋ ๋ถ๋ถ๊น์ง ๊ณ์ฐํ๋ ๊ฒฝ์ฐ๋ ์์ ์ ์์. memoization์ ๋ค์์๋ถํฐ ํ์ํ ๊ณ์ฐ์ ์๊ตฌํ๋ ํํ์ด๋ฏ๋ก ๋ถํ์ํ ๊ณ์ฐ์ ํ์ง ์๋๋ค๋ ์ฅ์ ์ด ์์.
Tabulation์ผ๋ก ํผ๋ณด๋์น ํจ์ ํ ๊ฒฝ์ฐ
์๊ฐ ๋ณต์ก๋ : O(n)
๊ณต๊ฐ ๋ณต์ก๋ : O(n)
tabulation์ ๋ฆฌ์คํธ์ ๋ชจ๋ ๊ณ์ฐ ๊ฐ์ ์ ์ฅํจ → ๊ณต๊ฐ ๋ณต์ก๋๋ฅผ ์ค์ด๊ธฐ ์ํด ๊ฐ์ฅ ์ต๊ทผ ๊ฐ 2๊ฐ๋ง ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฅํ๋ฉด ๊ณต๊ฐ ๋ณต์ก๋๋ฅผ ์ค์ผ ์ ์์(current, previous) → ์ด๋ ๊ฒ ํ๋ฉด ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ๋ ๊ณ ์ ๋์ด ์๊ธฐ ๋๋ฌธ์ ๊ณต๊ฐ๋ณต์ก๋๋ O(1)์ด ๋จ
โผโผโผ ๊ณต๊ฐ ๋ณต์ก๋ O(1)์ธ ํผ๋ณด๋์น ์ ํจ์ ์์ฑ โผโผโผ
์์ ์ ์ฅ ๋ณ์ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ฝ๋ :
for i in range(1, n)
temp = current
current = current + previous
previous = temp
์์ ์ ์ฅ ๋ณ์ ์๋ตํ ๊ฒฝ์ฐ ์ฝ๋ :
for i in range(1, n)
current, previos = current + previous, current
โผโผโผ ๊ณต๊ฐ ๋ณต์ก๋ O(1)์ธ ํผ๋ณด๋์น ์ ํจ์ ์์ฑ(๋ด๊ฐ ์์ฑ) โผโผโผ
์์ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํ์๊ณ , temp์ previous ๊ฐ์ ์ ์ฅ
์์ ์ ์ฅ ๋ณ์๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ํ์ค๋ก ์์ฑํ ์ฝ๋