2020-1ν•™κΈ°, λŒ€ν•™μ—μ„œ β€˜μ•Œκ³ λ¦¬μ¦˜β€™ μˆ˜μ—…μ„ λ“£κ³  κ³΅λΆ€ν•œ λ°”λ₯Ό μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€. 지적은 μ–Έμ œλ‚˜ ν™˜μ˜μž…λ‹ˆλ‹€ :)

3 minute read

2020-1ν•™κΈ°, λŒ€ν•™μ—μ„œ β€˜μ•Œκ³ λ¦¬μ¦˜β€™ μˆ˜μ—…μ„ λ“£κ³  κ³΅λΆ€ν•œ λ°”λ₯Ό μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€. 지적은 μ–Έμ œλ‚˜ ν™˜μ˜μž…λ‹ˆλ‹€ :)


$n \times n$ ν–‰λ ¬ $X$와 ν–‰λ ¬ $Y$λ₯Ό κ³±ν•˜λŠ” 연산을 κ·Έλƒ₯ κ³„μ‚°ν•œλ‹€λ©΄, $O(n^3)$의 λΉ„μš©μ΄ λ“ λ‹€. 그런데 λΆ„ν• μ •λ³΅μ˜ 기법을 적절히 ν™œμš©ν•œλ‹€λ©΄ ν–‰λ ¬ κ³±μ…ˆμ„ 쒀더 μ‹Ό λΉ„μš©μœΌλ‘œ 계산할 수 μžˆλ‹€!! 이것을 <μŠˆνŠΈλΌμ„Ό(Strassen) μ•Œκ³ λ¦¬μ¦˜>이라고 ν•œλ‹€.

λ¨Όμ € ν–‰λ ¬ $X$λŠ” 4λ“±λΆ„ ν•˜μ—¬ $A$, $B$, $C$, $D$둜 이름을 뢙인닀. λ§ˆμ°¬κ°€μ§€λ‘œ ν–‰λ ¬ $Y$도 4λ“±λΆ„ ν•˜μ—¬ $E$, $F$, $G$, $H$둜 이름 뢙인닀.

\[X = \begin{bmatrix} A & B \\ C & D \end{bmatrix} \qquad Y = \begin{bmatrix} E & F \\ G & H \end{bmatrix}\]

κ·Έ 후에 $XY$ κ³±μ…ˆμ„ μ§„ν–‰ν•˜λ©΄ μ•„λž˜μ™€ 같을 것이닀.

\[XY = \begin{bmatrix} AE + BG & AF + BH \\ CE + DG & CF + DH \end{bmatrix}\]

사싀 $n/2 \times n/2$ 크기의 두 ν–‰λ ¬μ˜ κ³±μ…ˆμ„ 8번 ν•˜κΈ° λ•Œλ¬Έμ— μ—¬μ „νžˆ μ‹œκ°„ λ³΅μž‘λ„λŠ” $O(n^3)$이닀. κ·ΈλŸ¬λ‚˜ μ—¬κΈ°μ—μ„œ μ•½κ°„μ˜ νŠΈλ¦­μ„ μ“°λ©΄, 1/4 ν–‰λ ¬ κ³±μ…ˆμ„ 7번만 μˆ˜ν–‰ν•΄μ„œ ν–‰λ ¬ κ³±μ…ˆμ„ μˆ˜ν–‰ν•  수 μžˆλ‹€!! πŸ™Œ

μ•„λž˜μ™€ 같이 $P_1, …, P_7$ 7개의 1/4 ν–‰λ ¬ κ³±μ…ˆμ„ μ •μ˜ν•œλ‹€. $P_i$ μ •μ˜ 자체λ₯Ό 이해할 ν•„μš”λŠ” μ—†μœΌλ‹ˆ μ •μ˜ν•œ 슬쩍 보고 λ„˜μ–΄κ°€λ©΄ λœλ‹€.

\[\begin{aligned} P_1 = A(F - H) &\qquad P_5 = (A + D)(E + H)\\ P_2 = (A + B)H &\qquad P_6 = (B - D)(G + H)\\ P_3 = (C + D)E &\qquad P_7 = (A - C)(E + F)\\ P_4 = D(G - E) \end{aligned}\]

μš°λ¦¬λŠ” $P_i$λ₯Ό μ‘°ν•©ν•΄ $XY$λ₯Ό μ•„λž˜μ™€ 같이 μœ λ„ν•  수 μžˆλ‹€.

\[XY = \begin{bmatrix} P_5 + P_4 - P_2 + P_6 & P_1 + P_2 \\ P_3 + P_4 & P_1 + P_5 - P_3 - P_7 \end{bmatrix}\]

μ™€μš°! μ΄λ ‡κ²Œ ν•˜λ©΄ 총 7번의 κ³±μ…ˆκ³Ό 8번의 $O(n^2)$의 λ§μ…ˆ 만으둜 ν–‰λ ¬ κ³±μ…ˆμ„ μˆ˜ν–‰ν•  수 μžˆλ‹€! 이것을 <μŠˆνŠΈλΌμ„Ό μ•Œκ³ λ¦¬μ¦˜>이라고 ν•œλ‹€ 😎

점화식을 κΈ°μˆ ν•˜λ©΄ μ•„λž˜μ™€ 같은데

\[T(n) \le 7 \cdot T(n/2) + O(n^2)\]

<Master Theorem>을 μ‚¬μš©ν•΄μ„œ $T(n)$을 μœ λ„ν•˜λ©΄

\[T(n) = O(n^{\log_2 7}) \approx O(n^{2.81})\]

둜 μ›λž˜μ˜ $O(n^3)$보닀 κ°œμ„ λœ μ„±λŠ₯을 얻을 수 μžˆλ‹€!! 😁 μ–΄λ–»κ²Œ 보면 뢄할정볡 파트의 μ΄ˆλ°˜μ— λ‹€λ€˜λ˜ β€œλ‘ μ •μˆ˜μ˜ κ³±μ…ˆ μ•Œκ³ λ¦¬μ¦˜β€κ³Όλ„ λΉ„μŠ·ν•œ λ§₯λ½μ΄μ—ˆλ‹€.


ν–‰λ ¬κ³±μ…ˆμ— λŒ€ν•œ μŠˆνŠΈλΌμ„Ό μ•Œκ³ λ¦¬μ¦˜μ€ 1969λ…„ μ œμ‹œ λ˜μ—ˆλŠ”λ°, κ·Έ 이후에 더 κ°œμ„ λœ μ•Œκ³ λ¦¬μ¦˜λ“€μ΄ μ œμ‹œλ˜μ—ˆλ‹€κ³  ν•œλ‹€. 더 μžμ„Έν•œ λ‚΄μš©μ€ Wikipedia의 ν•΄λ‹Ή 아티클을 μ½μ–΄λ³΄μž. πŸ‘€

πŸ‘‰ Wikipedia - Strassen Algorithm


ν–‰λ ¬ κ³±μ…ˆκ³Ό κ΄€λ ¨ν•΄μ„œλŠ” λͺ‡κ°€μ§€ λ¬Έμ œλ“€μ΄ 더 μžˆλ‹€. ν–‰λ ¬ $A^m$의 값을 λΉ λ₯΄κ²Œ μ°ΎκΈ° μœ„ν•œ λ¬Έμ œλ„ 있고(λ°±μ€€ 10830번 - ν–‰λ ¬ 제곱), ν–‰λ ¬ κ³±μ…ˆ $A_1 \times A_2 \times \cdots \times A_n$μ—μ„œμ˜ μ΅œμ†Œ μ—°μ‚° 수λ₯Ό κ°–λŠ” ν–‰λ ¬ κ³±μ…ˆ μˆœμ„œλ₯Ό μ°ΎλŠ” Chain Matrix Multiplication λ¬Έμ œλ„ μžˆλ‹€.

Categories:

Updated: