0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

8回の掛け算を7回にーStrassenの行列積 part1/2ー

Last updated at Posted at 2025-12-24

本連載の目的

本連載では, 高校数学レベルの知識を前提に,
Strassen(シュトラッセン)の行列積アルゴリズムについて解説します.
原論文は

Strassen, Volker (1969).
"Gaussian Elimination is not Optimal". Numer. Math. 13 (4): 354–356.

特に, 高速化の鍵となる「乗算回数」に着目して話を進めていきます.

第1回(part1/2)となる今回は, 通常の(ナイーブな)行列積の計算手順を整理し,
本アルゴリズムの出発点となる「ある問い」を提示します.

第2回(part2/2)では, その問いに対する驚くべき解答として, Strassenの行列積アルゴリズムの核心に迫ります.

目次

今回 (Part 1/2)

  • (ナイーブな)行列積アルゴリズムの復習
    • 2次の実正方行列とは
    • 2次の実正方行列同士の加算と減算
    • 2次の実正方行列同士の乗算(ナイーブな行列積)
  • 問いへの導入
    • 中間値の定義(乗算パート)
    • 行列積の再構成(加算パート)
  • 問い:乗算回数を「7回」に減らせるか? 

最終回 (part 2/2)

  • Strassenの行列積アルゴリズム
    • 7個の中間値の構成(乗算パート)
    • 行列積の再構成(加減算パート)
  • 検証:本当に合っているのか?
  • なぜ「7回」が重要なのか
  • Strassenのその後
    • Strassenの行列積は「パズル」か?
    • 2次正方行列の行列積の乗算回数は「6回」に減らせるか?
    • Strassenより高速な行列積アルゴリズムはあるのか?
  • まとめ

(ナイーブな)行列積アルゴリズムの復習

簡単のため, 本連載では2次の実正方行列のみを扱います.

以下では, $\mathbb{R}$を実数全体の集合とします.
集合$X$とその要素$a$に対し,$a$が$X$に属することを$a \in X$と表します.

2次の実正方行列とは

$a_{11}, a_{12}, a_{21}, a_{22} \in \mathbb{R}$とします.
$$A = \begin{pmatrix}
a_{11} & a_{12} \\
a_{21} & a_{22}
\end{pmatrix}$$ は, 4つの実数$a_{11}, a_{12}, a_{21}, a_{22}$を「縦に2行, 横に2列」に並べたものです.
このとき, $A$を2次の実正方行列と呼びます.

また, 行列の各要素を成分と呼び, $i$行$j$列に位置する成分を$(i,j)$成分と呼びます.
例えば, 行列$A$の$(1, 2)$成分は$a_{12}$です.

以下では, $M_{2}(\mathbb{R})$で2次の実正方行列全体の集合を表します.

2次の実正方行列同士の加算と減算

2つの行列
$$A = \begin{pmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{pmatrix}, \quad
B = \begin{pmatrix} b_{11} & b_{12} \\ b_{21} & b_{22} \end{pmatrix} \in M_{2}(\mathbb{R})$$ に対して, 行列和$A + B \in M_{2}(\mathbb{R})$は以下で定義されます:
$$A + B := \begin{pmatrix}
a_{11}+b_{11} & a_{12}+b_{12} \\
a_{21}+b_{21} & a_{22}+b_{22}
\end{pmatrix} \in M_{2}(\mathbb{R}).$$
同様に, 行列差$A - B \in M_{2}(\mathbb{R})$は以下で定義されます:
$$A - B := \begin{pmatrix}
a_{11}-b_{11} & a_{12}-b_{12} \\
a_{21}-b_{21} & a_{22}-b_{22}
\end{pmatrix} \in M_{2}(\mathbb{R}).$$ 行列和や行列差と同様に行列積を定義することも考えられますが,
通常は次節で述べる定義を用います
(その理由は本題ではないため省略します).

2次の実正方行列同士の乗算(ナイーブな行列積)

まず, 2つの行列
$$A = \begin{pmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{pmatrix}, \quad
B = \begin{pmatrix} b_{11} & b_{12} \\ b_{21} & b_{22} \end{pmatrix} \in M_{2}(\mathbb{R})$$ に対して, (ナイーブな)行列積$A \times B \in M_{2}(\mathbb{R})$は以下で定義されます:
$$A \times B := \begin{pmatrix}
a_{11} \times b_{11} + a_{12} \times b_{21} & a_{11} \times b_{12} + a_{12} \times b_{22} \\
a_{21} \times b_{11} + a_{22} \times b_{21} & a_{21} \times b_{12} + a_{22} \times b_{22}
\end{pmatrix} \in M_{2}(\mathbb{R}).$$ この定義において, 成分同士の乗算($\times$)が何回行われているかを確認しましょう.

各成分に2回ずつ, 計4成分あるため, 乗算回数の合計は8回となります.

また, 加算回数の合計は4回です.

本連載では, 行列積における成分同士の乗算回数に着目します.

問いへの導入

(ナイーブな)行列積における「8回の乗算」を明確にするため,
以下の8個の中間値 $M_{1}, \dots, M_{8}$を導入して整理します:

1. 中間値の定義(乗算パート)

各中間値$M_{i}$の生成では, 成分同士の乗算回数は1回です.
したがって, 8個の中間値 $M_{1}, \dots, M_{8}$の生成では, 成分同士の乗算回数の合計は8回です.
$$\begin{align*}
M_1 &:= a_{11} \times b_{11} \\
M_2 &:= a_{12} \times b_{21} \\
M_3 &:= a_{11} \times b_{12} \\
M_4 &:= a_{12} \times b_{22} \\
M_5 &:= a_{21} \times b_{11} \\
M_6 &:= a_{22} \times b_{21} \\
M_7 &:= a_{21} \times b_{12} \\
M_8 &:= a_{22} \times b_{22}
\end{align*}$$

2. 行列積の再構成(加算パート)

これらの中間値$M_i$を用いると,
行列積$A \times B$は「中間値の和」のみで以下のように表せます:
$$A \times B := \begin{pmatrix}
M_{1} + M_{2} & M_{3} + M_{4} \\
M_{5} + M_{6} & M_{7} + M_{8}
\end{pmatrix} \in M_{2}(\mathbb{R}).$$ 特に, 行列積$A \times B \in M_{2}(\mathbb{R})$の各成分は中間値$M_{i} (1 \leq i \leq 8)$を使った和のみで書かれます.

以上により, 通常の行列積において「成分同士の乗算」が必要となるのは中間値$M_{1}, \dots, M_{8}$の生成時のみであり, その回数は8回であることが再確認できました.

問い:乗算回数を「7回」に減らせるか?

前節では, 8個の中間値を用いて, 行列積の計算に「8回の乗算と4回の加算」が必要であることを確認しました. 本連載では

「この乗算回数を8回から7回に減らすことはできないか?」

について考えてみます.
具体的には, 行列
$$A = \begin{pmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{pmatrix}, \quad
B = \begin{pmatrix} b_{11} & b_{12} \\ b_{21} & b_{22} \end{pmatrix} \in M_{2}(\mathbb{R})$$ に対して,

  1. 7個の中間値 $P_{1}, \dots, P_{7}$ を「1回ずつの乗算」を用いて適切に構成する;
  2. それらの加減算のみを使って, 積行列
    $$C := A \times B = \begin{pmatrix}
    c_{11} & c_{12} \\
    c_{21} & c_{22}
    \end{pmatrix}$$ の各成分$c_{11}, c_{12}, c_{21}, c_{22}$を表現する.

つまり, 各成分$c_{11}, c_{12}, c_{21}, c_{22}$を以下のような形で表せないでしょうか?
$$\begin{align*}
c_{11} &= P_{?}\pm P_{?}\pm \dots \\
c_{12} &= P_{?}\pm P_{?}\pm \dots \\
c_{21} &= P_{?}\pm P_{?}\pm \dots \\
c_{22} &= P_{?}\pm P_{?}\pm \dots
\end{align*}$$
ただし, $?$は$1, 2, \ldots , 7$のいずれかであり, 重複を許すものとします.

もしこれが可能であれば, 「乗算」を1回分削減できることになります.

ぜひ, 少しだけ思考を巡らせてみてください.
Strassenによる驚きの解答は, 次回の記事でご説明します.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?