1.从定义触出发
//intput:矩阵A,矩阵B(假设都为n*n)
//output:矩阵C
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
C[i][j]=0;
for(k=1;k<=n;k++)
C[i][j]=C[i][j]+A[i][j]*B[i][j];
}
2.Strassen算法
考虑用分治法计算矩阵乘积.输入是两个nn的矩阵A和B,其中n是2的幂.如果n>1,吧A和B分成四个n/2xn/2矩阵.
最后为计算22基本矩阵的算法
Strassen算法计算各个量:
q1=(A11+A22)(B11B22);
q2=(A21+A22)B11;
q3=A11(B12-B22);
q4=A22*(B21-B11);
q5=(A11+A12)B22;
q6=(A21-A11)(B11+B12);
q7=(A12-A22)*(B21+B22);
|q1+q4-q5+q7 ,q3+q5 |
C=AB=| |
|q2+q4 ,q1+q3-q2+q6|