美文网首页
Strassen矩阵乘法

Strassen矩阵乘法

作者: 月咏蝴蝶 | 来源:发表于2015-12-30 22:42 被阅读143次

    搬运一下,只能说想出这个乘法的人太牛逼!
    暴力解法:即线性代数所学的常规运算,算法复杂度为O(n3)

    for (int i =1 to n)
      for (int j = j to n)
        cij = 0
        for (k = 1 to n)
          cij = cij + aik*bkj
    

    Strassen矩阵乘法是通过递归实现的,它将一般情况下二阶矩阵乘法(可扩展到n阶,但Strassen矩阵乘法要求n是2的幂)所需的8次乘法降低为7次,将计算时间从O(nE3)降低为O(nE2.81)。

    矩阵C = AB,可写为
    C11 = A11B11 + A12B21
    C12 = A11B12 + A12B22
    C21 = A21B11 + A22B21
    C22 = A21B12 + A22B22
    如果A、B、C都是二阶矩阵,则共需要8次乘法和4次加法。如果阶大于2,可以将矩阵分块进行计算。耗费的时间是O(nE3)。

    要改进算法计算时间的复杂度,必须减少乘法运算次数。按分治法的思想,Strassen提出一种新的方法,用7次乘法完成2阶矩阵的乘法,算法如下:
    M1 = A11(B12 - B12)
    M2 = (A11 + A12)B22
    M3 = (A21 + A22)B11
    M4 = A22(B21 - B11)
    M5 = (A11 + A22)(B11 + B22)
    M6 = (A12 - A22)(B21 + B22)
    M7 = (A11 - A21)(B11 + B12)
    完成了7次乘法,再做如下加法:
    C11 = M5 + M4 - M2 + M6
    C12 = M1 + M2
    C21 = M3 + M4
    C22 = M5 + M1 - M3 - M7
    全部计算使用了7次乘法和18次加减法,计算时间降低到O(nE2.81)。计算复杂性得到较大改进。

    相关文章

      网友评论

          本文标题:Strassen矩阵乘法

          本文链接:https://www.haomeiwen.com/subject/ihiihttx.html