【发布时间】:2018-06-09 02:31:11
【问题描述】:
所以,我正在尝试找出 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 矩阵(与基本情况下的原始数据类型相反)将以与基本情况相同的方式使用。我只是不确定这里的解散会是什么样子。
我知道阅读别人的代码有点困难,但希望它已经说清楚了。
我确信我的基本情况是正确的,并且我确信我正确地拆分了矩阵,我只是不清楚下一步该去哪里。也许我的算法写错了。
【问题讨论】:
标签: c++ algorithm computer-science matrix-multiplication strassen