所以,我想弄清楚 strassen 的矩阵乘法方法,我使用的是 C++,但它可以是任何语言。现在,它看起来像:
typedef vector<long int> ROW;
typedef vector<ROW> MATRIX;
void getQuad(const MATRIX& IN, MATRIX& OUT0, MATRIX& OUT1
MATRIX& OUT2, MATRIX& OUT3)
{ /*determine quadrants*/ }
void strassen(const MATRIX& A, const MATRIX& B, MATRIX& C
{
if (A.size() == 2 && A[0] == 2) //know that its 2x2, stop
{
// Get M1-M7 vars and set MATRIX C with them
}
else
{
/*
getQuad(...) returns the quadrants
___________
| X0 | X1 |
-----------
| X2 | X3 |
-----------
*/
MATRIX A0,A1,A2,A3;
getQuad(A,A0,A1,A2,A3);
MATRIX B0,B1,B2,B3;
getQuad(B,B0,B1,B2,B3);
}
}
我不确定接下来如何处理各个象限,即此时如何导出 M1-M7 矩阵。我想 M1-M7 矩阵(与基本情况下的原始数据类型相反)将以与基本情况相同的方式使用。我只是不确定这里的解散会是什么样子。
我知道阅读别人的代码有点困难,但希望它已经清楚了。
我确信我的基本情况是正确的,并且我确信我正确地拆分了矩阵,我只是不清楚下一步该去哪里。也许我写错了我的算法。