Strassen矩阵乘法

步骤描述:

  1. AB分解为n/2xn/2的子矩阵。时间为O(1)。

  2. 创建10个n/2 × n/2 的矩阵S1,S2,…,S10
    S 1 = B 12 − B 22 S 2 = A 11 + A 12 S 3 = A 21 + A 22 S 4 = B 21 − B 11 S 5 = A 11 + A 22 S 6 = B 11 + B 22 S 7 = A 12 − A 22 S 8 = B 21 + B 22 S 9 = A 11 − A 21 S 10 = B 11 + B 12 S_1=B_{12}-B_{22} \\ S_2=A_{11}+A_{12} \\ S_3=A_{21}+A_{22} \\ S_4=B_{21}-B_{11} \\ S_5=A_{11}+A_{22} \\ S_6=B_{11}+B_{22} \\ S_7=A_{12}-A_{22} \\ S_8=B_{21}+B_{22} \\ S_9=A_{11}-A_{21} \\ S_{10}=B_{11}+B_{12} \\ S1=B12B22S2=A11+A12S3=A21+A22S4=B21B11S5=A11+A22S6=B11+B22S7=A12A22S8=B21+B22S9=A11A21S10=B11+B12
    时间O(n2)

  3. 递归计算P1,P2,…,P7
    P 1 = A 11 ⋅ S 1 P 2 = S 2 ⋅ B 22 P 3 = S 3 ⋅ B 11 P 4 = A 22 ⋅ S 4 P 5 = S 5 ⋅ S 6 P 6 = S 7 ⋅ S 8 P 7 = S 9 ⋅ S 10 P_1=A_{11} \cdot S_1 \\ P_2=S_2 \cdot B_{22} \\ P_3=S_3 \cdot B_{11} \\ P_4=A_{22} \cdot S_4 \\ P_5=S_5 \cdot S_6 \\ P_6=S_7 \cdot S_8 \\ P_7=S_9 \cdot S_{10} \\ P1=A11S1P2=S2B22P3=S3B11P4=A22S4P5=S5S6P6=S7S8P7=S9S10

  4. 计算出C的子矩阵C11,C12,C21,C22
    C 11 = P 5 + P 4 − P 2 + P 6 C 12 = P 1 + P 2 C 21 = P 3 + P 4 C 22 = P 5 + P 1 − P 3 − P 7 C_{11}=P_5+P_4-P_2+P_6 \\ C_{12}=P_1+P_2 \\ C_{21}=P_3+P_4 \\ C_{22}=P_5+P_1-P_3-P_7 C11=P5+P4P2+P6C12=P1+P2C21=P3+P4C22=P5+P1P3P7

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值