【学习新知】【算法】Strassen算法

Strassen 算法将矩阵乘法中的暴力方法(n^3)降到了 (n^2.81),把人们认为的不可能变为了可能。尤其令我震惊的是,仅仅是运用了矩阵的组合,分块以及不同元素的加减就形成了新的算法。很多伟大的发现都是仅仅源于很平常的东西。

再说说这个算法。

一,如果是2^k 阶相乘,

那么把A,B矩阵分成4块,每块是2^(n-1)阶。

然后创建十个矩阵,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次乘法(这比普通方法少了一次)

P1=A11*S1=A11*B11-A11*B22

P2=S2*B22=A11*B22+A12*B22

P3=S3*B11=A22*B21-A22*B11

P4=A22*S4=A22*B21-A22*B11

P5=S5*S6=A11*B11+A11*B22+A22*B11+A22*B22

P6=S7*S8=A12*B21+A12*B22-A22*B21-A22* B22

P7=S9*S10=A11*B11+A11*B12-A21*B11-A21*B22

之后,就可以得出A*B=C,将C分为4块后C11,C12,C21,C22的表达式。

C11=P5+P4-p2+p6

C12=P1+P2

C21=P3+P4

C22=P5+P1-P3-P7

然后用递归逐步求解,大功告成!

但是如果不是2^n阶矩阵呢?

没关系,如果它是方阵,那么就寻找离它阶数最近的2^n这个数,然后按照这2^n用strassen算法,其余暴力就好。(如果2^n大于原来的阶数,相当于添加了一些零元素)

同理,如果不是方阵,就把它补成方针,同理用0元素填补,在用以上方法解答。

 

再发个感慨,啊哈期末考试终于考完啦!先玩几天,再努力刷OJ啊!!!

转载于:https://www.cnblogs.com/zmr-change-the-world/p/3523879.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值