Requisito de memoria para la multiplicación rápida de matrices


12

Supongamos que queremos multiplicar matrices. El algoritmo de multiplicación de matriz lenta se ejecuta en el tiempo O ( n 3 ) y usa memoria O ( n 2 ) . La multiplicación matricial más rápida se ejecuta en el tiempo n ω + o ( 1 ) , donde ω es la constante de álgebra lineal, pero ¿qué se sabe sobre la complejidad de su memoria?n×nO(n3)O(n2)nω+o(1)ω

Parece que a priori es posible que la multiplicación rápida de matrices consuma memoria. ¿Hay alguna garantía de que se pueda hacer en la memoria O ( n 2 ) ? ¿Es el caso que los algoritmos de multiplicación de matrices conocidos actualmente usan memoria O ( n 2 ) ?nωO(n2)O(n2)

(En realidad, estoy interesado en la multiplicación de matrices rectangulares, pero supongo que la respuesta sería la misma en ese caso que para el caso cuadrado, y el caso cuadrado se estudia mejor).

Respuestas:


16

El uso del espacio es como máximo para todos los algoritmos similares a Strassen (es decir, aquellos basados ​​en el límite superior del rango de multiplicación de la matriz algebraicamente). Ver Complejidad espacial del algoritmo Coppersmith – WinogradO(n2)

Sin embargo, me di cuenta en mi respuesta anterior que no explicaba por qué el uso del espacio es ... así que aquí va algo ondulado. Considere lo que hace un algoritmo similar a Strassen. Comienza a partir de un algoritmo fijo para la multiplicación de matrices K × K que utiliza multiplicaciones de K c para alguna constante c < 3 . En particular, este algoritmo (sea lo que sea) se puede escribir WLOG para que:O(n2)K×KKcc<3

  1. Calcula diferentes matrices L 1 , ... , L K c que multiplican las entradas de la primera matriz A por varios escalares y K c matrices R 1 , ... , R K c de la segunda matriz B de una forma similar,KcL1,,LKcAKcR1,,RKcB

  2. Multiplica esas combinaciones lineales , entoncesLiRi

  3. Se multiplica las entradas de por diversos escalares, entonces agrega todas estas matrices hasta entrywise para obtener A B .LiRiAB

(Este es un algoritmo llamado "bilineal", pero resulta que cada algoritmo de multiplicación matricial "algebraico" se puede escribir de esta manera.) Para cada , este algoritmo solo tiene que almacenar el producto actual L iR i y el valor actual de A B (inicialmente establecido en todos los ceros) en la memoria en cualquier punto dado, por lo que el uso del espacio es O ( K 2 ) .i=1,,KcLiRiABO(K2)

Dado este algoritmo finito, se extiende a las matrices arbitrarias , al dividir las matrices grandes en bloques K × K de dimensiones K - 1 × K - 1 , aplicando el algoritmo K × K finito al bloque matrices, y recursivamente llamando al algoritmo cada vez que necesita multiplicar dos bloques. En cada nivel de recursión, necesitamos mantener solo elementos de campo O ( K 2 ) en la memoria (almacenar O ( 1 )K×KK×KK1×K1K×KO(K2)O(1)diferentes matrices ). Suponiendo que el uso de espacio para K - 1 × K - 1 multiplicación de matriz es S ( - 1 ) , el uso de espacio de este algoritmo recursivo es S ( ) S ( - 1 ) + O ( K 2 ) , que para S ( 1 ) = 2 K 2K×KK1×K1S(1)S()S(1)+O(K2)S(1)=2K2resuelve a .S()O(K2)


Para cualquier algoritmo de estilo Strassen, esto me parece correcto. Pero Coppersmith-Winograd también demostró que llegar a realmente requiere una secuencia infinita de algoritmos de estilo Strassen, cada uno de los cuales se acerca cada vez más al verdadero exponente. De hecho, tanto los algoritmos de estilo CW como los algoritmos de estilo CU proporcionan tales secuencias (aunque no se acerquen a ω , hasta donde sabemos). Sobre los racionales, es posible que las constantes utilizadas en tal secuencia crezcan muy rápidamente, de modo que "el" algoritmo n ω pueda terminar usando el espacio ω ( n 2 ) . nωωnωω(n2)
Joshua Grochow

1
O(nω+δ)O(n2)δ>0

f(i)n2i=0,...,knω+o(1)n2+o(1)

kfkf1fkkn2+o(1)

nkknf(k(n))=no(1)k(n)nnω+o(1)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.