Итак, я пытаюсь выяснить метод Штрассена для умножения матриц, я использую 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 (в отличие от примитивных типов данных в базовом случае) будут использоваться так же, как базовый вариант.Я просто не уверен, как будет выглядеть распутывание здесь.
Я знаю, что немного трудно читать чужой код, но, надеюсь, он был понятен.
Я уверен, что мой базовый случай верен, и я уверен, что я разделяюМатрица правильно, мне просто непонятно, куда идти дальше.Возможно, я неправильно написал свой алгоритм.