STRASSEN矩阵乘法算法及改进算法.doc
文本预览下载声明
以下程序可以在直接运行
//2的k阶矩阵
#includeiostream
#includemath.h
//#includestdlib
using namespace std;
#define Max_Num 11
void Strassen(int **A,int **B,int **C,int n);
int main()
{
int **A, **B,**C,n,i,j;
cout请输入矩阵的阶数:endl;
cinn;
A=new int *[n];
B=new int *[n];
C=new int *[n];
for(i=0;in;i++)
{
A[i]=new int[n];
B[i]=new int[n];
C[i]=new int[n];
}
cout请输入矩阵A:endl;
for(i=0; in;i++)
for( j=0;jn;j++)
cinA[i][j];
cout请输入矩阵B:endl;
for(i=0; in;i++)
for( j=0;jn;j++)
cinB[i][j];
Strassen( A,B, C,n);
/*coutC C*C **Cendl;
for( i=0; in;i++)
coutC[i] ;
coutendl;*/
coutC=A*B:endl;
for( i=0; in;i++)
{
for( j=0;jn;j++)
coutC[i][j] ;
coutendl;
}
system(pause);
return 0;
}
void Matrix_Sub(int **A,int **B,int **C,int n)
{
int i,j;
for(i=0;in;i++)
for(j=0;jn;j++)
C[i][j]=A[i][j]-B[i][j];
}
void Matrix_Add(int **A,int **B,int **C,int n)
{
int i,j;
for(i=0;in;i++)
for(j=0;jn;j++)
C[i][j]=A[i][j]+B[i][j];
}
void Matrix_Mul(int **A,int **B,int **C)
{
int i,j,k;
for(i=0;i2;i++)
for(j=0;j2;j++)
{
C[i][j]=0;
for(k=0;k2;k++)
C[i][j]+=A[i][k]*B[k][j];
}
}
void Strassen(int **A,int **B,int **C,int n)
{ int **A11, **A12, **A21, **A22,**B11,**B12,**B21,**B22,**C11,**C12,**C21,**C22;
int **M1,**M2,**M3,**M4,**M5,**M6,**M7;
int i,j,**T1,**T2;
A11=new int* [n];A12=new int* [n];A21=new int* [n];A22=new int* [n];
B11=new int* [n];B12=new int* [n];B21=new int* [n];B22=new int* [n];
C11=new int* [n];C12=new int* [n];C22=new int* [n];C21=new int* [n];
M1=new int* [n];M2=new int* [n];M3=new int* [n];M4=new int* [n];M5=new int* [n];M6=new int* [n];M7=new int* [n];
T1=new int* [n];T2=new int* [n];
for(i=0;in;i++
显示全部