欢迎来到天天文库
浏览记录
ID:58910000
大小:19.28 KB
页数:8页
时间:2020-10-26
《strassen矩阵相乘算法C++代码.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Strassen矩阵相乘算法代码如果喜欢,请下载使用,谢谢。#include#include#include#includeusingnamespacestd;templateclassStrassen_class{public:voidADD(T**MatrixA,T**MatrixB,T**MatrixResult,intMatrixSize);voidSUB(T**MatrixA,T**MatrixB,T**MatrixResult,intMatrixSize);voidMUL(T
2、**MatrixA,T**MatrixB,T**MatrixResult,intMatrixSize);//朴素算法实现voidFillMatrix(T**MatrixA,T**MatrixB,intlength);//A,B矩阵赋值voidPrintMatrix(T**MatrixA,intMatrixSize);//打印矩阵voidStrassen(intN,T**MatrixA,T**MatrixB,T**MatrixC);//Strassen算法实现};templatevoidStrassen_class::ADD(T**MatrixA,T**M
3、atrixB,T**MatrixResult,intMatrixSize){for(inti=0;ivoidStrassen_class::SUB(T**MatrixA,T**MatrixB,T**MatrixResult,intMatrixSize){for(inti=0;i4、ize;j++){MatrixResult[i][j]=MatrixA[i][j]-MatrixB[i][j];}}}templatevoidStrassen_class::MUL(T**MatrixA,T**MatrixB,T**MatrixResult,intMatrixSize){for(inti=0;i5、ult[i][j]+MatrixA[i][k]*MatrixB[k][j];}}}}/*c++使用二维数组,申请动态内存方法申请int**A;A=newint*[desired_array_row];for(inti=0;ivoidStrassen_class::Strassen(intN,T**MatrixA,6、T**MatrixB,T**MatrixC){intHalfSize=N/2;intnewSize=N/2;if(N<=64)//分治门槛,小于这个值时不再进行递归计算,而是采用常规矩阵计算方法{MUL(MatrixA,MatrixB,MatrixC,N);}else{T**A11;T**A12;T**A21;T**A22;T**B11;T**B12;T**B21;T**B22;T**C11;T**C12;T**C21;T**C22;T**M1;T**M2;T**M3;T**M4;T**M5;T**M6;T**M7;T**AResult;T**BResult;//makinga1d7、iminsionalpointerbasedarray.A11=newT*[newSize];A12=newT*[newSize];A21=newT*[newSize];A22=newT*[newSize];B11=newT*[newSize];B12=newT*[newSize];B21=newT*[newSize];B22=newT*[newSize];C11=newT*[newSize];C12=newT*[newSize];C21=newT*[newSize]
4、ize;j++){MatrixResult[i][j]=MatrixA[i][j]-MatrixB[i][j];}}}templatevoidStrassen_class::MUL(T**MatrixA,T**MatrixB,T**MatrixResult,intMatrixSize){for(inti=0;i5、ult[i][j]+MatrixA[i][k]*MatrixB[k][j];}}}}/*c++使用二维数组,申请动态内存方法申请int**A;A=newint*[desired_array_row];for(inti=0;ivoidStrassen_class::Strassen(intN,T**MatrixA,6、T**MatrixB,T**MatrixC){intHalfSize=N/2;intnewSize=N/2;if(N<=64)//分治门槛,小于这个值时不再进行递归计算,而是采用常规矩阵计算方法{MUL(MatrixA,MatrixB,MatrixC,N);}else{T**A11;T**A12;T**A21;T**A22;T**B11;T**B12;T**B21;T**B22;T**C11;T**C12;T**C21;T**C22;T**M1;T**M2;T**M3;T**M4;T**M5;T**M6;T**M7;T**AResult;T**BResult;//makinga1d7、iminsionalpointerbasedarray.A11=newT*[newSize];A12=newT*[newSize];A21=newT*[newSize];A22=newT*[newSize];B11=newT*[newSize];B12=newT*[newSize];B21=newT*[newSize];B22=newT*[newSize];C11=newT*[newSize];C12=newT*[newSize];C21=newT*[newSize]
5、ult[i][j]+MatrixA[i][k]*MatrixB[k][j];}}}}/*c++使用二维数组,申请动态内存方法申请int**A;A=newint*[desired_array_row];for(inti=0;ivoidStrassen_class::Strassen(intN,T**MatrixA,
6、T**MatrixB,T**MatrixC){intHalfSize=N/2;intnewSize=N/2;if(N<=64)//分治门槛,小于这个值时不再进行递归计算,而是采用常规矩阵计算方法{MUL(MatrixA,MatrixB,MatrixC,N);}else{T**A11;T**A12;T**A21;T**A22;T**B11;T**B12;T**B21;T**B22;T**C11;T**C12;T**C21;T**C22;T**M1;T**M2;T**M3;T**M4;T**M5;T**M6;T**M7;T**AResult;T**BResult;//makinga1d
7、iminsionalpointerbasedarray.A11=newT*[newSize];A12=newT*[newSize];A21=newT*[newSize];A22=newT*[newSize];B11=newT*[newSize];B12=newT*[newSize];B21=newT*[newSize];B22=newT*[newSize];C11=newT*[newSize];C12=newT*[newSize];C21=newT*[newSize]
此文档下载收益归作者所有