VIII. Dynamic Programming & Divide and Conquer (1)
* ์ค๋์ ํน๋ณํ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐฐ์ฐ๋ ๊ฒ์ด ์๋๋ผ, โ๋ฐฉ๋ฒ๋ก โ ์ ๊ฐ๊น๊ธฐ ๋๋ฌธ์, Section๊ณผ Additional์ ๊ตฌ๋ถ์ด ๋ณ๋ก ์๊ณ ๋ชจ๋ ์๋ฌธ์ ๋ค๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ์ฌ๊ธฐ ๋์จ ๋ชจ๋ ์๋ฌธ์ ๋ฅผ ๊ณ ๋ฏผํด ๋ณด๊ธธ ๊ถํฉ๋๋ค.
Divide and Conquer
์ด๋ค ๋ฌธ์ ๋ค์ ๋ฌธ์ ์์ฒด๊ฐ ์ฌ๊ท์ ์
๋๋ค. ์ฆ, ์ด๋ค ์ปค๋ค๋ ๋ฌธ์ X๋ฅผ
ํ๊ธฐ ์ํด, X๋ฅผ ์ฌ๋ฌ ๊ฐ์ ์์ ๋ฌธ์ $x_1, x_2, \dots x_k$๋ก ๋๋ ๋ค์,
๊ฐ๊ฐ์ ํ๊ณ , ํฉ์น ์ ์์ต๋๋ค. ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ์๊ฐํด ๋ณด์๋ฉด, ์ฌ๊ทํจ์๋ฅผ
์ฐ๋ ๊ฒ์ด ์์ฐ์ค๋ฌ์ด ๋ฌธ์ ๋ค์ด ์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ค์ ๋ํด, Divide and
Conquer (๋ถํ ์ ๋ณต) ์ด๋ผ๋ ๊ธฐ๋ฒ์ด ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
์ง๊ธ๊น์ง ์ฌ๋ฌ๋ถ์ ๋ถํ ์ ๋ณต์ ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ์ ์๋นํ ๋ง์ด ๋ง๋ ๋ณด์๊ธฐ
๋๋ฌธ์, ๋ถํ ์ ๋ณต์ด๋ผ๋ ๋ง์ด ์ต์ํ์ง ์๋๋ผ๋ ์๊ฐํ๋ ๋ฐฉ๋ฒ ์์ฒด๋
๊ทธ๋ ๊ฒ ๋ฏ์ค์ง ์์ ๊ฒ์
๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ด๋ ต์ง๋ง, ์์ ๋ฌธ์ ๋ฅผ ํ๊ณ
ํฉ์น๋ ๊ฒ ๋ ์ฌ์ธ ์๋ ์๋ค๋ฉด, ๋ถํ ์ ๋ณต์ ์๊ฐํด ๋ณผ ์ ์๊ฒ ์ต๋๋ค.
Merge Sort
๋ณํฉ ์ ๋ ฌ (Merge Sort) ๋ ๋ํ์ ์ธ ๋ถํ ์ ๋ณต ๊ธฐ๋ฒ์
๋๋ค. ์์ ๋งํ ๋ถํ
์ ๋ณต์ ์ฐ๋ ์ด์ ๊ฐ ๊ฐ์ฅ ์ ๋ํ๋ฉ๋๋ค. $n$ ํฌ๊ธฐ์ ๋ฐฐ์ด์ ์ ๋ ฌํ๋
๊ฒ๋ณด๋ค, $n/2$ ํฌ๊ธฐ์ ๋ฐฐ์ด 2๊ฐ๋ฅผ ์ ๋ ฌํ๊ณ , ๋ ์ ๋ ฌ๋ ๋ฐฐ์ด์ ์ ๋ ฌ์ฑ์
์ ์งํ๋ฉด์ ํฉ์น๋ ๊ฒ์ด ๋ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์
๋๋ค.
์๋ ์์์ Additional (1), (2) ๋ชจ๋ ๋ถํ ์ ๋ณต์ ์ด์ฉํ๋ ํ๋ฅญํ
์์์
๋๋ค.
๋น ๋ฅธ ๊ฑฐ๋ญ ์ ๊ณฑ
Divide and Conquer๋ฅผ ์ฌ์ฉํ๋ ๋ค๋ฅธ ์์๋ฅผ ์๊ฐํด ๋ด
์๋ค. ์ด๋ฒ์ ๋ชฉํ๋,
์ด๋ค ์ $x$์ $y$์ ๊ณฑ์ ๊ณ์ฐํ๋ ์ผ์
๋๋ค. ์์์ ์ผ๋ก, ๊ณฑ์
์ $y$ ๋ฒ
ํ๋ ์ผ์ด๋ฏ๋ก, $O(y)$์ ํ๋ ๊ฒ์ด ์์ฐ์ค๋ฌ์ ๋ณด์
๋๋ค.
์ํธํ, ํนํ RSA ์ํธ ์ฒด๊ณ์์๋ $x^y \pmod{p}$๋ฅผ ๊ณ์ฐํ ์ผ์ด ๋งค์ฐ ๋ง์๋ฐ,
$y$๊ฐ ๊ฑฐ๋ํ ์์ธ ๊ฒฝ์ฐ๋ ๋ง์ด ์์ต๋๋ค. ๋ง์ฝ $10,702,103$์
$2,718,281,828$ ์ ๊ณฑ ๊ฐ์ ๊ฒ์ ๊ณ์ฐํ๋ ค๊ณ ํ๋ค๋ฉด, ์ด๋จ๊น์? ์ด๋ ์ฐ๋ฆฌ๋
โexponentiation by squaringโ ์ด๋ผ๋ ๋ฐฉ๋ฒ์ ์ธ ์ ์์ต๋๋ค. ๋ง์ฝ
$x^y$์์ $y$๊ฐ ํ์๋ผ๋ฉด, $x^{y-1} \times x$๋ก ์์ ์ ๋ฆฌํฉ๋๋ค. ๋ง์ฝ
$y$๊ฐ ์ง์๋ผ๋ฉด, $(x^{y/2})^2$ ๋ก ์ ๋ฆฌํฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ด $\order{\log y}$
์ ์ ๊ณฑ์ ์ํํ๋ค๋ ์ฌ์ค์ ์๊ฐํด ๋ด
์๋ค.
Dynamic Programming
Memoization : Top Down DP
๋ถํ ์ ๋ณต์ ์ ๋ง ๊ฐ๋ ฅํ ๋๊ตฌ์
๋๋ค. ์๋ฅผ ๋ค์ด, ํผ๋ณด๋์น ์์ด๋ ๋ถํ
์ ๋ณต์ผ๋ก ๊ณ์ฐํ ์ ์์ต๋๋ค. fib(n)์ ๊ณ์ฐํ๊ธฐ ์ํด, fib(n-1) ๊ณผ
fib(n-2)๋ฅผ ํธ์ถํ๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด ๋ฐฉ๋ฒ์ ์๊ฐ ๋ณต์ก๋๋ ์ฒ์ฐธํฉ๋๋ค.
ํธ์ถ๋๋ ๊ณผ์ ์ ๋ณด๋ฉด, $f(n)$ ์ ํ ๋ฒ ํธ์ถํ๋๋ผ๋, $f(1)$ ์ด๋ $f(2)$
๊ฐ์ ํจ์๋ค์ ์์์ด ๋ง์ด ํธ์ถํ๊ณ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฐ ์ค๋ณต๋๋
๊ณผ์ ์, ์ฝ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ, ํ๋ฒ๋ง ๊ณ์ฐํ๊ณ ์ถ์ต๋๋ค.
์ด๋ฅผ ์ํด ์ฌ์ฉํ๋ ๊ธฐ๋ฒ์ด Memoization์
๋๋ค.1 ๋ฏธ๋ฆฌ ๋ฐฐ์ด fib[]์,
๋งค๋ฒ ํธ์ถ๋ ๋๋ง๋ค ๋ด๊ฐ ๊ณ์ฐํ ๊ฐ์ ์ ์ด ๋์ต๋๋ค. ๋งค๋ฒ ํจ์๊ฐ ํธ์ถ๋
๋๋ง๋ค, ํน์ ์ด ๊ฐ์ด ๋ด๊ฐ ๋ณธ ์ ์๋ ๊ฐ์ธ์ง ๋ฉ๋ชจ์ง๋ฅผ ํ์ธํ๊ณ , ๋ฉ๋ชจ์ง์
์ ํ ๊ฐ์ ๋ค์ ๊ณ์ฐํ๋ ๋์ , ๋ฉ๋ชจ์ง๋ฅผ ๋ณด๊ณ ๋ฐ๋ก ๋ตํ๋ ๊ฒ์
๋๋ค.
ํจ์ ํธ์ถ์ ์์๋ฅผ ๋ณด๋ฉด, ํฐ ๊ฐ๋ค (TOP) ์ด ๋จผ์ ํธ์ถ๋๊ณ , ๊ทธ ๊ณผ์ ์์
์์ ๊ฐ๋ค (DOWN)์ ๊ฐ๋ค์ ๊ณ์ฐ์ด ํ์ํจ์ ๋์น์ฑ ๋ค์, ๋ด๋ ค๊ฐ๋ฉด์ ์ด
๊ฐ๋ค์ ๊ณ์ฐํ๊ณ ๋ค์ ์ฌ๋ผ์ค๋ฉด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ณผ์ ์ ๋ณผ ์ ์์ต๋๋ค.
์ด ๊ณผ์ ์ TOP-DOWN ๋ฐฉ์์ Dynamic Programming ์ด๋ผ๊ณ ๋ถ๋ฆ
๋๋ค.
Bottom Up DP
๋ฌผ๋ก , ํผ๋ณด๋์น ์์ด์ ๊ณ์ฐํ๊ธฐ ์ํด ๊ผญ ์ ๋ฐ ๋ฐฉ์์ ์ธ ํ์๋ ์์ต๋๋ค. ์์ ๊ฐ๋ค์ ์ด์ฉํด์ ํฐ ๊ฐ์ ๊ณ์ฐํ ์๋ง ์๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋จํ๊ฒ ์ฝ๋ฉํด๋ ๋ฉ๋๋ค.
for (int i = 2; i<=n; i++)
fib[i] = fib[i-1] + fib[i-2]
์ด ๋ฐฉ๋ฒ์, ๊ณ์ฐ ์์๋ฅผ ๋ณผ ๋, ์์ ๊ฐ๋ค์ ๋จผ์ ๊ณ์ฐํด๋๊ณ ๊ทธ๊ฑธ ์ด์ฉํด์
์๋ก ์ฌ๋ผ๊ฐ๋ฉฐ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์
๋๋ค. ์ด๋ฅผ Bottom-UP ๋ฐฉ์์ Dynamic
Programming์ด๋ผ๊ณ ๋ถ๋ฆ
๋๋ค.
Top-Down๊ณผ Bottom-Up ์ค ๋ฌด์์ด ๋ ๊ตฌํํ๊ธฐ ํธํ๊ณ , ์ด๋์ชฝ์ด ์ ๋ฆฌํ์ง๋
๊ทธ๋๊ทธ๋ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์, ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ค์ํ
๊ฒ์ ๋ค์์ ์์น์
๋๋ค.
-
Optimal Substructure : ํฐ ๋ฌธ์ $f(X)$๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, $f(Y)$ such that $Y < X$์ ๋ต์ ์ด์ฉํ๋ ๊ฒ์ ๋๋ค.2 ์ฆ, ์์ ๋ฌธ์ ์ ๋ต์ด ํญ์ ๋ ํฐ ๋ฌธ์ ์ ๋ต์ ์ ๊ณตํ๋๋ฐ ๋์์ด ๋๋ ๊ฒฝ์ฐ๋ฅผ ์๋ฏธํฉ๋๋ค. ์ด ์กฐ๊ฑด์ Divide and Conquer๊ณผ Dynamic Programming ๋ชจ๋์ ์ ์ฉ๋ฉ๋๋ค.
-
Overlapping Subproblem : ์ Overlapping Substructure๋ฅผ ์ ์ฉํจ์ ์์ด์, ๊ฒน์น๋ ๋ฌธ์ ๋ฅผ ์ฌ๋ฌ๋ฒ ํ์ด์ผ ํด์ ์ด๋ฅผ ์ต์ ํํ๊ณ ์ถ์ ๊ฒฝ์ฐ๋ฅผ ์๋ฏธํฉ๋๋ค. Fibonacci๊ฐ ๋ํ์ ์ ๋๋ค. ์ด ์์น์ Dynamic Programming์ ๊ธฐ๋ณธ ์๋ฆฌ์ ๋๋ค.
DP ์์ : 2์ฐจ์ ๊ฒฝ๋ก ๋ฌธ์
์์๋ก ์ด๋ฃจ์ด์ง $n \times n$ ํ๋ ฌ์ด ์ฃผ์ด์ ธ ์์ต๋๋ค. ์ด๋, ์ฐ๋ฆฌ๋
$(1, 1)$ ์์ ์ถ๋ฐํ์ฌ, $(n, n)$ ์์น๊น์ง ์ด๋ํ๋, ์๋์ชฝ ๋๋
์ค๋ฅธ์ชฝ์ผ๋ก๋ง ์ด๋ํ ์ ์์ต๋๋ค. ์ด๋ํ๋ ๊ณผ์ ์์, ํ๋ ฌ์ ๋ฐฉ๋ฌธํ ์นธ์
์ฐ์ฌ ์๋ ์ซ์๋ค์ ๋ํ ๊ฐ์ด ์ด ๊ฒฝ๋ก์ ์ต์ข
์ ์์
๋๋ค. ์ ์๋ฅผ
์ต๋ํํ๋ ์ด๋ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ ๋ด
์๋ค.
Optimal Substructure๋ฅผ ์๊ฐํด ๋ด
์๋ค. ์ด๋ค ์นธ $(i, j)$ ์ ๋์ฐฉํ๊ธฐ
์ํด์๋, $(i-1, j)$ ๋๋ $(i, j-1)$ ์์ ์์ผ ํฉ๋๋ค. ์ด๋, $(i-1, j)$
๊น์ง ์ด๋ป๊ฒ ์๋์ง๋ ๋ณ๋ก ๊ด์ฌ์ด ์์ง๋ง, ์ด ์์ ๊น์ง ์จ ์ ์๊ฐ ์ต๋๊ฐ
๋๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ์ฆ, ๊ฒฝ๋ก์ ๋ฌด๊ดํ๊ฒ ์ผ๋จ ์ด๋ป๊ฒ๋ ์ต์ ์ ๋คํด
$(i-1, j)$ ๋๋ $(i, j-1)$ ๊น์ง ์๋ค๋ฉด, ๊ทธ ๊ฒฝ๋ก๋ค์์ ํ์นธ์ ์ฐ์ฅํ์ฌ
$(i, j)$ ์ ์ค๋ ์ต์ ๊ฒฝ๋ก๊ฐ ๋ํ๋๊ธฐ ๋๋ฌธ์
๋๋ค. ์ฆ, ๋ค์๊ณผ ๊ฐ์ DP๋ฅผ
๊ตฌ์ํฉ๋๋ค. \(C_{ij} = \begin{cases}
0 & \text{if } i = 0 \text{ or } j = 0\\
\max({C_{i-1, j}, C_{i, j-1}}) + M_{ij} & \text{otherwise}
\end{cases}\) ๋ง์ฝ $C_{44}$๋ฅผ ๊ณ์ฐํ๋ ค๊ณ ํ๋ค๋ฉด, $C_{34}$์ $C_{43}$ ์
๊ณ์ฐํด์ผํ๊ณ , ๊ทธ๋ฌ๋ฉด $C_{33}, C_{24}, C_{33}, C_{42}$ ๋ฅผ ๊ณ์ฐํด์ผ
ํฉ๋๋ค. ๋ฒ์จ $C_{33}$ ์ ๋๋ฒ ๊ณ์ฐํ์ต๋๋ค! Overlapping Substructure๊ฐ
๋ณด์
๋๋ค. ์ด๋ฅผ ์ต์ ํํ์ฌ ๊ณ์ฐํด๋ ์ข๊ณ , ์๋์ ๊ฐ์ด Bottom-Up DP๋ฅผ
์๊ฐํด๋ ๋ฉ๋๋ค.
for (int i = 1; i<=n; i++)
for (int j = 1; j<=n; j++)
C[i][j] = M[i][j] + max(C[i-1][j], C[i][j-1]);
์ด๋ ๊ฒ ํ๋ฉด Dynamic Programming์ ์ด์ฉ, $O(n^2)$ ์ ๊ณ์ฐํ๊ฒ ๋ฉ๋๋ค.
๋ฐฉ๊ธ ๋ณธ ๊ฒ์ฒ๋ผ, 2์ฐจ์ ๊ทธ๋ฆฌ๋ ์์์๋ ํฉ๋ฆฌ์ ์ธ DP ์์๋ฅผ ์ค ์ ์์ผ๋ฉด
(์ผ์ชฝ ์๋ถํฐ ์ค๋ฅธ์ชฝ ์๋) ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ด์ธ์๋
DP๋ ์ ๋ง ๋ค์ํ ํํ๋ก ๋ฑ์ฅํ๊ณ , ์ ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ง์ ์ฐ์ต์ด
ํ์ํฉ๋๋ค.
์ถ์ฒ๋ฌธ์ : ์๋ (3), (4), (5) ์ดํ์๋ ๋ ํ์ด๋ณด๊ณ ์ถ๋ค๋ฉด, BOJ ๊ธฐ์ค 1005, 11066, 9251๋ฒ์ ํ์ธํด ๋ณด์ธ์.
Additional Topics / Problems
-
Karatsuba Algorithm ์ฐ๋ฆฌ๊ฐ ๊ณฑ์ ์ $O(1)$์ ์ํ๋๋ค๊ณ ๋ฏฟ์์ง๋ง, ์ฌ์ค ์๊ฐํด ๋ณด๋ฉด ์์์ ์ผ๋ก ๊ทธ๋ด ๋ฆฌ๊ฐ ์์ต๋๋ค. 10์ต ์๋ฆฌ ์๋ฅผ ๊ณฑํ๋ ์ผ๊ณผ $3 \times 5$๋ฅผ ํ๋ ์ผ์ด ๊ฐ์ ์๊ฐ์ ์ํ๋ ๋ฆฌ๋ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ผ์์ ์ผ๋ก ์ฌ์ฉํ๋ ์์ ๋ฒ์์์, ํนํ C++์ int ๋ long long ๋ฒ์์์ ๊ณฑ์ ์ด ์์ฐ์ค๋ฝ๊ฒ ์์ ๋น์ทํ ์๊ฐ์ ์ํ๋๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ ์์ผ๋ก๋ $O(1)$์ ๊ธฐ๋ณธ ์ฌ์น์ฐ์ฐ์ด ์๋ํ๋ค๋ ๋ฏฟ์์ ๊ฐ๊ณ ๋งํ๊ฒ ์ง๋ง, ์ฌ๊ธฐ์๋ ์ ๊น๋ง ์ด ๋ถ๋ถ์ ์์ฌํด ๋ด ์๋ค. ๋ค์ ํ๋ฆ์ ๋ฐ๋ผ๊ฐ๋ฉฐ, Karatsuba์ ์์ด๋์ด์, ์ด ์์ด๋์ด๋ฅผ ์ฒ์ ๋ค์๋ ์ ๋ช ํ ์ํ์ Kolmogorov3๊ฐ ๋ฐ์๋ ์ถฉ๊ฒฉ์ ๋๊ปด๋ด ์๋ค.
(1) ์ด๋ฑํ๊ต์์ ๋ฐฐ์ด ๋ฐฉ๋ฒ๋๋ก $139 \times 312$๋ฅผ ๊ณ์ฐํด ๋ณด๊ณ , ์ด ๋ฐฉ๋ฒ์ ๊ทธ๋๋ก ์ปดํจํฐ๋ก ๊ตฌํํด ๋ธ๋ค๋ฉด $n$์๋ฆฌ ์๋ฅผ ๊ณฑ์ ํ๋๋ฐ ์ด๋์ ๋์ ์๊ฐ์ด ๋ค์ง ์์ธกํด ๋ณด์ธ์.
(2) ์ดํ, $x, y$๋ $B$์ง๋ฒ์ $n$์๋ฆฌ ์๋ผ๊ณ ํฉ์๋ค. ๋จผ์ , ์ ๋นํ $m < n$์ ๊ณจ๋ผ, $x = x_1 B^m + x_0$, $y = y_1 B^m + y_0$ ์ด๋ผ๊ณ ์์๋ค. $m$์ $n$์ ์ ๋ฐ์ด ๋๊ฒ ๊ณ ๋ฅด๋ฉด ๋ฉ๋๋ค.4
(3) ์ด์ , $xy$ ๊ฐ $(x_1 B^m + x_0) (y_1 B^m + y_0)$ ์ด๋ฏ๋ก, $x_1y_1 B^{2m} + (x_1y_0 + x_0y_1)B^m + x_0y_0$์ผ๋ก ๋ํ๋ฉ๋๋ค. $x_1y_1, x_0y_0$์ ๊ทธ๋๋ก ๊ณ์ฐํ๊ณ , ๊ฐ์ด๋ฐ ํญ์ ๊ณ์ฐํ๋ ๋์ , $(x_1 + x_0) (y_1 + y_0)$์ ๊ณ์ฐํ๊ณ ์ ๋๊ฐ๋ฅผ ๋นผ๋ฉด ๊ฐ์ ํญ์ ์ป์ต๋๋ค.
(4) ์ด ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ์ฆ๋ช ํ์ธ์. Week 1์ Master Theorem.
-
($\star$)Closest Pair Problem : BOJ 2261
๋ค์ ๋ฌธ์ ๋ฅผ ๊ณ ๋ฏผํ๊ณ ํด๊ฒฐํด ๋ด ์๋ค. $\R^2$ ์์ ์ $n$๊ฐ์ ๋ํ์ฌ, ๊ฐ์ฅ ๊ฐ๊น์ด ๋ ์ ๊ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ๊ณ ์ ํฉ๋๋ค. ์กฐ๊ธ ๋ ์ํ์ ์ผ๋ก๋, $l = \min_{i, j} d(p_i, p_j)$ ์ ์ฐพ๋ ๋ฌธ์ ์ ๋๋ค. ํ๋ฆ์ ๋ฐ๋ผ๊ฐ๋ฉฐ, ๋ถํ ์ ๋ณต์ด ์ผ๋ง๋ ๊ฐ๋ ฅํ ํด์ธ์ง ๋ค์ํ๋ฒ ๋๊ปด๋ด ์๋ค.(1) ์๋ช ํ โ์ฌ์ด ์๊ณ ๋ฆฌ์ฆโ ์ $O(n^2)$ ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ด ๋ฌธ์ ์ ๋ํด $O(n \log^2 n)$, ๋์๊ฐ $O(n \log n)$ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐํ๋ ค๊ณ ํฉ๋๋ค.
(2) ๋จผ์ , Divide and Conquer๋ฅผ ์๊ฐํ๊ธฐ ์ํด, $x$์ถ์ ๊ธฐ์ค์ผ๋ก ๋ฐ์ผ๋ก ์๋ฅด๊ฒ ์ต๋๋ค.
(3) ๊ทธ๋ฌ๋ฉด, [๋ ์ ์ด ์ผ์ชฝ์ ์๋ ๊ฒฝ์ฐ], [๋ ์ ์ด ์ค๋ฅธ์ชฝ์ ์๋ ๊ฒฝ์ฐ], [์์ชฝ์์ ํ๋์ฉ ๋ฝ๋ ๊ฒฝ์ฐ] ๋ฅผ ๊ฐ๊ฐ ํ๋ฉด ๋ฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ด ์๊ฐ ๋ณต์ก๋์ ์ ํ ๋ฐ์ ์ด ์์์ ๋ณด์ด์ธ์.
(4) ๊ทธ๋ฌ๋, [์์ชฝ] ์ผ์ด์ค๋ฅผ ์ ๋ง ๋ชจ๋ ํ์ธํด์ผ ํ ๊น์? ์์ Strip๋ง ๋ณด๋ฉด ์ถฉ๋ถํจ์ ๊ด์ฐฐํ์ธ์.
(5) Challenge ์์ชฝ ์ผ์ด์ค์์, Strip ์์ ์ $p_i$์ ๋ํด, ์ต๋ 7๋ฒ์ ๋น๊ต๋ก ์ถฉ๋ถํจ์ ๋ณด์ด์ธ์.
(6) ์ด ๋ฐฉ๋ฒ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ์ฆ๋ช ํ๊ณ , ์ด๋ป๊ฒ ๋ ์ค์ผ์ง ์๊ฐํด ๋ณด์ธ์.
-
ํ๋ ฌ ๊ณฑ์ ์์ : BOJ 11049
BOJ 11049๋ฒ์ ๋ณด๊ณ , ์ด ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์๋์ง ์๊ฐํด ๋ด ์๋ค.(1) ๋จ์ํ๊ฒ๋ ํ ๋ฐฉ๋ฒ์ด ์ ๋ ์ค๋ฅด์ง ์์ต๋๋ค. ํ๋ ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์ ๋ชจ๋ ๊ฐ๋ฅํ ํ๋ ฌ ๊ณฑ์ ์์๋ฅผ Naiveํ๊ฒ ๋์ดํ๊ณ ํ์ธํ๋ ๊ฒ์ธ๋ฐ, ์ด ๋ฐฉ๋ฒ์์ ํ์ธํด์ผ ํ ๊ณฑ์ ์์๊ฐ ๋ช ๊ฐ์ง์ผ๊น์? ์ด๊ฑธ ๊ณ์ฐํ๋ ๋ฌธ์ ๋ ์๋นํ ์ด๋ ต์ต๋๋ค. ์ธ์ ๊ฐ ์ํ ์ธ์ ์ ํ๊ฒ ๋๋ฉด ์๊ฐํด ๋ณด๊ธฐ๋ก ํฉ์๋ค.
(2) ๋ง์ง๋ง ๊ณฑ์ ์ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ์๊ฐํด ๋ด ์๋ค.
๋ง์ง๋ง ๊ณฑ์ ์ ์์น๊ฐ $(A_1 A_2 \dots A_k)$์ $(A_{k+1} A_{k+2} \dots A_n)$ ์ ๊ณฑํ๋ ๊ฒ์ผ ๋...(3) DP[i][j] = i๋ฒ์งธ๋ถํฐ j๋ฒ์งธ๊น์ง์ ํ๋ ฌ์ ์ต๋ํ ์ ๊ณฑํ์ ๋์ ์ต์ ๋น์ฉ ์ด๋ผ๊ณ ์ ์ํฉ์๋ค. ์ ํ์์ ์ธ์ ๋ณด๊ณ , ๊ทธ ์ ํ์์ ์ด๋ป๊ฒ ๋นจ๋ฆฌ ๊ณ์ฐํ ์ ์์์ง ๊ณ ๋ฏผํด ๋ณด์ธ์.
-
Knapsack Problem : BOJ 12865
์ด ๋ฌธ์ ๋ ๋งค์ฐ ์ ๋ช ํ 0-1 Knapsack์ด๋ผ๋ ๋ฌธ์ ์ ๋๋ค. ๊ฐ ๋ฌผํ๋ง๋ค $w_i$์ ๋ฌด๊ฒ์ $v_i$์ ๊ฐ์น๊ฐ ์๊ณ , ๊ฐ๋ฐฉ์ ๋ฌด๊ฒ๊ฐ $W$ ์ดํ๊ฐ ๋๊ฒ ๋ฃ์ด์ผ ํ ๋ ๊ฐ์น๋ฅผ ์ต๋ํํ์ธ์.(1) Heuristic์ ๋งค์ฐ ์ค์ํ ์๊ณ ๋ฆฌ์ฆ์ ์ผ๋ถ์ด์ง๋ง ์ด ๋ฌธ์ ์์ ๋จนํ์ง ์์ต๋๋ค. ํน์ Naiveํ๊ฒ $v_i / w_i$ ๊ฐ ์ต๋์ธ๊ฒ๋ถํฐ ๋ฐ์ด๋ฃ๋๋ค๋ ์๊ฐ์ ํ์ จ๋์? ๊ฐ๋ฐฉ์ 2์ ๋ฌด๊ฒ๋ง ๋ฃ์ ์ ์๊ณ , ๋ฌด๊ฒ๊ฐ 1, ๊ฐ์น๊ฐ 5์ธ ๋ฌผ๊ฑด๊ณผ ๋ฌด๊ฒ๊ฐ 2, ๊ฐ์น๊ฐ 6์ธ ๋ฌผ๊ฑด์ด ์๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด ๋ณด์ธ์.
(2) DP ๋ฌธ์ ๋ฅผ ์ ๊ทผํ๋ ์ข์ ๋ฐฉ๋ฒ์, DP ํ ์ด๋ธ์ ๋จผ์ ๊ตฌ์ํ๋ ๊ฒ์ ๋๋ค. DP[i][j] ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ ๋... ๋ผ๊ณ ์์ํฉ์๋ค. ์ด๋ป๊ฒ ์ ์ํด์ผ ํ ๊น์? ํํธ : DP ์นธ์๋ฅผ $N \times W$ ๋ก ์๋ํด ๋ด ์๋ค.
-
DP on data structures : BOJ 15681
๊ณ ์ ๊ด๋ ์ ๋ฒ๋ฆฌ๋ฉด ์ฝ๊ฒ ํ ์ ์์ต๋๋ค. ๋ฃจํธ ์๋ ํธ๋ฆฌ์์, ๋ ธ๋ $x$์ ๋ํด, ๊ทธ ๋ ธ๋๋ฅผ ๋ฃจํธ๋ก ํ๋ ์๋ธํธ๋ฆฌ์ ์ ์ ์ ์๋ฅผ ๋น ๋ฅด๊ฒ ๋ตํ๋ ค๋ฉด ์ด๋ป๊ฒ ํ ๊น์?-
์ด ๋ฌธ์ ๋ ์ฟผ๋ฆฌํ ๋ฌธ์ ๋ผ๊ณ ๋ถ๋ฅด๋ ํํ์ธ๋ฐ, โ์ฟผ๋ฆฌโ ๋ผ๊ณ ๋ถ๋ฆฌ๋ โ์ง๋ฌธโ์ด $Q$๊ฐ ์ฃผ์ด์ง๊ณ ์ด ์ฟผ๋ฆฌ๋ค์ ๋ตํด์ผ ํ๋ ์ํฉ์ ๋๋ค. ์๋ฃ๊ตฌ์กฐ์ ๋ํด ์๊ธฐํ ๋, OO์ ๋ํ ์ฟผ๋ฆฌ๋ฅผ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋ ์๋ฃ๊ตฌ์กฐ ๋ผ๋ ์์ผ๋ก ์ดํดํ ๊ธฐ์ต์ด ์์ ๊ฒ์ ๋๋ค.
-
์ฟผ๋ฆฌ๊ฐ ๋ค์ด์ฌ ๋๋ง๋ค ํธ๋ฆฌ๋ฅผ ๋์๋ณด๋ฉด์ ๋๋ตํ๋ฉด, ํ ์ฟผ๋ฆฌ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ $O(n)$ ์๊ฐ์ด ๋ค๊ณ (๋ฃจํธ๋ง ๊ณ์ ๋ฌผ์ด๋ณผ ์๋ ์์ผ๋๊น), ์ ์ฒด $O(qn)$ ์๊ฐ์ด ๋ ๋ค๋ ์๋ฏธ์ ๋๋ค. ๋น์ฐํ ์ด ๋ณต์ก๋๋ ์ฉ๋ฉํ ์ ์์ต๋๋ค.
-
์ฟผ๋ฆฌ๋น $O(1)$ ์ ํด๊ฒฐํ๊ธฐ ์ํด, ๋ฏธ๋ฆฌ ์๊ฐ์ ์ข ์จ์ ์ ์ฒ๋ฆฌ (Preprocessing) ํ๊ณ , ์ฟผ๋ฆฌ๊ฐ ๋ค์ด์ค๋ฉด ๊ทธ๋๊ทธ๋ ๋ตํด์ฃผ๋ฉด ์ด๋จ๊น์? ์ฆ, $O(n + q)$ ์ ํด๊ฒฐํ๊ฒ ๋ค๋ ์๋ฏธ์ ๋๋ค.
-
-
โ๊ธฐ์ตํ๋คโ ๋ผ๋ ๋ป์ memorization์ด ์๋๋๋ค. โ๋ฉ๋ชจํ๋คโ ๋ผ๊ณ ๋ฐ์๋ค์ฌ ์ฃผ์ธ์ย โฉ
-
์ด๋ ๊ฒ ์จ๋๊ธฐ๋ ํ์ง๋ง $X, Y$๊ฐ ์์ผ ๋๋ง ์ฌ์ฉ๊ฐ๋ฅํ ๊ฒ์ ์๋๋๋ค. ํฉ๋ฆฌ์ ์ธ Order๋ฅผ ์ค ์ ์์ผ๋ฉด ๋๊ฒ ์ฃ ?ย โฉ
-
Andrey Kolmogorov. ์ฃผ๋ก ํ๋ฅ ๋ก ์ ์ฐ๊ตฌํ์ง๋ง ์๊ณ ๋ฆฌ์ฆ์๋ ์๋นํ ๋ง์ ๊ด์ฌ์ ๊ฐ์ก๋ ์ํ์์ ๋๋คย โฉ
-
์์ง โ$n$์ด ํ์๋ฉด ์ด๋ป๊ฒ ํ์งโ ๋ผ๋ ๊ณ ๋ฏผ์ด ๋ ๋ค๋ฉด, Big-O Notation์ ๋ํ โ์ฒ ํโ ์ด ๋ถ์กฑํ ๊ฒ์ ๋๋ค. ใ ใ ย โฉ