Producto de cadena de matriz booleana dispersa rápida

13

Entonces, tengo alrededor de 100-200 matrices booleanas cuadradas muy dispersas con longitud lateral ~ varias docenas, y necesito calcular su producto. Sé que si los multiplico en serie, el producto generalmente se mantendrá escaso en cada paso.

¿Hay algún algoritmo de producto de cadena de matriz que funcione particularmente rápido en este caso?

En un nivel superior, el problema es calcular la composición de una serie de asignaciones de uno a muchos en un gráfico razonablemente pequeño (funciones de transición de un NFA), donde la mayoría de los elementos se asignan a no más de 0-3.

(tenga en cuenta que este no es el problema habitual del "producto de la cadena de matriz", porque todas las matrices son del mismo tamaño y no tengo que elegir el paréntesis óptimo)

jkff
fuente
55
en realidad, el orden en que los multiplique podría afectar la escasez de resultados intermedios, por lo que aún podría ser un problema importante en cualquier algoritmo tan rápido.
Joshua Grochow
de su otra pregunta, parece que está usando operaciones de Y / O semirremolque 0/1 , no suma / multiplicación (como parece indicar el problema), aclare esto en la pregunta
vzn

Respuestas:

10

Esto fue demasiado largo para ser un comentario: me pregunto si esas matrices tienen una estructura que las hace comportarse de manera diferente a las matrices aleatorias. Los productos de matrices dispersas aleatorias van a cero o se vuelven no dispersos rápidamente.

Aquí hay un experimento simple: tome 200 matrices binarias aleatorias de 50x50, y trace el número de no ceros en función del número de matrices multiplicadas. Los gráficos a continuación muestran la desviación estándar de más de 2000 carreras. El primer gráfico es para 2% de dispersión, el segundo gráfico es para 3%


(fuente: yaroslavvb.com ) (fuente: yaroslavvb.com )

Esto tomó 3 minutos en mi computadora portátil usando la multiplicación de matriz estándar

Yaroslav Bulatov
fuente