我正在尝试在 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) 添加到运行时,因为每次递归调用都会调用它。
似乎在恒定时间内执行此操作的方法是创建指向四个子矩阵的指针,而不是复制值,但我很难弄清楚如何创建这些指针。任何帮助,将不胜感激。