Я реализовал следующий код для алгоритма Штрассена
http://www.sanfoundry.com/java-program-strassen-algorithm/.
Он работает для большинства матриц, включая матрицы 2×2 и 4×4, но не работает для матриц 3×3. Есть идеи, почему и как я могу это исправить?
Посмотрите, как работает Штрассен. Это работает, разделяй и властвуй. Вы не опубликовали свой код, но это, вероятно, связано с попыткой разделить матрицу 3×3 на 4 подматрицы, что невозможно сделать. Вы можете заполнить 3×3 нулями, чтобы создать матрицу с размерами, которые можно разделить, или просто используйте базовую матрицу мульт.
Кроме того, Strassen и рекурсивные MM-алгоритмы нуждаются в базовом случае, в котором речь идет о умножении регулярных матриц, поскольку Strassen полезен только для больших матриц. Зависит от вашей системы, но моему ноутбуку нужны матрицы размером больше 256×256, чтобы Штрассен мог видеть улучшение.
Других решений пока нет …