矩阵相乘的Strassen算法

本文介绍了Strassen算法,一种用于优化矩阵相乘的分治策略。通过减少递归次数,将时间复杂度从Θ(n^3)降低到Θ(nlg7)。文章详细阐述了算法的原理,包括将矩阵划分为子矩阵,以及如何通过7次乘法运算计算最终结果。
摘要由CSDN通过智能技术生成

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值