Strassen - Strassen算法


问题

用Strassen算法计算两个阶矩阵相乘

行列式

阶行列式(Determinant):

表示个元素的乘积

的代数和。其中的一个排列。当是奇排列时该项带负号,当是偶排列时该项带正号。对于元素下标的两个数字,若则称这两个有序的数是逆序对。逆序对的数量称为逆序对数。若中所有元素下标的逆序对数为偶数,则称排列为偶排列;否则为奇排列。

其中是行列式的逆序数,表示对所有阶排列求和,该式称为阶行列式的完全展开式。

特别的阶行列式和阶行列式的完全展开式分别为

行列式操作和特性:

经过转置行列式的值不变,即。行列式的转置是将的行和列交换,得到,转置行列式的任意元素满足;例如

行列式中的任意两行/列交换位置,行列式的值不变;例如

特别的,当两行/列相同时,该行列式的值为

某行/列中所有元素若存在公因子,则可以将提到行列式外;例如

特别的,某行/列的值全为,该行列式的值为;某两行/列的元素对应成比例,行列式的值为

某行/列的每个元素是两个元素之和,则可以把行列式拆分为两个行列式之和;例如

把某行/列的倍加到另一行/列上,行列式的值不变;例如

矩阵

矩阵(Matrix):个数字组成的列的表格

其中第行第列的元素为)。特别的当时称矩阵阶矩阵或阶方阵。

矩阵操作和特性:

零矩阵:所有元素都为的矩阵

零矩阵记为

若两矩阵的行和列数量相等,即,称。的两矩阵称为同型矩阵。若同型矩阵的所有对应元素也想等,则两矩阵相等。

阶方阵构成的行列式称为的行列式,记作。注意矩阵是一个表格,而行列式经过计算后是一个值。

矩阵加法:两个同型矩阵可以相加,即,任意元素满足)。矩阵加法满足特性

矩阵数乘:矩阵与数可以相乘,即,任意元素满足)。矩阵数乘满足特性

矩阵乘法:两个矩阵相乘必须满足条件,即),任意元素满足)。特别的,若阶方阵,则个矩阵相乘的结果记为,称为次幂。矩阵乘法满足特性

注意一般情况下

矩阵转置:将矩阵的行和列交换得到矩阵,任意元素满足。称的转置矩阵。矩阵转置满足特性

单位矩阵:阶矩阵中,主对角线上的元素都是,其余元素都是,称为阶单位矩阵,简写作。即(其中)。

数量矩阵:数字与单位矩阵的积称为数量矩阵。

阶矩阵的主对角线:即矩阵上的所有元素(其中)。所有元素连起来称为矩阵的对角线,其中的元素称为对角元素。

对角矩阵:非对角元素全为阶方阵称为对角矩阵。

上/下三角矩阵:主对角线以下/上(不包括主对角线)元素都为阶矩阵,即(上三角矩阵),(下三角矩阵)。

对称矩阵/反对称矩阵:满足(即)的矩阵为对称矩阵,满足(即)的矩阵称为反对称矩阵。

Strassen算法

根据数学定义,计算两个阶矩阵相乘,由于,计算中的一个元素的时间复杂度为中有个元素,因此时间复杂度为。Strassen算法的时间复杂度比平凡算法更低。

对于阶矩阵乘法,设为偶数,则可以将三个矩阵划分为的矩阵,转化为

按照矩阵乘法计算方法可知

上面计算中设两个阶矩阵相乘的时间复杂度为,则次矩阵相乘的时间复杂度为阶方阵的加法需要分别计算次两个元素之和,因此时间复杂度为。由此可知

通过时间复杂度的推导方法,可以得出。因此分治法的时间复杂度与平凡算法相同。

Strassen算法在分治法基础上设置个中间矩阵,将上式转化为

可得

这样计算矩阵相乘时,只需要计算次矩阵相乘运算,矩阵间的加减运算的时间复杂度仍然是。即有

最终推导可得,Strassen算法的时间复杂度为


数学复习全书(2013年李永乐李正元考研数学 数学一) - 第二篇 线性代数


源码

Strassen.h

Strassen.cpp

测试

StrassenTest.cpp