-
Strassen
算法
在了解
Strassen
算法之前,先来了解一下矩
阵乘法:
矩阵乘法的
c
语言程序:
#include
float main()
{
float
a[100][100],b[100][100],c[100][100];
<
/p>
//
定义三个数组分别储存三个矩阵
A,
B,C
int
m1,n1,m2,n2,i1,j1,i2,j2,i3,j3,i4,j4,k;
float s[100][100]={0};
//
初始化数组
s
< br>printf(
请输入矩阵
A
的
行数
m1
和列数
n1:
scanf(
scanf(
pri
ntf(
请输入矩阵
B
的行数
m2
和列数
n2:
pr
intf(
便于观看结果,将结果与输入分开
if(n1!=m2)
printf(
不可以相乘!!!
nn
if(m1>100||n1>100||m2>100||n2>100) prin
tf(
数目过多,溢出!!!
nn
el
se{
for(i2=1;i2<=m2;i2++)
}
for(j2=1;j2<=n2;j2++)
{
printf(
scanf(
}
//
输入矩阵
A
的元素
printf(
{
for(j2=1;j2<=n2;j2++)
{
printf(
scanf(
}
//
输入矩阵
B
的元素
}
for(i2=1;i2<=m2;i2++)
printf
(
矩阵
Ann
//
打印矩阵
A
便于观看与检查
p>
for(i3=1;i3<=m1;i3++)
{
for(j3=1;j3<=n1;j3++)
}
{printf(
if(j3==n1)printf(
printf(
矩阵
B
:
< br>//
与矩阵
B
的打印隔开,便于
观看
for(i4=1;i4<=m2;i4++)
{
for(j4=1;j4<=n2;j4++)
{printf(
if(j4==n2)printf(
}}
printf(
矩阵
C=A*B=
n
for(i4=1;i4<=m1;i4++)
{
for(j4=1;j4<=n2;j4++)
{for(k=1;k<=n1;k++)
{s[i4][j4]=s[i4][j4]+a[i4][k]*b[k][j4];
}//
定义矩阵的乘法,相乘时,有一个指标是一样的,都用
k
c[i4][j4]=s[i4][j4];}
p>
printf(
矩阵
C
是:
n
for(i4=1;i4<=m1;i4++)
{
for(j4=1;j4<=n2;j4++)
}
return 0;
}}
设
甲
p>
,
乙
两个
方阵
p>
通过
环
?
。我们要计算的矩阵产品
?
?
ň
{printf(
如果
2
型
×
2
矩阵
甲
,
乙,
我们填零丢失的行和列。我们分区
甲
,
乙
,
?
成大小相等的
块矩阵
【
Let
A
,
B
be two
square matrices
over
a
ring
R
. We want to calculate the
matrix product
C
as
If the matrices
A
,
B
are not of type 2
n
x
2
n
we fill the missing rows
and columns with zeros.
We partition
A
,
B
and
C
into equally
sized
block
matrices
】
The
left column represents 2x2
matrix
multiplication
. Na?
ve matrix
multiplication requires one multiplication
for each
he 7
multiplications in
the algorithm, and
the sum of the columns gives the full matrix
multiplication on the left.
【左边的列表示的
2x2
矩
阵乘法
。朴素的矩阵乘法,需要为每一个
“1”
的左边的列的一个乘法。
7
乘法算法的
其他列中的每一个都代表一个单一的一个,并
在左侧的列的总和给出了完整的矩阵乘法。
】
with
Then
阵乘法相同数量的乘法。
现在来的重要组成部分。我们定义新的矩阵
采用这种结构,我们并没有减少乘法的次数。我们还需要
p>
8
次乘法计算
C[I,J]
矩阵,我们需要的时候使用标准的矩