\begin{algorithm}
\caption{Strassen Matrix Multiplication}
\begin{algorithmic}
\INPUT Two $n \times n$ matrix $A$ and $B$ .
\OUTPUT A $n \times n$ matrix $C = A \cdot B$ .
\PROCEDURE{Strassen}{$A, B$}
\IF {$n = 1$}
\RETURN $[a_{11} \cdot b_{11}]$
\ENDIF
\STATE Let $C$ be a new $n \times n$ matrix.
\STATE Partition $A$ into $\left[\begin{matrix}A_{11} & A_{12} \\ A_{21} & A_{22} \end{matrix}\right]$ , $B$ into $\left[\begin{matrix}B_{11} & B_{12} \\ B_{21} & B_{22} \end{matrix}\right]$ and $C$ into $\left[\begin{matrix}C_{11} & C_{12} \\ C_{21} & C_{22} \end{matrix}\right]$ .
\STATE \COMMENT{$A_{ij}, B_{ij}, C_{ij}$ are $n/2 \times n/2$ matrixs.}
\STATE
\STATE \COMMENT{calculate ten matrixs of addition or substraction.}
\STATE $S_1 = B_{12} - B_{22}$ , $S_2 = A_{11} + A_{12}$ , $S_3 = A_{21} + A_{22}$ , $S_4 = B_{21} - B_{11}$
\STATE $S_5 = A_{11} + A_{22}$ , $S_6 = B_{11} + B_{22}$ , $S_7 = A_{12} - A_{22}$ , $S_8 = B_{21} + B_{22}$
\STATE $S_9 = A_{11} - A_{21}$ , $S_{10} = B_{11} + B_{12}$
\STATE
\STATE \COMMENT{calculate seven matrixs of product.}
\STATE $P_1 = $ \CALL{Strassen}{$A_{11}, S_1$} , $P_2 = $ \CALL{Strassen}{$S_2, B_{22}$}
\STATE $P_3 = $ \CALL{Strassen}{$S_3, B_{11}$} , $P_4 = $ \CALL{Strassen}{$A_{22}, S_4$}
\STATE $P_5 = $ \CALL{Strassen}{$S_5, S_6$} , $P_6 = $ \CALL{Strassen}{$S_7, S_8$}
\STATE $P_7 = $ \CALL{Strassen}{$S_9, S_{10}$}
\STATE
\STATE \COMMENT{calculate the result}
\STATE $C_{11} = P_5 + P_4 - P_2 + P_6$
\STATE $C_{12} = P_1 + P_2$
\STATE $C_{21} = P_3 + P_4$
\STATE $C_{22} = P_5 + P_1 - P_3 - P_7$
\STATE
\RETURN $C$
\ENDPROCEDURE
\end{algorithmic}
\end{algorithm}