Goal
1. ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ ์ดํดํ๊ธฐ
2. Top-down๊ณผ bottom-up ๋ฐฉ๋ฒ ์์๋ณด๊ธฐ
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ(Dynamic Programing)์ด๋?
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ด๋ ์ด๋ค ๋ฌธ์ ๊ฐ ์ฃผ์ด์ก์ ๋ ๊ทธ ๋ฌธ์ ๋ฅผ ๋ ์์ ๋จ์์ ๋ฌธ์ ๋ค๋ก ์ชผ๊ฐ์ ์์ ๋ฌธ์ ๋ถํฐ ํ์ด๋๊ฐ๋ ๋ฐฉ๋ฒ์ด๋ค. ๋ ์์ ๋จ์๋ก ์ชผ๊ฐ์ง ๋ฌธ์ ๋ฅผ ํ์ด์ ์ป์ ๊ฒฐ๊ณผ๋ก ์๋ ๋ฌธ์ ์ ํด๋ต์ ์ ์ ๋ ๊ฐ๊น์์ง๋ ๋ฐฉ์์ด๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ ํ์ ์ ๋ฌธ์ ๋ฅผ ์์ ๋จ์๋ก ์ชผ๊ฐค ์ ์์ ๋๋ง ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ๊ฐ์ฅ ํํ ์์ ๊ฐ ๋ฐ๋ก ํผ๋ณด๋์น ์ซ์์ด๋ค. ํผ๋ณด๋์น ์ซ์๋ ๊ทธ ์ ์ ์ค๋ ๋ ์ซ์๋ฅผ ๊ณ์ํด์ ๋ํด ๋๊ฐ๊ธฐ ๋๋ฌธ์ n๋ฒ์งธ ์ซ์๋ฅผ ์์๋ด๊ธฐ ์ํด์ ์ฒ์๋ถํฐ ๊ณ์ ๋ํด์ค๋ฉด ๋๋ค. ๋ ์ซ์์ฉ ๋ํ๋ ์์ ๋จ์์ ๋ฌธ์ ๋ฅผ ํ๋ค๋ณด๋ฉด n๋ฒ์งธ ์ซ์๋ฅผ ๊ตฌํ๊ธฐ ์ํ ์์ ์ธ์ ๊ฐ๋ ๋๋ฌํ ์ ์๋ ๊ฒ์ด๋ค!
์๋ฆฌ | F[0] | F[1] | F[2] | F[3] | F[4] | F[5] | ... | F[n] |
์ซ์ | 0 | 1 | 1 | 2 | 3 | 5 | ... | F[n-1] + F[n-2] |
Top-down vs. Bottom-up
Top-down (memoization)
Top-down์ memoization ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. Memoization์ด๋ ์์ ๋จ์์ ๋ฌธ์ ๋ค์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํด์ ์ด ๊ฒฐ๊ณผ๊ฐ ํ์ํ ๋ ๋ค์ ๊ณ์ฐํ ํ์ ์์ด ๋ฐ๋ก ์ ์ฅํ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ๋ค ์ธ ์ ์๋ ๊ฒ์ ๋งํ๋ค. Top-down์ ์ค๊ฐ ๋จ๊ณ๋ฅผ ์ ์ฅํ๋ฉด์ ์งํํ๋ ์ฌ๊ทํจ์์ ๊ฐ๋ค.
์์์ ์ค๋ช ํ ํผ๋ณด๋์น ์ซ์๋ฅผ top-down ๋ฐฉ์์ผ๋ก ํผ๋ค๋ฉด ์๋ ๊ทธ๋ฆผ์ฒ๋ผ ์์ด ์น ํด์ง ๋ถ๋ถ์ ๊ฒน์น๊ธฐ ๋๋ฌธ์ ํ๋ฒ๋ง ๊ณ์ฐํด ๋์ผ๋ฉด ๊ทธ ์ดํ์ ํ์ํ ๋๋ ๊ณ์ฐ ์์ด ๋ฏธ๋ฆฌ ์ ์ฅํด ๋์ ๊ฐ์ ๊ฐ๋ค ์ฐ๋ฉด ๋๋ค.
Bottom-up (tabulation)
Bottom-up์ tabulation์ด๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋๋ฐ ๊ฐ์ฅ ์์ ๋จ๊ณ๋ถํฐ ์ฐจ๋ก๋๋ก ์์ ์ฌ๋ ค๊ฐ๋ ๊ฒ์ด๋ค. ํผ๋ณด๋์น ์ซ์๋ฅผ ํ ๋ ์๋์ฒ๋ผ Fib(0) ๊ณผ Fib(1)์ด ๊ฐ๊ฐ 0๊ณผ 1๋ก ์์ํ๋ ๊ฒ์ ์ด์ฉํด ์์๋๋ก Fib(2)๋ฅผ ๊ณ์ฐํ๊ณ , ์ ์ฅ๋ ๊ฐ๋ค๋ก Fib(3)์ ๊ณ์ฐํ๋ ๋ฐฉ์์ผ๋ก ์งํํ๋ค.
Top-down๊ณผ Bottom-up์ ์ฐจ์ด
์ฐจ์ด์ | Top-down (memoization) | Bottom-up (tabulation) |
์๊ณ ๋ฆฌ์ฆ | ์ฌ๊ท ๋ฐฉ๋ฒ (recursive) | ๋ฐ๋ณต๋ฌธ (iterative) |
์๋ | ์ฌ๊ท ๋ฐฉ๋ฒ์ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ์กฐ๊ธ ๋ ๋๋ฆผ | ๋ฐ๋ณต๋ฌธ์ด์ฌ์ n ๊ฐ์ ๋งํผ ๋์ด๋จ |
์งํ ๋ฐฉํฅ | ํ๊ณ ์ ํ๋ ๋ฌธ์ ์์ ์์ํด์ base case (ํผ๋ณด๋์น ์์ ์์ Fib(1)๊ณผ Fib(0))๋ก ๋ด๋ ค๊ฐ | Base case์์ ์์ํด์ ํ๊ณ ์ ํ๋ ๋ฌธ์ ๋ก ์ฌ๋ผ๊ฐ |
๊ณต๊ฐ ํ์ฉ | ์ฌ๊ท ๋ฐฉ๋ฒ์ด์ฌ์ n ๊ฐ์๊ฐ ํฌ๋ฉด stack overflow๊ฐ ๋ฐ์ํด ์ฝ๋๊ฐ ์ค๋จ๋จ | ๋ฐ๋ณต๋ฌธ์ด์ฌ์ ๋ฌธ์ ์์ |
์ฐธ๊ณ
https://www.spiceworks.com/tech/devops/articles/what-is-dynamic-programming/
https://www.enjoyalgorithms.com/blog/top-down-memoization-vs-bottom-up-tabulation
'๐งฉ Algorithm > ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1463๋ฒ: 1๋ก ๋ง๋ค๊ธฐ (0) | 2023.02.17 |
---|
๋๊ธ