Вот это да. Зачем нужен нег? Я не видел, что вы делаете какие-либо предложения.

ался реализоватьАлгоритм Штрассена для умножения матриц с C ++, но результат не тот, что я ожидал. Как вы можете видеть, strassen всегда занимает больше времени, чем стандартная реализация, и только с измерением от степени 2 быстрее, чем стандартная реализация. Что пошло не так?

matrix mult_strassen(matrix a, matrix b) {
if (a.dim() <= cut)
    return mult_std(a, b);

matrix a11 = get_part(0, 0, a);
matrix a12 = get_part(0, 1, a);
matrix a21 = get_part(1, 0, a);
matrix a22 = get_part(1, 1, a);

matrix b11 = get_part(0, 0, b);
matrix b12 = get_part(0, 1, b);
matrix b21 = get_part(1, 0, b);
matrix b22 = get_part(1, 1, b);

matrix m1 = mult_strassen(a11 + a22, b11 + b22); 
matrix m2 = mult_strassen(a21 + a22, b11);
matrix m3 = mult_strassen(a11, b12 - b22);
matrix m4 = mult_strassen(a22, b21 - b11);
matrix m5 = mult_strassen(a11 + a12, b22);
matrix m6 = mult_strassen(a21 - a11, b11 + b12);
matrix m7 = mult_strassen(a12 - a22, b21 + b22);

matrix c(a.dim(), false, true);
set_part(0, 0, &c, m1 + m4 - m5 + m7);
set_part(0, 1, &c, m3 + m5);
set_part(1, 0, &c, m2 + m4);
set_part(1, 1, &c, m1 - m2 + m3 + m6);

return c; 
}

ПРОГРАММА
matrix.hhttp://pastebin.com/TYFYCTY7
matrix.cpphttp://pastebin.com/wYADLJ8Y
main.cpphttp://pastebin.com/48BSqGJr

g++ main.cpp matrix.cpp -o matrix -O3.

Ответы на вопрос(5)

Ваш ответ на вопрос