Strassen矩阵乘法

  • 矩阵相乘问题

    输入:A,B为n阶矩阵,n = 2 k 2^k 2k

    输出:C = AB

    通常矩阵乘法:

    C中有 n 2 n^2 n2个元素,每个元素需要做n次乘法,以元素相乘为基本运算, W ( n ) = O ( n 3 ) W(n) = O(n^3) W(n)=O(n3)

    • 简单的分治算法

      简单将矩阵分块,即

    ( A 11 A 12 A 21 A 22 ) ( B 11 B 12 B 21 B 22 ) = ( C 11 C 12 C 21 C 22 ) \begin{pmatrix} A_{11}&A_{12}\\ A_{21}&A_{22}\\ \end{pmatrix} \begin{pmatrix} B_{11}&B_{12}\\ B_{21}&B_{22}\\ \end{pmatrix} =\begin{pmatrix} C_{11}&C_{12}\\ C_{21}&C_{22}\\ \end{pmatrix} (A11A21A12A22)(B11B21B12B22)=(C11C21C12C22)

    其中 C 11 = A 11 B 11 + A 12 B 21 C 12 = A 11 B 12 + A 12 B 22 C 21 = A 21 B 11 + A 22 B 21 C 22 = A 21 B 12 + A 22 B 22 递推方程为 W ( n ) = 8 W ( n 2 ) + O ( n 2 ) 解得 W ( n ) = O ( n 3 ) 其中C_{11} = A_{11}B_{11}+A_{12}B_{21}\\ C_{12} = A_{11}B_{12}+A_{12}B_{22}\\ C_{21} = A_{21}B_{11}+A_{22}B_{21}\\ C_{22} = A_{21}B_{12}+A_{22}B_{22}\\ 递推方程为W(n) = 8W(\frac n2) + O(n^2)\\ 解得W(n) = O(n^3) 其中C11=A11B11+A12B21C12=A11B12+A12B22C21=A21B11+A22B21C22=A21B12+A22B22递推方程为W(n)=8W(2n)+O(n2)解得W(n)=O(n3)

    • Strassen 矩阵乘法
      设计 M 1 , … , M 7 , 对应 7 个子问题 M 1 = A 11 ( B 12 − B 22 ) M 2 = ( A 11 + A 12 ) B 22 M 3 = ( A 21 + A 22 ) B 11 M 4 = A 22 ( B 21 − B 11 ) M 5 = ( A 11 + A 22 ) ( B 11 + B 22 ) M 6 = ( A 12 − A 22 ) ( B 21 + B 22 ) M 7 = ( A 11 − A 21 ) ( B 11 + B 22 ) 设计M_1,\dots,M_7,对应7个子问题\\ M_1 = A_{11}(B_{12}-B_{22})\\ M_2 = (A_{11}+A_{12})B_{22}\\ M_3 = (A_{21}+A_{22})B_{11}\\ M_4 = A_{22}(B_{21}-B_{11})\\ M_5 = (A_{11}+A_{22})(B_{11}+B_{22})\\ M_6 = (A_{12}-A_{22})(B_{21}+B_{22})\\ M_7 = (A_{11}-A_{21})(B_{11}+B_{22})\\ 设计M1,,M7,对应7个子问题M1=A11(B12B22)M2=(A11+A12)B22M3=(A21+A22)B11M4=A22(B21B11)M5=(A11+A22)(B11+B22)M6=(A12A22)(B21+B22)M7=(A11A21)(B11+B22)
      利用中间矩阵,得到结果矩阵
      C 11 = M 5 + M 4 − M 2 + M 6 C 12 = M 1 + M 2 C 21 = M 3 + M 4 C 22 = M 5 + M 1 − M 3 − M 7 时间复杂度为 : W ( n ) = 7 W ( n 2 ) + 18 ( n 2 ) 2 其中一次矩阵加减法为 ( n 2 ) 2 次加减法 解得 W ( n ) = O ( n log ⁡ 7 ) C_{11} = M_{5}+M_{4}-M_{2}+M_{6}\\ C_{12} = M_{1}+M_2\\ C_{21} = M_3+M_4\\ C_{22} = M_5+M_1-M_3-M_7\\ 时间复杂度为:\\ W(n) = 7W(\frac n 2) + 18(\frac n 2)^2\\ 其中一次矩阵加减法为(\frac n 2)^2次加减法\\ 解得W(n) = O(n^{\log 7}) C11=M5+M4M2+M6C12=M1+M2C21=M3+M4C22=M5+M1M3M7时间复杂度为:W(n)=7W(2n)+18(2n)2其中一次矩阵加减法为(2n)2次加减法解得W(n)=O(nlog7)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值