IX. Dynamic Programming & Divide and Conquer (2)
์ค๋์ ์ฐ์ต๋ฌธ์ ๋ง ์์ต๋๋ค.
-
Segment Tree : ์์ด์ ๋ค๋ฃจ๋ ์๋ฃ๊ตฌ์กฐ์ค ํ๋์ ๋๋ค. ์ด๋ค ์์ด $a_1, a_2, \dots a_n$ ์ด ์ฃผ์ด์ง๋๋ค.
-
๊ตฌ๊ฐ $[i, j]$๊ฐ ์ฃผ์ด์ง๋ฉด, $a_i + a_{i+1} + \dots + a_j$ ์ ๊ฐ์ ๊ตฌํฉ๋๋ค.
-
$i, v$ ๊ฐ ์ฃผ์ด์ง๋ฉด, $a_i$ ์ $v$๋ฅผ ๋ํฉ๋๋ค.
-
์ฒซ๋ฒ์งธ ์ฟผ๋ฆฌ๋ง ์ฃผ์ด์ง๊ณ , ๋๋ฒ์งธ ์ฟผ๋ฆฌ๊ฐ ์ฃผ์ด์ง์ง ์๋๋ค๋ฉด, ์ด ๋ฌธ์ ๋ฅผ ์ฟผ๋ฆฌ๋น $O(1)$ ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ๋ถ๋ถํฉ ๋ฐฐ์ด์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ค๋ช ํ์ธ์.
-
์ฐ๋ฆฌ๋ Complete Binary Tree๋ฅผ ๋ง๋ค์ด์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ ํฉ๋๋ค. ๊ฐ ๋ ธ๋๋ ์ด๋ค ๊ตฌ๊ฐ์ ๋ด๋นํ ๊ฒ์ ๋๋ค. ๊ฐ ๋ ธ๋๋ค์ ๋ค์ ์์น์ ์งํต๋๋ค. โ๋ ธ๋์ ๊ฐ์, ๋ ์์ ๋ ธ๋์ ๊ฐ์ ํฉํ ๊ฐ์ ๊ฐ๋๋ค. ๊ฐ ๋ ธ๋๋ ๋ ์์ ๋ ธ๋๊ฐ ๋ด๋นํ๋ ๊ตฌ๊ฐ์ ํฉํ ๊ตฌ๊ฐ์ ๋ด๋นํ๋ค"
-
์ ์ฒด ๋ ธ๋์ ๊ฐ์๊ฐ ๋ช ๊ฐ์ธ์ง ์๊ฐํด ๋ณด์ธ์. ์ฒซ ๋ฒ์งธ ์ฟผ๋ฆฌ๊ฐ ์ฃผ์ด์ก์ ๋, ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ด ํ์ธํด์ผ ํ๋ ๋ ธ๋๊ฐ ๋ช ๊ฐ์ธ์ง ์๊ฐํด ๋ณด์ธ์. ๋ ๋ฒ์งธ ์ฟผ๋ฆฌ์ ๋ํด์๋ ๊ฐ์ ๊ณผ์ ์ ๋ฐ๋ณตํด ๋ณด์ธ์.
-
์ด ๋ฐฉ๋ฒ์ด ๋ ์ฟผ๋ฆฌ๋ฅผ ๋น ๋ฅด๊ฒ ํด๊ฒฐํ ์ ์์์ ์ดํดํ๊ณ , ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ณ์ฐํด ๋ณด์ธ์.
-
-
Segment Tree with Lazy Propagation : ์ ๋ฌธ์ ์ ๊ฑฐ์ ๊ฐ์ต๋๋ค.
-
๊ตฌ๊ฐ $[i, j]$๊ฐ ์ฃผ์ด์ง๋ฉด, $a_i + a_{i+1} + \dots + a_j$ ์ ๊ฐ์ ๊ตฌํฉ๋๋ค.
-
๊ตฌ๊ฐ $[i, j]$์ ๊ฐ $v$ ๊ฐ ์ฃผ์ด์ง๋ฉด, $a_i, a_{i+1}, \dots a_j$ ์ ๋ชจ๋ $v$๋ฅผ ๋ํฉ๋๋ค.
-
์ผ๋ฐ์ ์ธ ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ๊ฐ ์ด ๋ฌธ์ ๋ฅผ ์ ํด๊ฒฐํ์ง ๋ชปํจ์ ๊ด์ฐฐํ์ธ์.
-
์ถ๊ฐ์ ์ธ ๊ธฐ๋ฒ์ผ๋ก, ๊ฐฑ์ ์ โ๋ฏธ๋ฃจ๋โ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ฒ ์ต๋๋ค. ๊ฐ ๋ ธ๋๋ง๋ค, ์ด ๋ ธ๋๊ฐ ์ง๊ธ๊น์ง ์ผ๋ง๋ ๊ฐฑ์ ์ ๋ฏธ๋ฃจ๊ณ ์์๋์ง๋ฅผ ์ถ๊ฐ๋ก ์ ์ฅํฉ๋๋ค.
-
1๋ฒ, 2๋ฒ ์ฟผ๋ฆฌ๊ฐ ์ฃผ์ด์ก์ ๋ ๊ฐ๊ฐ ์ด๋ป๊ฒ ์ด ์ ๋ณด๋ฅผ ์ด์ฉํ์ฌ ๊ฐ์ ๊ณ์ฐํ ์ง ์ ์ํ๊ณ , ๊ทธ ๋ฐฉ๋ฒ๋ค์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ณ์ฐํ์ธ์.
-
-
Merge Sort Tree : ์ด๋ฒ์๋ ์์ ๊ฐ์ด ์์ด์ด ์ฃผ์ด์ง๋ ์ํฉ์์, ์ด๋ฐ ๋ฌธ์ ๋ฅผ ์๊ฐํ๊ฒ ์ต๋๋ค.
- ๊ตฌ๊ฐ $[i, j]$์ ์ด๋ค ์ $k$๊ฐ ์ฃผ์ด์ง๋ฉด, $a_i, a_{i+1}, \dots a_j$ ์์ $k$๋ณด๋ค ํฐ ๊ฐ์ ๊ฐ์๋ฅผ ๊ตฌํฉ๋๋ค.
-
๋จธ์ง ์ํธ ํธ๋ฆฌ๋, ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ์ ๊ฑฐ์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๋ง๋ค๋, ๊ฐ ํธ๋ฆฌ๊ฐ ๋จธ์ง ์ํธ์ ์ค๊ฐ ๊ณผ์ ์ ๋ด๊ณ ์๋ ํธ๋ฆฌ์ ๋๋ค.
-
์ฆ, ๊ฐ ํธ๋ฆฌ๊ฐ ์ ์๊ฐ ํ๋๊ฐ ์๋ ์์ ์์ด์ ๋ค๊ณ ์์ต๋๋ค.
-
์ด ํธ๋ฆฌ๊ฐ ์ ๋ฌธ์ ๋ฅผ ๋น ๋ฅด๊ฒ ํด๊ฒฐํ ์ ์์์ ๋ณด์ด์ธ์. ๋ชฉํํ๋ ์๊ฐ๋ณต์ก๋๋ ์ฟผ๋ฆฌ๋น $O(\log^2 n)$ ์ ๋๋ค.
-
Edit Distance : ํธ์ง ๊ฑฐ๋ฆฌ๋, ๋ ์์ด $S, T$์ ๋ํด, ๊ฐ์ ์ฝ์ , ์ญ์ , ๋์ฒด ์ฐ์ฐ์ ์ด์ฉํ์ฌ $S$๋ฅผ $T$๋ก ๋ง๋ค๊ณ ์ ํ ๋ ํ์ํ ์ต์ํ์ ์ฐ์ฐ ํ์๋ก ์ ์ํฉ๋๋ค. ๊ฐ ์์ด์ ๊ธธ์ด๊ฐ $m, n$ ์ผ ๋, ํธ์ง ๊ฑฐ๋ฆฌ๋ฅผ $O(mn)$์ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ํ์ธ์.
-
Longest Common Subsequence : ๋ ์์ด $S, T$์ ๋ํด, ๋ ์์ด์ด ๊ฐ์ง๊ณ ์๋ ์ต๋ ๊ณตํต ๋ถ๋ถ ์์ด์ ๊ตฌํ๊ณ ์ ํฉ๋๋ค. ๋ ์์ด์ ๊ธธ์ด๊ฐ $m, n$์ผ ๋, LCS์ ๊ธธ์ด๋ฅผ $O(mn)$์ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ํ์ธ์.
-
Longest Increasing Subsequence : ์ด๋ค ์์ด $a_1, \dots a_n$ ์ด ์ฃผ์ด์ก์ ๋, ์ด ์ค ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด (not necessarily contiguous) ์ ๊ธธ์ด๋ฅผ ๊ตฌํ๊ณ ์ ํฉ๋๋ค.
-
์๋ช ํ DP์์ ์๊ฐํด ๋ด ์๋ค. ๊ฐ $i$์ ๋ํด, $D_i$๋ $i$๋ฒ์งธ๋ฅผ ๋ ์์๋ก ํ๋ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ๊ธธ์ด๋ก ์ ์ํฉ๋๋ค.
-
์ด์ , $D_i = \max_{j < i, A_j < A_i} D_j + 1$ ๋ก ๊ณ์ฐ ๊ฐ๋ฅํฉ๋๋ค.
-
์ด DP๋ฅผ ๊ทธ๋๋ก ๊ณ์ฐํ๋ฉด $O(n^2)$ ์๊ฐ์ด ๊ฑธ๋ฆด ๊ฒ์ ๋๋ค.
-
์ด๋ณด๋ค ๋น ๋ฅธ ์๊ฐ ๋ณต์ก๋ $O(n \log n)$ ์ ๋ฌ์ฑํ๋ ๋ฐฉ๋ฒ์ด, ์ง๊ธ๊น์ง ๊ณต๋ถํ ๋ด์ฉ๋ง์ผ๋ก 2๊ฐ์ง๊ฐ ๊ฐ๋ฅํฉ๋๋ค. ๋ ๊ฐ์ง๋ฅผ ์ ์ํ์ธ์. 1
-
-
Lowest Common Ancestor - Binary Lifting & Sparse Table : ํธ๋ฆฌ $T$์ ๋ํด, ์ ์ $u, v$์ ์ต์ ๊ณตํต ์กฐ์์ ๊ตฌํ๊ณ ์ ํฉ๋๋ค.
-
๊ฐ์ฅ ์๋ช ํ ๋ฐฉ๋ฒ์ ๋ ๋ ธ๋๋ฅผ ๋ฃจํธ๊น์ง ํ๊ณ ์ฌ๋ผ๊ฐ๋ฉด์ ๋ชจ๋ ์กฐ์ ๋ ธ๋๋ฅผ ์ฐพ์ ๋ค, ์กฐ์ ๋ ธ๋ ๋ฒํธ์ ์์ด์ ๋ฃจํธ๋ถํฐ ๊ฑฐ๊พธ๋ก ํ์ธํ๋ฉด์ ์ด๋๊น์ง ๊ฒน์น๋์ง ํ์ธํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ด๋ $O(n)$ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค.
-
์ฝ๊ฐ์ Preprocessing์ ํตํด, ๊ฐ ์ฟผ๋ฆฌ๋ฅผ $O(\log n)$ ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ดํดํด ๋ณด๊ณ ์ ํฉ๋๋ค.
-
๊ฐ ๋ ธ๋ $u$์ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ์๋ค๋ฉด, ๋ชจ๋ ๋ ธ๋์ 2๋ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ๋น ๋ฅด๊ฒ ๊ตฌํ ์ ์์์ ์ดํดํ์ธ์. ์ด๋ฅผ ํ์ฅํ์ฌ $2^{k-1}$ ๋ฒ์งธ ๋ถ๋ชจ๋ฅผ ์๋ค๋ฉด $2^{k}$ ๋ฒ์งธ ๋ถ๋ชจ๋ ์ ์ ์์์ ์ดํดํ์ธ์.
-
๋ฐ๋ผ์,
par[x][i]
๋ฅผ $x$์ $2^i$๋ฒ์งธ ๋ถ๋ชจ๋ก ์ ์ํ ๋, ์ด ๋ฐฐ์ด์ ๋ชจ๋ ์ฑ์ฐ๋ ๋ฐ $O(n \log n)$ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค. -
์ด ๋ฐฐ์ด์ ์ด์ฉ, $O(\log n)$ ์๊ฐ์ ๊ฐ ์ฟผ๋ฆฌ์ ๋ตํ๋ ๋ฐฉ๋ฒ์ ์ ์ํ์ธ์. ์ผ๋ฐ์ฑ์ ์์ง ์๊ณ , ๊น์ด๊ฐ ๊ฐ์ ๊ฒฝ์ฐ๋ง ๋ณด์ฌ๋ ๋จ์ ๊ด์ฐฐํ์ธ์.
-
๋ชฉํ๋ $u$ ์ $k$๋ฒ์งธ ๋ถ๋ชจ๊ฐ $v$์ $k$๋ฒ์งธ ๋ถ๋ชจ์ ๊ฐ์ ์ต์ $k$ ์ฐพ๊ธฐ์ ๋๋ค. $k$ ๋ฅผ ์ด์ง์๋ก ๋ง์ถ๊ณ , par ๋ฐฐ์ด๋ก ์ง ๋ง์ถฐ ๋ด ์๋ค.
-
-
ํ๋๋ Binary Search, ๋ค๋ฅธ ํ๋๋ Segment Treeย โฉ