¿Cuáles son los algoritmos más eficientes en la práctica para multiplicar dos matrices booleanas muy dispersas (digamos, N = 200 y solo hay unos 100-200 elementos distintos de cero)?
En realidad, tengo la ventaja de que cuando multiplico A por B, las B están predefinidas y puedo hacer un preprocesamiento complejo arbitrario en ellas. También sé que los resultados de los productos son siempre tan escasos como las matrices originales.
El algoritmo "bastante ingenuo" (escaneo A por filas; por cada 1 bit de la fila A, O el resultado con la fila correspondiente de B) resulta muy eficiente y requiere solo un par de miles de instrucciones de la CPU para calcular un solo producto , por lo que no será fácil superarlo, y solo es superable por un factor constante (porque hay cientos de un bit en el resultado). Pero no estoy perdiendo la esperanza y pidiendo ayuda a la comunidad :)