strassen矩阵相乘算法C++代码

上传人:re****.1 文档编号:502572867 上传时间:2024-01-09 格式:DOCX 页数:12 大小:24.81KB
返回 下载 相关 举报
strassen矩阵相乘算法C++代码_第1页
第1页 / 共12页
strassen矩阵相乘算法C++代码_第2页
第2页 / 共12页
strassen矩阵相乘算法C++代码_第3页
第3页 / 共12页
strassen矩阵相乘算法C++代码_第4页
第4页 / 共12页
strassen矩阵相乘算法C++代码_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《strassen矩阵相乘算法C++代码》由会员分享,可在线阅读,更多相关《strassen矩阵相乘算法C++代码(12页珍藏版)》请在金锄头文库上搜索。

1、Strassn矩阵相乘算法代码如果喜欢,请下载使用,谢谢。#incude #nclude iotramcludetme#icude sinaespace std;eplateclassStrassen_class public:vodAD(T*Mtrix, T*MarixB, T* Matrxesult, i MatrixSize);i SB(T MarxA, T* MatrixB, arixesl, int arixie);vodMUL(T* MatrixA, T* MarxB, T* Marixest, int MatxSe);/朴素算法实现oidFilMarix(* MtixA,* Ma

2、txB, nt lnth);/,B矩阵赋值vid PrintMatix(T *Mti, intMarxSize);打印矩阵oid Stassen(i , T *Matrix, T *MtriB, T *MariC);/Stassn算法实现;tmlatypename voi Strasen_css::DD(T* MatxA, T* Matrix, T* arixRsult, in MatrxSiz)r (nt =0; MaxS; i+)r (int= ; j void assenclas:SU(T* Mtrx, * MatrixB, T* MatrixResul, int MatiSze)o (

3、n i = 0; i Marxize; i+)for (int j = ; MatixSize; j+)MatResulj MtriAij -atrixij;temlatetypename voitrasen_cass:L(TMatrix,T* Matrix, T*MatrixRest, inMatriiz)for (int i 0; MatrSize; +)for(int j = 0; jMtiSize;j+)MariResultij = 0;for( k = 0; kMtrixSiz; k+)MaixRsult axuj MriAk* trixBkj;/+使用二维数组,申请动态内存措施申请

4、int *A; = ew in*desirearay_row;for (int i 0; deiraay_row; +)Ai= nw int desiecolm_size;释放for( it i 0; i yo_array_row;+)delete Ai;deee;/tmplatevid Straen_cls:tassn(int N, T*MatixA, T *MarixB, *tix)nt HalSiz = N / 2;nt newSie= N ;if (N64) /分治门槛,不不小于这个值时不再进行递归计算,而是采用常规矩阵计算措施MUL(atrixA,MatrixB, atrix, );

5、elsT* 11;T* 12;T* A21;T* A22;T* B11;* B1;T* 2;T* 22;* C11;T2;T* C21;* C;T* M1;T* M2;T*M3;T* M4;T*M5;T* M6;* ;* esult;T*BRlt;/kig1 diinsialinrbsed aray.A1 new neize;A12 =ew T wSze;A21 =ew*neSize;A22new T *nwSie;B1= ew T nSze;12 = new T *newSize;B2 newT*Size;B2 = new T *ewSz;C11 = nwT *nwSze;12 = new

6、T*newze;C21 new T *nSze;C22 =new TwSiz;M1 w T *ewSize;M2 =nwT *nwSz;3 = new T *eSize;M4= nw T*newSie;5= w T nwize;M= nwT *newSie;M7 = ne T *newize;AResu= newT*newize;BReslt newT *newSize;nt newLegth = Size;/makg that 1 dimisoal poitr bsd arry,a 2Dpointer aedarrayfr(int i = 0; i eSize; i+)A11i =ew Tn

7、eegth;A2i ewnewLent;A1i newTewLength;22i= eTewLenh;B1i = new newLenth;12 = eTnewenth;B2 newnwLngt;B22i = n eength;C11i = nw Tnewngh;C12i =e TneLengh;C1 = ewTnewLgth;C2 = ne nngh;M1i= ew Tneength;M2i = new Tneengt;M3i =ewTnewenth;M4i new TnewLenh;M5i =nw Tnewenth;6i neTnewLengt;M7 nw TneLngth;AReulti

8、= ew TnwLenth;BRsulti =ewTnLengt;splittnginputries,io 4 submarice e (int i = 0; i N 2; i+)for (int = 0;j N / 2; j+)A11ij=Marixij;A12ij arixij +N / ;A21i MatrixAi+ N /2j;2j= MatriAi +N/ 2j+ N 2;B11i= atrixBij;B12i =Mtriij N /2;B21ij = atrxBi+ N / 2;B22j MatixBi+N / + N / 2;/heewe calclate M1.M7 matri

9、ces ./MADD(A11, A22, AReult, HalfSiz);ADD(B11, B22, BRest,HlfSze); /p5(a+d)*(e+h)Srsen(HalfSize, ARsult, Best,M1); /now thatwe eed to uliply this , w s hestrassen itsel . /AD(A,A,Resul,HafSie); /M2(A21+A2)11 p3(cd)eStassen(HalfSize,Rslt, B, M2); /Ml(ARsult,B11,M2);/M3UB(12, B2, BRlt, alfSize); /3=(B1-B22) p1=a*(f-h)Stasn(Halfize,,BRult,M3); /M(A1,BResult,3);/M4SUB(B1, B1, BReslt,HafSe); /4=A22(B21B1) 4=d*(g-)Strse(HafSie, A2, Besult, M4);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号