問題是,速度非常慢,可怕的慢,即使在小n下,例如:當n = 1024時,一定有什麼問題,有人呢?使用分而治之的矩陣乘法
無論何時函數調用,我都沒有創建新的矩陣C,當基本情況發生時,我將新結果添加到存儲在原始矩陣C中的先前結果。
int **matA,**matB,**matC;
void matmul_div_rec(int Arow,int Acol,int Brow,int Bcol,int n) {
if(n==1)
{
matC[Arow][Bcol]+=matA[Arow][Acol]*matB[Brow][Bcol];
}
else
{
matmul_div_rec(Arow+0,Acol+0,Brow+0,Bcol+0,n/2);
matmul_div_rec(Arow+0,Acol+n/2,Brow+n/2,Bcol+0,n/2);
matmul_div_rec(Arow+0,Acol+0,Brow+0,Bcol+n/2,n/2);
matmul_div_rec(Arow+0,Acol+n/2,Brow+n/2,Bcol+n/2,n/2);
matmul_div_rec(Arow+n/2,Acol+0,Brow+0,Bcol+0,n/2);
matmul_div_rec(Arow+n/2,Acol+n/2,Brow+n/2,Bcol+0,n/2);
matmul_div_rec(Arow+n/2,Acol+0,Brow+0,Bcol+n/2,n/2);
matmul_div_rec(Arow+n/2,Acol+n/2,Brow+n/2,Bcol+n/2,n/2);
}
return; }
int main()
{
matmul_div_rec(0,0,0,0,n); //n must be the power of 2
}
鑑於矩陣的大小,我猜測它們是稀疏矩陣(大多爲零)。如果你這樣對待他們,你可以節省大量的時間和空間。 – doron
閱讀有關strassen乘法矩陣的方法,https://stackoverflow.com/questions/4846938/divide-and-conquer-matrix-multiplication http://www.geeksforgeeks.org/strassens-matrix-multiplication/ http:/ /www.geeksforgeeks.org/strassens-matrix-multiplication/ – EsmaeelE
請參閱https://stackoverflow.com/questions/12922031/recursive-matrix-multiplication –