๋ฐ์ํ
DP
๋ฉ๋ชจ์ด์ ์ด์ (memoization)
- ์ด์ ์ ๊ณ์ฐํ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํด์ ๋งค๋ฒ ๋ค์ ๊ณ์ฐํ์ง ์๋๋ก ํ์ฌ ์ ์ฒด์ ์ธ ์คํ์๋๋ฅผ ๋น ๋ฅด๊ฒ ํ๋ ๊ธฐ์
→ ๋์ ๊ณํ๋ฒ์ ํต์ฌ ๊ธฐ์ ! - ex) ํผ๋ณด๋์น ์์ด์ ์ฌ๊ท: ์ค๋ณตํธ์ถ์ ๋ฐ๋ณตํ๊ฒ ๋จ
# memo๋ฅผ ์ํ ๋ฐฐ์ด์ ํ ๋นํ๊ณ , ๋ชจ๋ 0์ผ๋ก ์ด๊ธฐํ ํ๋ค.
# memo[0]์ 0์ผ๋ก memo[1]์ 1๋ก ์ด๊ธฐํ ํ๋ค.
fibo(n)
IF n>=2 AND memo[n] = 0
memo[n] <- fibo(n-1) + fibo(n-2)
RETURN memo[n]
→ ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ํ์
→ ์ฌ๊ท ํจ์ ํธ์ถ๋ก ์ธํ ์์คํ ํธ์ถ ์คํ์ ์ฌ์ฉํ๊ฒ ๋๊ณ ์คํ ์๋ ์ ํ ๋๋ ์ค๋ฒํ๋ก์ฐ๊ฐ ๋ฐ์
๋์ ๊ณํ๋ฒ
์ ์ฉ ์๊ฑด
- ๋ถ๋ถ ๋ฌธ์ ๋ค์ ๋ ์์ ๋ถ๋ถ ๋ฌธ์ ๋ค์ ๊ณต์ ํ๋ค.
- ๋ชจ๋ ๋ถ๋ถ ๋ฌธ์ ๋ฅผ ํ๋ฒ๋ง ๊ณ์ฐํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๊ณ ์ฌ์ฌ์ฉํ๋ค.
ํผ๋ณด๋์น ์ DP ์ ์ฉ
- ๋ฌธ์ ๋ฅผ ๋ถ๋ถ ๋ฌธ์ ๋ก ๋ถํ ํ๋ค.
- ์ ํ์์ผ๋ก ์ ์ํ๋ค.
- ๊ฐ์ฅ ์์ ๋ถ๋ถ ๋ฌธ์ ๋ถํฐ ํด๋ฅผ ๊ตฌํ๋ค. ๊ฒฐ๊ณผ๋ฅผ ํ ์ด๋ธ์ ์ ์ฅํ๊ณ , ์ ์ฅ๋ ๋ถ๋ถ ๋ฌธ์ ์ ํด๋ฅผ ์ด์ฉํ์ฌ ์์ ๋ฌธ์ ์ ํด๋ฅผ ๊ตฌํ๋ค.
fibo_dp(n)
f[0] <- 0
f[1] <- 1
for i in 2->n
f[i] <- f[i-1] + f[i-2]
return f[n]
→ ์ค๋ณต ๊ณ์ฐ์ด ์๊ณ ๋ฐ๋ณต๋ฌธ ์ฌ์ฉ์ผ๋ก ํจ์ ํธ์ถ์ด ์๊ธฐ ๋๋ฌธ์ ์ํ์๋๊ฐ ๋ ๋น ๋ฅด๋ค!
Knapsack
์ ์
- W = ๋ฐฐ๋ญ์ ์ฉ๋
- ( vi, wi ) = ๊ฐ์น, ๋ฌด๊ฒ ๋ฌผ๊ฑด
- K[i,w] = ๋ฌผ๊ฑด 1~i๊น์ง๋ง ๊ณ ๋ คํ๊ณ , ๋ฐฐ๋ญ์ ์ฉ๋์ด 2์ผ ๋์ ์ต๋ ๊ฐ์น
FOR i in 0 -> n : K[i, 0] <- 0
FOR w in 0 -> W : K[0, w] <- 0
FOR i in 1 -> n
FOR w in 1 -> w
IF wi > w
K[i, w] <- K[i-1, 2]
ELSE
K[i, w] <- max(vi + K[i-1, w-wi], K[i-1, w])
RETURN K[n,W]
๋ฐ์ํ
'๐ ์๊ณ ๋ฆฌ์ฆ > Dynamic Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[LeetCode] 403. Frog Jump (ํด์, Java ํ์ด) (0) | 2023.08.28 |
---|---|
[LeetCode] 95. Unique Binary Search Trees II (ํด์, Kotlin/Ja va ํ์ด) (0) | 2023.08.05 |