Strassen - Strassen算法
问题
用Strassen算法计算两个阶矩阵相乘。
行列式
阶行列式(Determinant):
表示个元素的乘积
的代数和。其中是的一个排列。当是奇排列时该项带负号,当是偶排列时该项带正号。对于元素下标的两个数字,若且则称这两个有序的数是逆序对。逆序对的数量称为逆序对数。若中所有元素下标的逆序对数为偶数,则称排列为偶排列;否则为奇排列。
即
其中是行列式的逆序数,表示对所有阶排列求和,该式称为阶行列式的完全展开式。
特别的阶行列式和阶行列式的完全展开式分别为
行列式操作和特性:
经过转置行列式的值不变,即。行列式的转置是将的行和列交换,得到,转置行列式的任意元素满足;例如
行列式中的任意两行/列交换位置,行列式的值不变;例如
特别的,当两行/列相同时,该行列式的值为;
某行/列中所有元素若存在公因子,则可以将提到行列式外;例如
特别的,某行/列的值全为,该行列式的值为;某两行/列的元素对应成比例,行列式的值为;
某行/列的每个元素是两个元素之和,则可以把行列式拆分为两个行列式之和;例如
把某行/列的倍加到另一行/列上,行列式的值不变;例如
矩阵
矩阵(Matrix):个数字组成的行列的表格
其中第行第列的元素为()。特别的当时称矩阵为阶矩阵或阶方阵。
矩阵操作和特性:
零矩阵:所有元素都为的矩阵
零矩阵记为。
若两矩阵和的行和列数量相等,即,称。的两矩阵称为同型矩阵。若同型矩阵的所有对应元素也想等,则两矩阵相等。
阶方阵构成的行列式称为的行列式,记作。注意矩阵是一个表格,而行列式经过计算后是一个值。
矩阵加法:两个同型矩阵可以相加,即,任意元素满足()。矩阵加法满足特性
矩阵数乘:矩阵与数可以相乘,即,任意元素满足()。矩阵数乘满足特性
矩阵乘法:两个矩阵相乘必须满足条件,即(),任意元素满足()。特别的,若是阶方阵,则个矩阵相乘的结果记为,称为的次幂。矩阵乘法满足特性
注意一般情况下。
矩阵转置:将矩阵的行和列交换得到矩阵,任意元素满足。称为的转置矩阵。矩阵转置满足特性
单位矩阵:阶矩阵中,主对角线上的元素都是,其余元素都是,称为阶单位矩阵,简写作,或。即(其中)。
数量矩阵:数字与单位矩阵的积称为数量矩阵。
阶矩阵的主对角线:即矩阵上的所有元素(其中)。所有元素连起来称为矩阵的对角线,其中的元素称为对角元素。
对角矩阵:非对角元素全为的阶方阵称为对角矩阵。
上/下三角矩阵:主对角线以下/上(不包括主对角线)元素都为的阶矩阵,即(上三角矩阵),(下三角矩阵)。
对称矩阵/反对称矩阵:满足(即)的矩阵为对称矩阵,满足(即)的矩阵称为反对称矩阵。
Strassen算法
根据数学定义,计算两个阶矩阵相乘,由于,计算中的一个元素的时间复杂度为。中有个元素,因此时间复杂度为。Strassen算法的时间复杂度比平凡算法更低。
对于阶矩阵乘法,设为偶数,则可以将三个矩阵划分为个的矩阵,转化为
按照矩阵乘法计算方法可知
上面计算中设两个阶矩阵相乘的时间复杂度为,则次矩阵相乘的时间复杂度为。阶方阵的加法需要分别计算次两个元素之和,因此时间复杂度为。由此可知
通过时间复杂度的推导方法,可以得出。因此分治法的时间复杂度与平凡算法相同。
Strassen算法在分治法基础上设置个中间矩阵,将上式转化为
可得
这样计算矩阵相乘时,只需要计算次矩阵相乘运算,矩阵间的加减运算的时间复杂度仍然是。即有
最终推导可得,Strassen算法的时间复杂度为。