๋ณต์กํ ๋ฌธ์ ๋ฅผ ๊ฐ๋จํ ์ฌ๋ฌ ๊ฐ์ ๋ฌธ์ ๋ก ๋๋์ด ํธ๋ ๋ฐฉ๋ฒ
ํํ ๋งํ๋ DP๊ฐ ๋ฐ๋ก '๋์ ๊ณํ๋ฒ'
ํ ๊ฐ์ง ๋ฌธ์ ์ ๋ํด์, ๋จ ํ ๋ฒ๋ง ํ๋๋ก ๋ง๋ค์ด์ฃผ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์ฆ, ๋๊ฐ์ ์ฐ์ฐ์ ๋ฐ๋ณตํ์ง ์๋๋ก ๋ง๋ค์ด์ค๋ค. ์คํ ์๊ฐ์ ์ค์ด๊ธฐ ์ํด ๋ง์ด ์ด์ฉ๋๋ ์ํ์ ์ ๊ทผ ๋ฐฉ์์ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๊ณ ํ ์ ์๋ค.
๋์ ๊ณํ๋ฒ์ Optimal Substructure์์ ํจ๊ณผ๋ฅผ ๋ฐํํ๋ค.
Optimal Substructure : ๋ต์ ๊ตฌํ๊ธฐ ์ํด ์ด๋ฏธ ํ๋ ๋๊ฐ์ ๊ณ์ฐ์ ๊ณ์ ๋ฐ๋ณตํ๋ ๋ฌธ์ ๊ตฌ์กฐ
์ ๊ทผ ๋ฐฉ์
์ปค๋ค๋ ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ํด๊ฒฐํ๊ธฐ ์ํด ์๊ฒ ์ชผ๊ฐ์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ธ ๋ถํ ์ ๋ณต๊ณผ ๋งค์ฐ ์ ์ฌํ๋ค. ํ์ง๋ง ๊ฐ๋จํ ๋ฌธ์ ๋ก ๋ง๋๋ ๊ณผ์ ์์ ์ค๋ณต ์ฌ๋ถ์ ๋ํ ์ฐจ์ด์ ์ด ์กด์ฌํ๋ค.
๋ชจ๋ ๋ต์ ๋ง๋ค์ด๋ณด๊ณ ๊ทธ ์ค ์ต์ ํด์ ์ ์๋ฅผ ๋ฐํํ๋ ์์ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ค๊ณํ๋ค.
์ฆ, ๋์ ๊ณํ๋ฒ์ ๊ฐ๋จํ ์์ ๋ฌธ์ ๋ค ์์์ '๊ณ์ ๋ฐ๋ณต๋๋ ์ฐ์ฐ'์ ํ์ฉํ์ฌ ๋น ๋ฅด๊ฒ ํ ์ ์๋ ๊ฒ์ด ํต์ฌ์ด๋ค.
์กฐ๊ฑด
- ์์ ๋ฌธ์ ์์ ๋ฐ๋ณต์ด ์ผ์ด๋จ
- ๊ฐ์ ๋ฌธ์ ๋ ํญ์ ์ ๋ต์ด ๊ฐ์
์ด ๋ ๊ฐ์ง ์กฐ๊ฑด์ด ์ถฉ์กฑํ๋ค๋ฉด, ๋์ ๊ณํ๋ฒ์ ์ด์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํ ์ ์๋ค.
๊ฐ์ ๋ฌธ์ ๊ฐ ํญ์ ์ ๋ต์ด ๊ฐ๊ณ , ๋ฐ๋ณต์ ์ผ๋ก ์ผ์ด๋๋ค๋ ์ ์ ํ์ฉํด ๋ฉ๋ชจ์ด์ ์ด์ (Memoization)์ผ๋ก ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด๋๊ฐ๋ ๊ฒ์ด๋ค.
๋ฉ๋ชจ์ด์ ์ด์ (Memoization) : ํ ๋ฒ ๊ณ์ฐํ ๋ฌธ์ ๋ ๋ค์ ๊ณ์ฐํ์ง ์๋๋ก ์ ์ฅํด๋๊ณ ํ์ฉํ๋ ๋ฐฉ์
ํผ๋ณด๋์น ์์ด์์ ์ฌ๊ท๋ฅผ ํ์ฉํ์ฌ ํ ๊ฒฝ์ฐ, ๊ฐ์ ์ฐ์ฐ์ ๊ณ์ ๋ฐ๋ณตํจ์ ์ ์ ์๋ค.
์ด๋, ๋ฉ๋ชจ์ด์ ์ด์ ์ ํตํด ๊ฐ์ ์์ ์ ๋ํ์ด ํ์ง ์๋๋ก ๊ตฌํํ๋ฉด ํจ์จ์ ์ด๋ค.
fibonacci(5) = fibonacci(4) + fibonacci(3)
fibonacci(4) = fibonacci(3) + fibonacci(2)
fibonacci(3) = fibonacci(2) + fibonacci(1)
์ด์ฒ๋ผ ๊ฐ์ ์ฐ์ฐ์ด ๊ณ์ ๋ฐ๋ณต์ ์ผ๋ก ์ด์ฉ๋ ๋, ๋ฉ๋ชจ์ด์ ์ด์
์ ํ์ฉํ์ฌ ๊ฐ์ ๋ฏธ๋ฆฌ ์ ์ฅํด๋๋ฉด ํจ์จ์
ํผ๋ณด๋์น ๊ตฌํ์ ์ฌ๊ท๋ฅผ ํ์ฉํ๋ค๋ฉด ์๊ฐ๋ณต์ก๋๋ O(2^n)์ด์ง๋ง, ๋์ ๊ณํ๋ฒ์ ํ์ฉํ๋ฉด O(N)์ผ๋ก ํด๊ฒฐํ ์ ์๋ค.
๊ตฌํ ๋ฐฉ์
- Bottom-up : ์์ ๋ฌธ์ ๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ ๊ตฌํ๋ ๋ฐฉ๋ฒ
- Top-down : ํฐ ๋ฌธ์ ๋ฅผ ํ๋ค๊ฐ ํ๋ฆฌ์ง ์์ ์์ ๋ฌธ์ ๊ฐ ์๋ค๋ฉด ๊ทธ๋ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ (์ฌ๊ท ๋ฐฉ์)
Fibonacci ์์ด์ ์๋ก ๋ค์ด๋ณด๋ฉด,
top-down
f (int n) {
if n == 0 : return 0
elif n == 1: return 1
if dp[n] has value : return dp[n]
else : dp[n] = f(n-2) + f(n-1)
return dp[n]
}
bottom-up
f (int n){
f[0] = 0
f[1] = 1
for (i = 2; i <= n; i++) {
f[i] = f[i-2] + f[i-1]
}
return f[n]
}
Bottom-up์ ํด๊ฒฐ์ด ์ฉ์ดํ์ง๋ง, ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง
Top-down์ ๊ฐ๋ ์ฑ์ด ์ข์ง๋ง, ์ฝ๋ ์์ฑ์ด ํ๋ฌ
๋์ ๊ณํ๋ฒ์ผ๋ก ๋ฌธ์ ๋ฅผ ํ ๋๋, ์ฐ์ ์์ ๋ฌธ์ ๋ถํฐ ํด๊ฒฐํด๋๊ฐ๋ณด๋ ๊ฒ์ด ์ข๋ค.
์์ ๋ฌธ์ ๋ค์ ํ์ด๋๊ฐ๋ค๋ณด๋ฉด ์ด์ ์ ๊ตฌํด๋ ๋ ์์ ๋ฌธ์ ๋ค์ด ํ์ฉ๋๋ ๊ฒ์ ํ์ธํ๊ฒ ๋๋ค. ์ด์ ๋ํ ๊ท์น์ ์ฐพ์์ ๋ ์ ํ์์ ๋์ถํด๋ด์ด ๋์ ๊ณํ๋ฒ์ ์ ์ฉ์ํค์
'๐ป Computer Science > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ด๋ถ ํ์(Binary Search) (0) | 2023.01.19 |
---|