我想在C++中實現Strassen的矩陣乘法算法,並且我想要找到一種方法將兩個矩陣分成四個部分,每個部分在不同的時間。這是當前的方式,我這樣做:在同一時間內「分割」一個矩陣
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
A11[i][j] = a[i][j];
A12[i][j] = a[i][j+n];
A21[i][j] = a[i+n][j];
A22[i][j] = a[i+n][j+n];
B11[i][j] = b[i][j];
B12[i][j] = b[i][j+n];
B21[i][j] = b[i+n][j];
B22[i][j] = b[i+n][j+n];
}
}
這種做法顯然是爲O(n^2),並增加了N^2 *的log(n)的運行時間,因爲它是所謂的每個遞歸呼叫。
似乎在常量時間這樣做的方式是創建指向四個子矩陣的指針,而不是複製值,但我很難找出如何創建這些指針。任何幫助,將不勝感激。
你的源矩陣的大小是2 * n嗎? – Pavel