矩阵相乘的Strassen算法

LZ是菜鸟一枚,非计算机专业学生,正在学习算法导论这本书,希望养成学习完一个问题之后进行归纳整理的习惯,所以开始了博客之路,内容都是最基础的笔记,如果发现错误希望你能慷慨的帮我指出来,这样我才能改正并进步哦。
话不多说 下面是第二次记录么么哒

问题描述

实现两个 n 维方阵 A=(aij)n×n B=(bij)n×n 的乘法运算, C=AB , C 中的元素 cij 表示为:

cij=k=1naikbkj


使用的算法

分治策略。
如果直接进行计算, C 中共有 n2 个元素,每个元素根据上面的公式要计算 n 个值的和。伪代码如下:
SQUARE-MATRIX-MULTIPLE(A,B)
n=A.rows 计算方阵的行数和列数
let C be a new n×n matrix
for i=1 to n
for j=1 to n
cij =0
for k=1 to n
cij=cij+aikbkj
return C
上述代码中总共有三重循环,每一层循环都执行 n 步,因此时间复杂度为 Θ(n3) ,下面考虑使用分治思想来降低这个时间复杂度。

简单地分治

首先我们先考虑一个比较简单直观的分治算法,简单起见将三个矩阵的维数 n 设为2的幂,并且简单的将每个矩阵分别划分为四个子矩阵的形式,如下:

[A11A21
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值