๐ค ๋ถํ ์ ๋ณต
๋ถํ ์ ๋ณต์ด๋ ์ผ๋ฐ์ ์ผ๋ก ์ฃผ์ด์ง ๋ฌธ์ ๋ฅผ ์์ ๋จ์๋ก ๋ถํ ํ ๋ค ๋ถํ ๋ ๋ฌธ์ ๋ค์ ์ฌ๊ท์ ์ผ๋ก ํด๊ฒฐํ์ฌ ํด๋น ๋ต์ ์ ์ ํ๊ฒ ์กฐํฉํ์ฌ ํฐ ๋ฌธ์ ์ ๋ต์ ์ ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋งํฉ๋๋ค.
์ด๋ ๋ถํ ๋ ๋ฌธ์ ๋ค์ ์กฐํฉํ์ฌ ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ Conquer์ด๋ผ๊ณ ํฉ๋๋ค.
์ด๋ฒ ํฌ์คํ ์์๋ ๋ถํ ์ ๋ณต์ Multiplication ์์๋ฅผ ์์๋ณด๊ฒ ์ต๋๋ค.
๐ Multiplication
๋ n ๋นํธ ์ด์ง์์ธ $x$์ $y$๋ฅผ ๊ณฑํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด๋ณด๊ฒ ์ต๋๋ค.
๋ถํ ์ ๋ณต ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ์ด๋ก ์ ์ผ๋ก ๋ ๋น ๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ๋์์ธ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
ํธ์์ $n$์ 2์ ๊ฑฐ๋ญ์ ๊ณฑ ๊ผด์ด๋ผ ๊ฐ์ ํ๊ณ , $x$์ ์ผ์ชฝ $n/2$ ๋นํธ ๋ถ๋ถ๊ณผ ๋๋จธ์ง ๋ถ๋ถ์ ๊ฐ๊ฐ $x_L, x_R$์ด๋ผ๊ณ ํ๊ฒ ์ต๋๋ค.
๋ง์ฐฌ๊ธฐ์๋ก $y_L, y_R$์ ์ ์ํ๊ฒ ์ต๋๋ค.
$x = 1 0 1 1 0 1 1 0, y = 1 0 0 1 1 1 0 0$๋ผ๋ ์์๋ฅผ ํตํด Multiplication์ ์งํํด๋ณด๊ฒ ์ต๋๋ค.
$x_L, x_R, y_L, y_R$์ ๊ฐ๊ฐ์ ์ ์์ ์ํด $x, y$๋ฅผ ์๋์ ๊ฐ์ด ๋ํ๋ผ ์ ์์ต๋๋ค.
$$x = 2^{\frac{n}{2}}x_L + x_R$$
$$x = 2^{\frac{n}{2}}y_L + y_R$$
๋ฐ๋ผ์ $x*y = (2^{\frac{n}{2}}x_L + x_R)(2^{\frac{n}{2}}y_L + y_R) = 2^nx_Ly_L + 2^{\frac{n}{2}}(x_Ly_R + x_Ry_L) + x_Ry_R$๋ก ๋ํ๋ผ ์ ์์ต๋๋ค.
์ด๋ $x * y$์ Main Problem $x_Ly_L, x_Ly_R, x_Ry_L, x_Ry_R$์ Subproblem ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
์์ ์์ ๋ฐ๋ผ $x, y$๋ฅผ ๊ณฑํ๋ ๋ฌธ์ ๋ ๋ $n/2$ ๋นํธ ์ด์ง์๋ฅผ ๊ณฑํ๋ Subproblem 4๊ฐ + shift์ฐ์ฐ $n + n/2$๋ฒ add์ฐ์ฐ 3๋ฒ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
๋ฐ๋ผ์ ๋ $n$๋นํธ ์ด์ง์ $x, y$๋ฅผ ๊ณฑํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ $T(n)$์ด๋ผ๊ณ ํ์ ๋
$$T(n) = 4T(n/2) + O(n)$$
๋ผ๋ ์์ผ๋ก ๋ํ๋ผ ์ ์์ต๋๋ค.
์ด๋ Master Theorem์์ $a = 4, b = 2, d = 1$์ ์๋ฏธํ๋ฏ๋ก $T(n) = O(n^2)$์ด ๋ฉ๋๋ค.
๐ Gauss's Trick
๋ ๋น ๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ์์๋ณด๊ธฐ ์ํด ์์ ์์ ์กฐ๊ธ ๋ณํํด์ฃผ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ต๋๋ค.
์ด๋ฅผ ์ฐ๋ฆฌ๋ 'Gauss's Trick'์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค
$x*y = (2^{\frac{n}{2}}x_L + x_R)(2^{\frac{n}{2}}y_L + y_R) = 2^nx_Ly_L + 2^{\frac{n}{2}}(x_Ly_R + x_Ry_L) + x_Ry_R$
์ ์์์ $(x_Ly_R + x_Ry_L)$๋ฅผ $(x_L + x_R)(y_L + y_R) - x_Ly_L - x_Ry_R$์ด๋ผ๊ณ ๋ณํํฉ๋๋ค.
๋ํ $(x_L + x_R)(y_L + y_R) = x_Ly_R + x_Ry_L + x_Ly_L + x_Ry_R$์ด๋ผ๋ ์ฑ์ง์ ์ด์ฉํ๋ฉด $x, y$์ ๊ณฑ์ ๋ n๋นํธ ์ด์ง์๋ฅผ ๊ณฑํ๋ subproblem 3๊ฐ{$(x_L + x_R)(y_L + y_R), x_Ly_L, x_Ry_R$} ๊ณผ ๊ธฐํ $O(n)$์ฐ์ฐ๋ค๋ก ๊ตฌํ ์ ์์ต๋๋ค.
์ด๋ฅผ ์๋ ์ฝ๋๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ์ด ๋ํ๋ผ ์ ์์ต๋๋ค.
$x, y$๋ฅผ ๊ณฑํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ $T(n)$์ด๋ผ๊ณ ํ๋ฉด $T(n) = 3T(n/2) + O(n)$์ ๋๋ค.
์ ์์ ์ผ๋ฐํด๋ Master Theorem์ ์ํด $T(n) = O(n^{log_23) ≈ O(n^{1.59})$๊ฐ ๋ฉ๋๋ค.
ํ์ฌ ์ ์ผ ๋น ๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ $O(nlogn)$์๊ณ ๋ฆฌ์ฆ์ด๋ผ๊ณ ํฉ๋๋ค.
์ฐธ๊ณ ๋ก ์์๋์ธ์ฉ.
'Computer Science > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ๊ทธ๋ํ ์๊ณ ๋ฆฌ์ฆ(1) - ๊ทธ๋ํ์ ๊ธฐ๋ณธ ์ฉ์ด (0) | 2022.10.04 |
---|---|
[Algorithm] ๋ถํ ์ ๋ณต(5) - Median of Medians (0) | 2022.10.04 |
[Algorithm] ๋ถํ ์ ๋ณต(1) - Master Theorem๊ณผ ์ผ๋ฐํด (0) | 2022.09.28 |
[Algorithm] ์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ณธ(2) - Basic Arithmetic (0) | 2022.09.28 |
[Algorithm] Master Theorem ๋ง๋ณด๊ธฐ (0) | 2022.09.14 |