Изменения

Перейти к: навигация, поиск

Метод четырёх русских для умножения матриц

50 байт убрано, 06:20, 21 декабря 2011
Нет описания правки
// Предподсчёт скалярных произведений
// Пусть precalc[Ii][Jj] - "скалярное произведение для битовых представлений" чисел I i и Jj int k = ceil(log n); //округление вверх for I i := 0 to 2^(1 << k ) - 1 do for J j := 0 to 2^(1 << k ) - 1 do { Считаем скалярное произведение двоичных векторов, заданных двоичным представлением чисел I и J. int scalmul = 0; for pos := 0 to k - 1 if (((1 << pos) & i) != 0 && ((1 << pos) & j) != 0) { scalmul = (scalmul + 1) % 2; } Записываем результат в матрицу precalc.[i][j] = scalmul;
}
// Создание сжатых матриц
}
//Перемножение полученных матриц
for I i := 0 to n - 1 do for J j := 0 to n - 1 do { Считаем произведение I строки A' и J столбца B', пользуясь int curans = 0; for pos := 0 to m - 1 { curans = (curans + precalc.[anew[i][pos]][bnew[pos][j]]) % 2; Записываем полученное значение в матрицу ответа.} ans[i][j] = curans;
</code>
Анонимный участник

Навигация