Chain Matrix Multiplication
2020-1ํ๊ธฐ, ๋ํ์์ โ์๊ณ ๋ฆฌ์ฆโ ์์ ์ ๋ฃ๊ณ ๊ณต๋ถํ ๋ฐ๋ฅผ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. ์ง์ ์ ์ธ์ ๋ ํ์์ ๋๋ค :)
์ผ๋ฐ์ ์ผ๋ก ํ๋ ฌ ๊ณฑ์ $A_1 \times A_2 \times \cdots \times A_n$์ Associative ํ๊ธฐ ๋๋ฌธ์ ํ๋ ฌ์ ๊ณฑ์ ์์๋ฅผ ์ด๋ป๊ฒ ์งํํ๋๋์ ๋ฐ๋ผ์ ์ ์ฒด ์ฐ์ฐ์ ์๊ฐ ๋ฌ๋ผ์ง๋ค.
์๋ฅผ ๋ค์ด,
- $A: 50 \times 20$
- $B: 20 \times 1$
- $C: 1 \times 10$
- $D: 10 \times 100$
4๊ฐ์ง ํ๋ ฌ์ด ์์ ๋,
- $A \times ((B \times C) \times D) = 120,200$
- $(A \times B) \times (C \times D) = 7,000$
์ด ๋๋ค. ์ฆ, ํ๋ ฌ์ ๊ณฑ์ ์์๋ฅผ ์ ์กฐ์ ํด ํ์ํ ์ฐ์ฐ์ ์๋ฅผ ์ค์ผ ์ ์๋ค๋ ๊ฒ์ด๋ค!!
naive approach
๊ฐ์ฅ ๊ฐ๋จํ์ง๋ง, ๊ฐ์ฅ ๋น์ฉ์ด ๋ง์ด ๋๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ ํ๋ ฌ ๊ณฑ์ ์์๋ฅผ ๋ชจ๋ ์ดํด๋ณด๋ ๊ฒ์ด๋ค. ํ๋ ฌ์ ๊ณฑ์ ์ binary operation์ด๊ธฐ ๋๋ฌธ์ ์ ์ฒด ํ๋ ฌ ์ฐ์ฐ์ ์ด๋ค binary tree์ ํํ๋ก ํํํ ์ ์๋ค. ์ด๋, ์ฐ๋ฆฌ๋ $n$๊ฐ์ ํ๋ ฌ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์, ์ด binary tree๋ $n$๊ฐ์ leaf node๋ฅผ ๊ฐ์ง ํธ๋ฆฌ๊ฐ ๋๋ค. ๋ํ, ๊ทธ ๊ฐ์ง์๋ exponentially manyํ $2^n$๊ฐ๊ฐ ๋๋ค.
Dynamic Programming
DP์์๋ ์ด ๋ฌธ์ ๋ฅผ ์๋์ ๊ฐ์ด ์ ๊ทผํ๋ค.
๋ค๋ฅธ ๊ณณ์์๋ ๋ถ๋ถ์์ด(sebsequence)์ ์ด์ฉํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค๊ณ ๋ ์ค๋ช ํ๋ค.
- ์ ์ฒด ์์ด์ ๊ธธ์ด 2์ ๋ถ๋ถ ์์ด๋ก ๋ถ๋ฆฌํ๋ค.
- ๊ธธ์ด 2์ ๋ถ๋ถ ์์ด์์ (์ต์) ๋น์ฉ์ ๊ตฌํ๋ค.
- ๊ธธ์ด 3์ ๋ถ๋ถ ์์ด์ ์ดํด๋ณธ๋ค. ์ด๋, ๊ธธ์ด 2์ ๋ถ๋ถ ์์ด์์ ๊ตฌํ ๋น์ฉ์ ๋ฐํ์ผ๋ก ์ต์ ๋น์ฉ์ ๊ตฌํ๋ค.
- ๊ธธ์ด 4๋ ๊ธธ์ด 3์์ ๊ตฌํ ์ต์ ๋น์ฉ์ ๋ฐํ์ผ๋ก ์ต์ ๋น์ฉ์ ๊ตฌํ๋ค.
- ์ด ๊ณผ์ ์ ๊ธธ์ด $n$๊น์ง ๋ฐ๋ณต
์ด ๊ณผ์ ์ ์ ๋ฆฌํด ๊ธฐ์ ํ๋ฉด,
- $C(i, j)$ = min cost of multiplying $A_i \times \cdots A_j$
for $\ell = 1, 2, \dots, n$
โโfor $i=1, 2, \dots, n - \ell + 1$
โโโโ$j = i + \ell$
โโโโfor $k=i, \dots, j-1$
โโโโโโ$\texttt{cost} = C(i, k) + C(k+1, j) + m_{i-1} \times m_k \times m_j$
โโโโโโ$C(i, j) = \min \{ C(i, j), \; \texttt{cost}\}$
return $C(1, n)$
์์ ๊ณผ์ ์ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ฉด ์๋์ ๊ฐ์ด ํํํ ์ ์๋ค.
Image from here
๋ง์ฝ best-split ์์๋ฅผ ๊ธฐ๋กํด ์ค์ binary opr tree๋ฅผ ๊ตฌ์ฑํ๊ณ ์ถ๋ค๋ฉด, $C(i, j)$๋ฅผ ๊ฐฑ์ ํ๋ ๊ณผ์ ์์ ์ธ์ minimum์ ๋ฌ์ฑํ๋์ง ๊ธฐ๋กํด๋๋ฉด ๋๋ค.
โโโโโโif $\texttt{cost} < C(i, j)$
โโโโโโโโ$C(i, j) = \texttt{cost}$
โโโโโโโโ$S(i, j) = k$
๊ทธ๋ฆฌ๊ณ binary opr tree๋ฅผ ์ฌํํ ๋๋ $S(1, n)$์ผ๋ก splitting point๋ฅผ ์ฐพ๊ณ , ๊ทธ๋ฆฌ๊ณ $S(1, k)$, $S(k, n)$์ ๊ฐ์ผ๋ก ๊ทธ ๋ค์ splitting point์ ์ฐพ๊ณ , โฆ ์ด๋ฐ ์์ผ๋ก ์งํํ๋ฉด ๋๋ค ๐