编程语言
首页 > 编程语言> > 矩阵乘法的Strassen算法(下)

矩阵乘法的Strassen算法(下)

作者:互联网

前言

  上一节我们详细介绍了基本矩阵乘法和分治递归算法,详情可见”https://www.cnblogs.com/Bosson/p/14987366.html“。

  这一节将详细介绍Strassen算法。

Strassen算法

  Strassen算法目的是对分治递归算法的递归树进行剪枝,即从8次递归降为7次递归。

  过程共有四个步骤:

  接下来开始介绍Strassen算法的细节。

  在步骤二中,我们需要创建10个Si矩阵如下所示:

S1 = B12 - B22

S2 = A11 + A12

S3 = A21 + A22

S4 = B21 - B11

S5 = A11 + A22

S6 = B11 + B22

S7 = A12 - A22

S8 = B21 + B22

S9 = A11 - A21

S10 = B11 + B12

  在步骤三中,我们需要递归计算7次n/2 x n/2子矩阵的乘法,如下所示:

P1 = A11 x S1

P2 = S2 x B22

P3 = S3 x B11

P4 = A22 x S4

P5 = S5 x S6

P6 = S7 x S8

P7 = S9 x S10

  在步骤四中,我们需要利用Pj矩阵进行加减法运算,计算出C的4个子矩阵,如下所示:

C11 = P5 + P4 - P2 + P6

 C12 = P1 + P2

C21 = P3 + P4

C22 = P5 + P1 - P3 - P7

  经过验算,可以发现C的4个子矩阵结果与分治递归算法中的结果是一致的。

 

总结

  步骤三中递归式的解为O(nlg7),lg7 ≈ 2.81,即Strassen算法的渐进复杂性低于直接的矩阵乘法计算过程,是矩阵乘法的一种时间上改进的方法。  

标签:10,递归,矩阵,个子,Strassen,算法,乘法
来源: https://www.cnblogs.com/Bosson/p/14987604.html