ํฐ์คํ ๋ฆฌ ๋ทฐ
DP๋?
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ๋์ ๊ณํ๋ฒ์ด๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ฐ์ฐ ์๋์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ต๋ํ์ผ๋ก ํ์ฉํ ์ ์๋ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
DP๋ ์๋์ ๊ฐ์ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋๋ฉด ์ ์ฉํ ์ ์์ต๋๋ค.
- problem์ด ๋ ์์ sub-problem๋ค๋ก ์ชผ๊ฐ์ง ์ ์์๋
- sub-problem๋ค์ ์๋ฃจ์ ์ผ๋ก ๋ ํฐ ๊ท๋ชจ์ problem์ ์๋ฃจ์ ์ ๊ตฌํ ์ ์์ ๋
- ์ชผ๊ฐ์ง sub-problem๋ค์ด ๊ฒน์น ๋
์ฆ, ํฐ ๋ฌธ์ ๋ฅผ ์์ ๋ฌธ์ ๋ก ๋๋์ด ํ์ด ์ ์ฅ(Memoization) ํจ์ผ๋ก์จ, ํ ๋ฒ ๊ณ์ฐํ ๋ฌธ์ ๋ ๋ค์ ๊ณ์ฐํ์ง ์๋๋ก ํฉ๋๋ค.
Top-Down vs Bottom-up
DP๋ก ํ์ดํ๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ 2๊ฐ์ง, Top-Down ๋ฐฉ์๊ณผ Bottom-up๋ฐฉ์์ผ๋ก ๋๋ฉ๋๋ค.
Top-Down ๋ฐฉ์
์ฐ๋ฆฌ๋ง๋ก 'ํํฅ์'์ด๋ผ๊ณ ๋ ํ๋ฉฐ ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์์ ๋ฌธ์ ๋ฅผ ํธ์ถํ๋ ๋ฐฉ์์ ๋๋ค.
- ๋ณดํต ์ฌ๊ท ํธ์ถ์ ํตํด ๋ต์ ๊ตฌํจ
- ํจ์ ํธ์ถ์ ํ์๋ฅผ ์ค์ด๊ธฐ ์ํด *๋ฉ๋ชจ์ด์ ์ด์ ๊ธฐ๋ฒ์ด ์ฌ์ฉ๋จ
*๋ฉ๋ชจ์ ์ด์ ๊ธฐ๋ฒ
์ปดํจํฐ ํ๋ก๊ทธ๋จ์ด ๋์ผํ ๊ณ์ฐ์ ๋ฐ๋ณตํด์ผ ํ ๋, ์ด์ ์ ๊ณ์ฐํ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํจ์ผ๋ก์จ ๋์ผํ ๊ณ์ฐ์ ๋ฐ๋ณต ์ํ์ ์ ๊ฑฐํ์ฌ ํ๋๊ทธ๋จ ์คํ ์๋๋ฅผ ๋น ๋ฅด๊ฒ ํ๋ ๊ธฐ์
์๋ฅผ ๋ค์ด dp[n]์ ํผ๋ณด๋์น ์์ด์ ๊ฐ์ ์ ์ฅํจ์ผ๋ก์จ ๋ฉ๋ชจ์ ์ด์ ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
const N = 10;
const dp = Array.from({length: N+1}, () => -1);
const fibonacci = (n) => {
if (n == 0) return 0;
if (n == 1) return 1;
if (dp[n] != -1) return dp[n];
dp[n] = fibonacci(n - 1) + fibonacci(n - 2);
return dp[n];
}
console.log(fibonacci(10)); // 55
Bottom-Up ๋ฐฉ์
์ฐ๋ฆฌ๋ง๋ก '์ํฅ์'์ด๋ผ๊ณ ๋ ํ๋ฉฐ ๊ฐ์ฅ ์์ ๋ฌธ์ ๋ค๋ถํฐ ๋ต์ ์ฐพ์ ๊ฐ๋ฉด์ ๋ง์ง๋ง์๋ ์ ์ฒด ๋ฌธ์ ์ ๋ต์ ๊ตฌํ๋ ๋ฐฉ์์ ๋๋ค.
- ๋ณดํต ๋ฐ๋ณต๋ฌธ์ ์ด์ฉํด ๊ตฌํ
- ์ฌ๊ท ํธ์ถ์ ํ์ง ์์ผ๋ฏ๋ก ์๊ฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ์ฉ๋์ด ์๋์ ์ผ๋ก ์ ๋ค๋ ์ด์ ์ด ์์
์๋ฅผ ๋ค์ด ํผ๋ณด๋์น ์์ด์ ๊ฐ์ ๊ตฌํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
const N = 10;
const dp = Array.from({length: N+1}, () => -1);
const fibonacci = (n) => {
dp[0] = 0, dp[1] = 1;
for (let i = 2; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
}
}
fibonacci(10);
console.log(dp);
// [ 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 ]
๋ ๋ฐฉ์์ ๊ตฌํ ๋์ด๋๊ฐ ๋ฌธ์ ๋ง๋ค ๊ต์ฅํ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ DP๋ฌธ์ ์ํฉ์ ๋ฐ๋ผ ๋ฐฉ๋ฒ์ ์ ํํ๊ฒ ๋ฉ๋๋ค.
[์ฐธ๊ณ ]
https://www.youtube.com/watch?v=eJC2oetXaNk
https://velog.io/@chnh506/Top-down-%EB%B0%A9%EC%8B%9D%EA%B3%BC-Bottom-up-%EB%B0%A9%EC%8B%9D
'CS > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] ์ ๋ ฌ(Sorting Algorithm)์ด๋? (1) | 2022.09.25 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ์๋ผํ ์คํ ๋ค์ค์ ์ฒด (0) | 2022.08.01 |
- Total
- Today
- Yesterday
- ๋คํธ์ํฌ
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- ์ด๋ถํ์
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
- ํฌํฌ์ธํฐ
- ์๋ฐ
- TDD
- fp
- Baekjoon
- ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ deep dive
- map
- ์ฝ๋ฉํ ์คํธ
- ๋ฐฑ์ค node.js
- http
- ์ ์ญ ๋ณ์
- ํ๋ก๊ทธ๋๋จธ์ค
- ๋ฐฑ์ค javascript
- 2019 ์นด์นด์ค ๊ฐ๋ฐ์ ๊ฒจ์ธ ์ธํด
- ๋ ์์ปฌ ํ๊ฒฝ
- git
- ํ๋กํ ์ฝ
- ๋ฐฑ์ค
- ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
- ์นด์นด์ค ์ธํด
- JavaScript
- ๋์์ธ ํจํด
- ํ๋กํผํฐ
- ์๋ฐ์คํฌ๋ฆฝํธ
- ์๊ณ ๋ฆฌ์ฆ
- ์ด์์ฒด์
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 | 31 |