Multiplication Algorithm
2020-1ํ๊ธฐ, ๋ํ์์ โ์๊ณ ๋ฆฌ์ฆโ ์์ ์ ๋ฃ๊ณ ๊ณต๋ถํ ๋ฐ๋ฅผ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. ์ง์ ์ ์ธ์ ๋ ํ์์ ๋๋ค :)
Multiplication Algorithm
๊ณ์ฐ์ ์ธ ๊ด์ ์์ ๋ฐ๋ผ๋ณผ ๋, ๊ณฑ์ ์ ๋ง์ ๋ณด๋ค ํจ์ฌ ๋น์ฉ์ด ๋ง์ด ๋๋ ์์ ์ด๋ค. ์ธ๊ฐ์ ๊ด์ ์์๋ ์ง๊ธ ๋น์ฅ $2$์๋ฆฟ์ ์๋ฅผ ๋ง์ ํ๋ ๊ฒ๊ณผ ๊ณฐ์ ํ๋ ๊ฑธ ๋น๊ตํด๋ณด๋ฉด, $2$์๋ฆฟ์ ๊ณฑ์ ์ด ๋ ํฐ ๋น์ฉ์ด ๋ ๋ค.
๊ณ์ฐ์ ์ธ ๊ด์ ์์๋ ๋ง์ฐฌ๊ฐ์ง๋ค. $2$์๋ฆฟ์๋ฅผ ๋ง์ ํ๋ ๊ฒ์ ๋ง์๋ด์ผ $3$๋ฒ ๋ฐํผ์ iteration์ ๋๋ฉด ๋๋ค. ํ์ง๋ง, $2$์๋ฆฟ์ ๊ณฐ์ ์ $2 \times 2=4$, ์ด 4๋ฒ ๋งํผ์ iteration์ ์๊ตฌํ๋ค. ์ฌ์ด์ฆ๋ฅผ ๋๋ ค, $n$์๋ฆฟ์ ๋ง์ ์ $n+1$๋ฒ ๋งํผ์ iteration์, $n$์๋ฆฟ์ ๊ณฐ์ ์ $n \times n=n^2$ ๋งํผ์ iteration์ ์๊ตฌํ๋ค. Big-O notation์ ์ฐ๋ฉด,
- ๋ง์ : $O(n)$
- ๊ณฑ์ : $O(n^2)$
์ธ๊ฐ์ ๊ณฑ์
์ ์ด์ค for
๋ฌธ์ ๋ฐฉ์์ผ๋ก cascade ํ๊ฒ ๊ณฑ์
์ ์ํํ๋ค. ํ์ง๋ง, ๊ณฑ์
์ <์ฌ๊ท recursion>์ ์ด์ฉํด ์ ๊ทผํ ์๋ ์๋ค. ํ๋ฒ ์ดํด๋ณด์.
๋จผ์ โ๋ณต์์ ๊ณฑ์ โ์์ ์๊ฐ์ ์ป์ด๋ณด์.
For two complex numbers $x=a+by$, $y=c+di$,
\[xy = (a+bi)(c+di) = (ac - bd) + (ad + bc)i\]์์ ๊ณผ์ ์์ $xy$๋ฅผ ๊ตฌํ๊ธฐ ์ํด์ $ac$, $bd$, $ad$, $bc$ ์ด 4๋ฒ์ ๊ณฑ์ ์ ์ํํด์ผ ํ๋ค.
ํ์ง๋ง, ์ฝ๊ฐ์ ํธ๋ฆญ์ ์ฐ๋ฉด, 3๋ฒ๋ง์ ๊ณฑ์ ์ผ๋ก ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค!!
\[xy = (a+bi)(c+di) = (ac-bd) + \left( (a+b)(c+d) - ac - bd \right) i\]์์ ์์์ $ac$, $bd$, $(a+b)(c+d)$ ์ด 3๋ฒ์ ๊ณฑ์ ์ ์ํํด ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป์๋ค! ๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ณผ์ ์์ $ac$, $bd$๋ฅผ ์ฌํ์ฉํ๋ค. ๋ช๋ฒ์ ๋ง์ ์ด ์ถ๊ฐ๋์์ง๋ง, ๊ณฑ์ ์ ๊ณ์ฐ ์ฝ์คํธ๋ฅผ ์๊ฐํ๋ฉด ๊ด์ฐฎ์ ๊ฑฐ๋๋ค!
์ด๊ฒ์ โ์์ฐ์ ๊ณฑ์ โ์๋ ์ ์ฉํด๋ณผ ์ ์์๊น?
๋ $n$-bit number $x$, $y$๊ฐ ์์ ๋, $xy$๋ ์๋์ ๊ฐ๋ค.
\[xy = \left(2^{n/2} \cdot x_L + x_R\right) \left(2^{n/2} \cdot y_L + y_R\right)\]$n$-bit์ ์ $x$๋ฅผ ์ ๋ฐ์ธ $n/2$์์ $x_L$, $x_R$๋ก <๋ถํ divide>ํ๋ค!!
์์ ์ ๊ฐํ๋ฉด,
\[\begin{aligned} xy &= \left(2^{n/2} \cdot x_L + x_R\right) \left(2^{n/2} \cdot y_L + y_R\right) \\ &= 2^n \cdot x_L y_L + 2^{n/2} \cdot \left(x_L y_R + x_R y_L \right) + x_R y_R \end{aligned}\]์ ์์์ $n/2$-bit ๊ณฑ์ ์ $x_L y_L$, $x_L y_R$, $x_R y_L$, $x_R y_R$ ์ด 4๋ฒ์ ์ํํ๋ค. ๊ฐ๊ฐ์ $n/2$-bit ๊ณฑ์ ์ ๋ํด์๋ <๋ถํ ์ ๋ณต>์ ์ ์ฉํ ์ ์์ผ๋ฏ๋ก ์ ํ์์ผ๋ก ํํํ๋ฉด ์๋์ ๊ฐ๋ค.
\[T(n) = 4 \cdot T(n/2) + O(n) = O(n^2)\]๊ทธ๋ฐ๋ฐ, ์ด๋ $\left(x_L y_R + x_R y_L \right)$ ๋ถ๋ถ์ ์ดํด๋ณด๋ฉด โ๋ณต์์ ๊ณฑ์ โ์ฒ๋ผ ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์ฌํ์ฉํ ์ ์๋ ๋ถ๋ถ์ด ์กด์ฌํ๋ค!!
\[\left(x_L y_R + x_R y_L \right) = (x_L + x_R)(y_L + y_R) - x_L y_L - x_R y_R\]์ฆ, $n$-bit ์์ฐ์์ ๊ณฑ์ ์ญ์ ๊ฐ ๊ณผ์ ์์ 3๋ฒ์ ๊ณฑ์ ๋ง์ผ๋ก ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค!! ๐
์ด๋ฅผ ๋ฐํ์ผ๋ก ์ ํ์์ ๋ค์ ์ฐ๋ฉด ์๋์ ๊ฐ๋ค.
\[T(n) = 3 \cdot T(n/2) + O(n) = O(?)\]<Master Theorem>์ ์ ์ฉํ๊ธฐ ์ ์ ์ฌ๊ท๋ฅผ ์ด์ฉํ <Multiplication Algorithm>์ด ์ด๋ป๊ฒ ๋์ํ๋์ง๋ถํฐ ์ฝ๋-๋ ๋ฒจ์์ ์ดํด๋ณด์.
function multiply($x$, $y$)
Input: Two $n$-bit integers $x$ and $y$
Output: Their product $xy$
if $n=1$ then
โโ return $xy$
end if
$x_L$, $x_R$ = leftmost $\lceil n/2 \rceil$, rightmost $\lfloor n/2 \rfloor$ bits of $x$
$y_L$, $y_R$ = leftmost $\lceil n/2 \rceil$, rightmost $\lfloor n/2 \rfloor$ bits of $y$
$P_1$ = multiply($x_L$, $y_L$)
$P_2$ = multiply($x_R$, $y_R$)
$P_3$ = multiply($x_L + x_R$, $y_L + y_R$)
return $P_1 \times 2^n + \left(P_3 - P_1 - P_2\right) \times 2^{n/2} + P_2$
์ด์ <Master Theorem>์ ์ด์ฉํด ์๊ฐ ๋ณต์ก๋๋ฅผ ์ ๋ํ์.
๋งค ๊ณผ์ ๋ง๋ค ๋ฌธ์ ๊ฐ $3$๊ฐ์ ํ์ ๋ฌธ์ ๋ก โ๋ถํ โ๋๊ณ , ๋ถํ ๋ ํ์ ๋ฌธ์ ๋ ๋ณธ๋ ๋ฌธ์ ์ $n/2$ ๋งํผ์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋ค. โat $k$-th level, there are $3^k$ subproblems, each of size $n/2^k$โ
\[3^k \cdot O(n/2^k)\]๋ฌธ์ ๊ฐ ๋งค๋ฒ ์ ๋ฐ์ฉ ๋ถํ ๋๋ฏ๋ก, ๋ถํ ์ ์ด $\log_2 n$๋ฒ ์ด๋ค์ง๋ค.
๋ฐ๋ผ์
\[\sum^{\log_2 n}_{k=0} {3^k \cdot O(n/2^k)}\]์์ ์ ๊ฐํ๋ฉด,
\[\begin{aligned} \sum^{\log_2 n}_{k=0} {3^k \cdot O(n/2^k)} &= \sum^{\log_2 n}_{k=0} {(3/2)^k \cdot O(n)} \\ &= O(n) \cdot \sum^{\log_2 n}_{k=0} {(3/2)^k } \\ &= O(n) \cdot \frac{(3/2)^{\log_2 {n} + 1} - 1}{3/2-1} \\ &= O(n) \cdot O\left( (3/2)^{\log_2 {n}} \right) \\ &= O(n) \cdot O\left( \frac{3^{\log_2 {n}}}{2^{\log_2 {n}}} \right) \\ &= O(n) \cdot O\left( \frac{n^{\log_2{3}}}{n} \right) \\ &= O(n^{\log_2 {3}}) \end{aligned}\]์ฆ, <๋ถํ ์ ๋ณต>์ ์ด์ฉํด ๊ณฑ์ ํ ๊ฒฝ์ฐ, ๊ธฐ์กด์ $O(n^2)$๋ณด๋ค ๊ฐ์ ๋ $O(n^{\log_2{3}})$๋ง์ ๊ณฑ์ ์ ๋๋ฆด ์ ์๋ค!! ๐
์ด ๋น ๋ฅธ ๊ณฑ์ ์๊ณ ๋ฆฌ์ฆ์ <์นด๋ผ์ธ ๋ฐ์ ์๊ณ ๋ฆฌ์ฆ; Karatsuba Algorithm>์ด๋ผ๊ณ ํ๋ค. 1960๋ ์ ์นด๋ผ์ธ ๋ฐ๊ฐ ์ ์ํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํ๋ ฌ ๊ณฑ์ ์๊ณ ๋ฆฌ์ฆ์ธ ์ํธ๋ผ์ผ(Stressen) ์๊ณ ๋ฆฌ์ฆ๋ ์นด๋ผ์ธ ๋ฐ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋น์ทํ ๋งฅ๋ฝ์ผ๋ก ๋ฌธ์ ๋ฅผ ๋ณํฉ(merge) ํ๋ ๋จ๊ณ์์ ์๊ฐ ๋ณต์ก๋๋ฅผ ์ค์ธ ์ผ์ด์ค์ด๋ค.
์ด <์นด๋ผ์ธ ๋ฐ ์๊ณ ๋ฆฌ์ฆ>๋ณด๋ค ๋ ๋น ๋ฅธ ์๊ณ ๋ฆฌ์ฆ๋ ์กด์ฌํ๋ค! <FFT; ๊ณ ์ ํธ๋ฆฌ์ ๋ณํ>์ ์ฐ๋ฉด ๋ ๋น ๋ฅด๊ฒ ๋ ์์ ๊ณฑ์ ์ ๊ตฌํ ์ ์๋ค. ์ด ๋ด์ฉ์ <FFT; ๊ณ ์ ํธ๋ฆฌ์ ๋ณํ> ํฌ์คํธ์์ ๋ค์ ๋ค๋ฃจ๋๋ก ํ๊ฒ ๋ค ๐
references
- ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํด๊ฒฐ์ ๋ต: ์นด๋ผ์ธ ๋ฐ์ ๋น ๋ฅธ ๊ณฑ์ ์๊ณ ๋ฆฌ์ฆ