文档详情

STRASSEN矩阵乘法算法及改进算法.doc

发布:2017-03-20约9.89千字共17页下载文档
文本预览下载声明
以下程序可以在直接运行 //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++
显示全部
相似文档