Dynamic Programming
2020-1ํ๊ธฐ, ๋ํ์์ โ์๊ณ ๋ฆฌ์ฆโ ์์ ์ ๋ฃ๊ณ ๊ณต๋ถํ ๋ฐ๋ฅผ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. ์ง์ ์ ์ธ์ ๋ ํ์์ ๋๋ค :)
DP๋ ์ ๋ง ์๊ณ ๋ฆฌ์ฆ PS๋ฅผ ํ๋ฉด์, ๋น ์ง ์ ์๋ ์ฃผ์ ๋ค!! ์ค์ ๋์ํ๋ ๋ง์ ์๊ณ ๋ฆฌ์ฆ์ด DP์ ํ ํฌ๋์ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ, ์ฐ๋ฆฌ๋ DP๊ฐ ๊ฐ์ ธ๋ค์ฃผ๋ ํจ์จ์ฑ์ ๋ ๋๋ฆฌ๊ณ ์๋ค.
DP์ ์ปจ์ ์ ์๋์ ๊ฐ๋ค.
1. Identifying a collection of subproblems.
2. Tackling them one by one.
2.1. smallest first.
2.2. using the result of small ones to solve the larger ones.
2.3. repeat this until solve the whole problems!
์ข๋ ์ถ์ํํ ๊ด์ ์์ DP๋ฅผ ๋ฐ๋ผ๋ณด๋ฉด, โDAG ordering on btw subproblemsโ, and โsmaller subproblem์ ํธ๋ ๋ฐฉ์์ด bigger subproblem์ ํธ๋ ๋ฐ์ ๊ทธ๋๋ก ์ฌ์ฉ๋๋คโ๋ผ๊ณ ๋งํ ์ ์๋ค.
DP ํ ํฌ๋์ ์ค์ฌ์ <Memoization>์ด๋ผ๊ณ ํ ์ ์๋ค. subproblem์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก problem์ ํ๊ธฐ ๋๋ฌธ์ ๋น์ฐํ subproblem์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅ(memo)ํ ํ์๊ฐ ์๊ณ , ์ด๋ ์ฐ๋ ํ ํฌ๋์ด ๋ฐ๋ก <Memoization>์ด๋ค. ๊ฐ๋จํ ๋งํ์๋ฉด, <Memoization>์ ๊ทธ๋ฅ subproblem์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์ด์ ์ ์ฅํ๋ค!์ด๋ค. ์ด Memoization์ ์ด๋ป๊ฒ ํ ๊ป์ง ๊ณ ๋ฏผํ๋ ๊ฒ ์ญ์ DP์์ ์ค์ํ ๋ถ๋ถ์ด๊ธฐ ๋๋ฌธ์ ๋ง์ ์ฐ์ต์ด ํ์ํ๋ค.
์ด๋ฒ ์ฑํฐ์์ ๋ค๋ฃจ๋ ๋ฌธ์ ๋ค์ ์๋์ ๊ฐ๋ค.
- LIS; Longest Incresaing Subsequences
- Edit Distance
- Knapsack
- Chain Matrix Multiplication
- Shortest Reliable Paths
- All Pairs Shortest Paths
- TSP; Traveling Salesman Problem
- Weighted Interval Scheduling
(์๋นํ ๋ง์ ๋ฌธ์ ๊ฐ DP์ ํ ํฌ๋์ ์ฌ์ฉํ๋ค. ๊ทธ๋งํผ DP๊ฐ ์ค์ํ๋ค๋ ๋ง!)