我想在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