La aplicación directa de la definición matemática de multiplicación de matrices da como resultado un algoritmo que requiere n 3 operaciones de campo para multiplicar dos matrices n × n sobre ese campo ( Θ( n 3 ) en notación O mayúscula ). Sorprendentemente, existen algoritmos que proporcionan mejores tiempos de ejecución que este sencillo "algoritmo de libro de texto". El primero en descubrirse fue el algoritmo de Strassen , ideado por Volker Strassen en 1969 y al que a menudo se hace referencia como "multiplicación rápida de matrices". [1] El número óptimo de operaciones de campo necesarias para multiplicar dos matrices cuadradas n × n hasta factores constantes aún se desconoce. Esta es una importante pregunta abierta en la informática teórica .
A partir de enero de 2024 [actualizar], el mejor límite de la complejidad asintótica de un algoritmo de multiplicación de matrices es O( n 2,371552 ) . [2] [3] Sin embargo, esta y otras mejoras similares a Strassen no se utilizan en la práctica, porque son algoritmos galácticos : el coeficiente constante oculto por la notación O grande es tan grande que solo valen la pena para matrices que son demasiado grandes para manejarlas en las computadoras actuales. [4] [5]
Algoritmos simples
Si A , B son matrices n × n sobre un campo, entonces su producto AB también es una matriz n × n sobre ese campo, definida por entrada como
Algoritmo del libro escolar
El método más simple para calcular el producto de dos matrices A y B de n × n es calcular las expresiones aritméticas que surgen de la definición de multiplicación de matrices. En pseudocódigo:
entrada A y B , ambas matrices n por n inicializan C para que sea una matriz n por n de todos ceros para i de 1 a n : para j de 1 a n : para k de 1 a n : C [ i ][ j ] = C [ i ][ j ] + A [ i ][ k ]* B [ k ][ j ] salida C (como A*B)
Este algoritmo requiere, en el peor de los casos , multiplicaciones de escalares y sumas para calcular el producto de dos matrices cuadradas n × n . Por lo tanto , su complejidad computacional es , en un modelo de cálculo donde las operaciones de campo (suma y multiplicación) toman un tiempo constante (en la práctica, este es el caso de los números de punto flotante , pero no necesariamente de los enteros).
Algoritmo de Strassen
El algoritmo de Strassen mejora la multiplicación de matrices ingenua mediante un enfoque de divide y vencerás . La observación clave es que la multiplicación de dos matrices de 2 × 2 se puede realizar con solo 7 multiplicaciones, en lugar de las 8 habituales (a expensas de 11 operaciones de suma y resta adicionales). Esto significa que, al tratar las matrices de entrada n × n como matrices de bloque 2 × 2 , la tarea de multiplicar matrices n × n se puede reducir a 7 subproblemas de multiplicación de matrices n/2 × n/2 . La aplicación recursiva de esto da como resultado un algoritmo que necesita operaciones de campo.
A diferencia de los algoritmos con una complejidad asintótica más rápida, el algoritmo de Strassen se utiliza en la práctica. La estabilidad numérica se reduce en comparación con el algoritmo ingenuo, [6] pero es más rápido en casos donde n > 100 o más [7] y aparece en varias bibliotecas, como BLAS . [8] Los algoritmos rápidos de multiplicación de matrices no pueden lograr estabilidad por componentes , pero se puede demostrar que algunos exhiben estabilidad por normas . [9] Es muy útil para matrices grandes sobre dominios exactos como campos finitos , donde la estabilidad numérica no es un problema.
Exponente de multiplicación de matrices
El exponente de multiplicación de matrices , que se suele denotar como ω , es el número real más pequeño para el cual dos matrices cualesquiera sobre un cuerpo pueden multiplicarse entre sí mediante operaciones de cuerpo. Esta notación se utiliza habitualmente en la investigación de algoritmos , de modo que los algoritmos que utilizan la multiplicación de matrices como subrutina tienen límites en el tiempo de ejecución que pueden actualizarse a medida que mejoran los límites de ω .
Usando un límite inferior ingenuo y una multiplicación de matrices de libro para el límite superior, uno puede concluir directamente que 2 ≤ ω ≤ 3 . Si ω = 2 es una pregunta abierta importante en la ciencia informática teórica , y hay una línea de investigación que desarrolla algoritmos de multiplicación de matrices para obtener límites mejorados en ω .
Todos los algoritmos recientes en esta línea de investigación utilizan el método láser , una generalización del algoritmo Coppersmith-Winograd, que fue dado por Don Coppersmith y Shmuel Winograd en 1990 y fue el mejor algoritmo de multiplicación de matrices hasta 2010. [24] La idea conceptual de estos algoritmos es similar al algoritmo de Strassen: se idea una forma de multiplicar dos k × k -matrices con menos de k 3 multiplicaciones, y esta técnica se aplica de forma recursiva. El método láser tiene limitaciones en su potencia, Ambainis , Filmus y Le Gall demuestran que no se puede utilizar para mostrar que ω < 2,3725 analizando potencias tensoriales cada vez más altas de una cierta identidad de Coppersmith y Winograd y tampoco ω < 2,3078 para una amplia clase de variantes de este enfoque. [25] En 2022, Duan, Wu y Zhou idearon una variante que rompe la primera de las dos barreras con ω < 2,37188 , [23] lo hacen identificando una fuente de optimización potencial en el método láser denominada pérdida de combinación , que compensan utilizando una versión asimétrica del método hash en el algoritmo Coppersmith–Winograd.
Reformulación de la teoría de grupos de algoritmos de multiplicación de matrices
Hay un límite inferior trivial de . Dado que cualquier algoritmo para multiplicar dos n × n -matrices tiene que procesar las 2 n 2 entradas, hay un límite inferior asintótico trivial de Ω( n 2 ) operaciones para cualquier algoritmo de multiplicación de matrices. Por lo tanto . Se desconoce si . El límite inferior más conocido para la complejidad de la multiplicación de matrices es Ω( n 2 log( n )) , para circuitos aritméticos de coeficientes acotados sobre los números reales o complejos, y se debe a Ran Raz . [30]
El exponente ω se define como un punto límite , en el sentido de que es el ínfimo del exponente en todos los algoritmos de multiplicación de matrices. Se sabe que este punto límite no se alcanza. En otras palabras, bajo el modelo de cálculo típicamente estudiado, no existe ningún algoritmo de multiplicación de matrices que utilice precisamente O( n ω ) operaciones; debe haber un factor adicional de n o(1) . [14]
Multiplicación de matrices rectangulares
También se aplican técnicas similares a la multiplicación de matrices rectangulares. El objeto central de estudio es , que es el más pequeño tal que se puede multiplicar una matriz de tamaño con una matriz de tamaño con operaciones aritméticas. Un resultado en complejidad algebraica establece que multiplicar matrices de tamaño y requiere el mismo número de operaciones aritméticas que multiplicar matrices de tamaño y y de tamaño y , por lo que esto abarca la complejidad de la multiplicación de matrices rectangulares. [31] Esto generaliza el exponente de multiplicación de matrices cuadradas, ya que .
Como la salida del problema de multiplicación de matrices es tamaño , tenemos para todos los valores de . Si uno puede probar para algunos valores de entre 0 y 1 que , entonces tal resultado muestra que para aquellos . El k más grande tal que se conoce como el exponente dual de multiplicación de matrices , generalmente denotado α . α se conoce como el " dual " porque mostrar que es equivalente a mostrar que . Al igual que el exponente de multiplicación de matrices, el exponente dual de multiplicación de matrices aparece a veces en la complejidad de algoritmos en álgebra lineal numérica y optimización. [32]
El primer límite de α fue creado por Coppersmith en 1982, quien demostró que . [33] El mejor límite revisado por pares actual de α es , dado por Williams, Xu, Xu y Zhou. [2]
Inversión de matrices, determinante y eliminación gaussiana
En su artículo de 1969, donde demostró la complejidad del cálculo de matrices, Strassen demostró también que la inversión de matrices , el determinante y la eliminación gaussiana tienen, hasta una constante multiplicativa, la misma complejidad computacional que la multiplicación de matrices. La prueba no hace ninguna suposición sobre la multiplicación de matrices que se utiliza, excepto que su complejidad es para algunos
El punto de partida de la demostración de Strassen es la multiplicación de matrices por bloques . En concreto, una matriz de dimensión par 2 n × 2 n puede dividirse en cuatro bloques n × n
Bajo esta forma, su inversa es
siempre que A y sean invertibles.
Así, la inversa de una matriz 2 n × 2 n se puede calcular con dos inversiones, seis multiplicaciones y cuatro adiciones o inversas aditivas de matrices n × n . De ello se deduce que, denotando respectivamente por I ( n ) , M ( n ) y A ( n ) = n 2 el número de operaciones necesarias para invertir, multiplicar y sumar matrices n × n , se tiene
Si se puede aplicar esta fórmula recursivamente:
Si uno finalmente consigue
para alguna constante d .
Para matrices cuya dimensión no es una potencia de dos, se alcanza la misma complejidad aumentando la dimensión de la matriz a una potencia de dos, rellenando la matriz con filas y columnas cuyas entradas son 1 en la diagonal y 0 en el resto.
Esto demuestra la complejidad supuesta para matrices tales que todas las submatrices que deben invertirse son, de hecho, invertibles. Esta complejidad queda así demostrada para casi todas las matrices, ya que una matriz con elementos elegidos aleatoriamente es invertible con probabilidad uno.
El mismo argumento se aplica a la descomposición LU , ya que, si la matriz A es invertible, la igualdad
define una descomposición LU en bloque que puede aplicarse recursivamente a y para obtener eventualmente una verdadera descomposición LU de la matriz original.
El argumento se aplica también al determinante, ya que resulta de la descomposición LU en bloques que
Minimizar el número de multiplicaciones
Relacionado con el problema de minimizar el número de operaciones aritméticas está el de minimizar el número de multiplicaciones, que es típicamente una operación más costosa que la suma. Un algoritmo para la multiplicación de matrices necesariamente debe usar solo operaciones de multiplicación, pero estos algoritmos son poco prácticos. Mejorando las multiplicaciones ingenuas para la multiplicación de libros escolares, las matrices en se pueden hacer con 47 multiplicaciones, [34] la multiplicación de matrices sobre un anillo conmutativo se puede hacer en 21 multiplicaciones [35] [36] (23 si no es conmutativa [37] ). El límite inferior de las multiplicaciones necesarias es 2 mn +2 n − m −2 (multiplicación de matrices n × m con matrices m × n utilizando el método de sustitución, m ⩾ n ⩾3), lo que significa que el caso n = 3 requiere al menos 19 multiplicaciones y n = 4 al menos 34. [38] Para n = 2, 7 multiplicaciones óptimas, 15 adiciones son mínimas, en comparación con solo 4 adiciones para 8 multiplicaciones. [39] [40]
^ ab Volker Strassen (agosto de 1969). "La eliminación gaussiana no es óptima". Matemática numérica . 13 (4): 354–356. doi :10.1007/BF02165411. S2CID 121656251.
^ abc Vassilevska Williams, Virginia; Xu, Yinzhan; Xu, Zixuan; Zhou, Renfei. Nuevos límites para la multiplicación de matrices: de alfa a omega . Actas del Simposio anual ACM-SIAM de 2024 sobre algoritmos discretos (SODA). págs. 3792–3835. arXiv : 2307.07970 . doi :10.1137/1.9781611977912.134.
^ Nadis, Steve (7 de marzo de 2024). «Un nuevo avance acerca la multiplicación de matrices al ideal» . Consultado el 9 de marzo de 2024 .
^ Iliopoulos, Costas S. (1989). "Límites de complejidad en el peor de los casos en algoritmos para calcular la estructura canónica de grupos abelianos finitos y las formas normales de Hermite y Smith de una matriz entera" (PDF) . SIAM Journal on Computing . 18 (4): 658–669. CiteSeerX 10.1.1.531.9309 . doi :10.1137/0218045. MR 1004789. Archivado desde el original (PDF) el 2014-03-05 . Consultado el 2015-01-16 . El algoritmo Coppersmith–Winograd no es práctico, debido a la constante oculta muy grande en el límite superior del número de multiplicaciones requeridas.
^ ab Robinson, Sara (noviembre de 2005). "Hacia un algoritmo óptimo para la multiplicación de matrices" (PDF) . SIAM News . 38 (9). Incluso si alguien logra demostrar una de las conjeturas (demostrando así que ω = 2) , es poco probable que el enfoque del producto en corona sea aplicable a los grandes problemas de matrices que surgen en la práctica. [...] las matrices de entrada deben ser astronómicamente grandes para que la diferencia en el tiempo sea evidente.
^ Miller, Webb (1975). "Complejidad computacional y estabilidad numérica". SIAM News . 4 (2): 97–107. CiteSeerX 10.1.1.148.9947 . doi :10.1137/0204009.
^ Skiena, Steven (2012). "Ordenamiento y búsqueda". Manual de diseño de algoritmos . Springer. págs. 45-46, 401-403. doi :10.1007/978-1-84800-070-4_4. ISBN978-1-84800-069-8.
^ Ballard, Grey; Benson, Austin R.; Druinsky, Alex; Lipshitz, Benjamin; Schwartz, Oded (2016). "Mejora de la estabilidad numérica de la multiplicación rápida de matrices". Revista SIAM sobre análisis de matrices y aplicaciones . 37 (4): 1382–1418. arXiv : 1507.00687 . doi :10.1137/15M1032168. S2CID 2853388.
^ Victor Yakovlevich Pan (octubre de 1978). "El algoritmo de Strassen no es óptimo: técnica trilineal de agregación, unión y cancelación para construir algoritmos rápidos para operaciones matriciales". Proc. 19th FOCS . págs. 166–176. doi :10.1109/SFCS.1978.34. S2CID 14348408.
^ Darío Andrea Bini; Milvio Capovani; Francisco Romani; Grazia Lotti (junio de 1979). " O ( n 2.7799 ) {\displaystyle O(n^{2.7799})} complejidad para n × n {\displaystyle n\times n} multiplicación de matrices aproximada". Cartas de procesamiento de información . 8 (5): 234–235. doi :10.1016/0020-0190(79)90113-3.
^ A. Schönhage (1981). "Multiplicación de matrices parciales y totales". Revista SIAM de Informática . 10 (3): 434–455. doi :10.1137/0210032.
^ Francesco Romani (1982). "Algunas propiedades de sumas disjuntas de tensores relacionadas con la multiplicación de matrices". Revista SIAM de Computación . 11 (2): 263–267. doi :10.1137/0211020.
^ ab D. Coppersmith; S. Winograd (1981). "Sobre la complejidad asintótica de la multiplicación de matrices". Proc. 22.º Simposio Anual sobre Fundamentos de la Ciencia de la Computación (FOCS) . págs. 82–90. doi :10.1109/SFCS.1981.27. S2CID 206558664.
^ Volker Strassen (octubre de 1986). "El espectro asintótico de los tensores y el exponente de la multiplicación de matrices". Proc. 27th Ann. Symp. on Foundation of Computer Science (FOCS) . págs. 49-54. doi :10.1109/SFCS.1986.52. ISBN0-8186-0740-8.S2CID 15077423 .
^ D. Coppersmith; S. Winograd (marzo de 1990). "Multiplicación de matrices mediante progresiones aritméticas". Journal of Symbolic Computation . 9 (3): 251–280. doi : 10.1016/S0747-7171(08)80013-2 .
^ Stothers, Andrew James (2010). Sobre la complejidad de la multiplicación de matrices (tesis doctoral). Universidad de Edimburgo.
^ Williams, Virginia Vassilevska . Multiplicación de matrices en tiempo O ( n 2.373 ) {\displaystyle O(n^{2.373})} (PDF) (Informe técnico). Universidad de Stanford.
^ Le Gall, François (2014). "Teoría de la complejidad algebraica y multiplicación de matrices". En Katsusuke Nabeshima (ed.). Actas del 39.° Simposio Internacional sobre Computación Simbólica y Algebraica - ISSAC '14 . págs. 296–303. arXiv : 1401.7714 . Bibcode :2014arXiv1401.7714L. doi :10.1145/2608628.2627493. ISBN:978-1-4503-2501-1. Número de identificación del sujeto 2597483.
^ Alman, Josh; Williams, Virginia Vassilevska (2020). "Un método láser refinado y una multiplicación de matrices más rápida". 32.º Simposio anual ACM-SIAM sobre algoritmos discretos (SODA 2021). arXiv : 2010.05846 .
^ Hartnett, Kevin (23 de marzo de 2021). "La multiplicación de matrices se acerca cada vez más a la meta mítica". Revista Quanta . Consultado el 1 de abril de 2021 .
^ ab Duan, Ran; Wu, Hongxun; Zhou, Renfei (2022). "Multiplicación de matrices más rápida mediante hash asimétrico". arXiv : 2210.10173 [cs.DS].
^ Coppersmith, Don; Winograd, Shmuel (1990). "Multiplicación de matrices mediante progresiones aritméticas" (PDF) . Journal of Symbolic Computation . 9 (3): 251. doi : 10.1016/S0747-7171(08)80013-2 .
^ Ambainis, Andris; Filmus, Yuval; Le Gall, François (14 de junio de 2015). "Multiplicación rápida de matrices". Actas del cuadragésimo séptimo simposio anual de la ACM sobre teoría de la computación . STOC '15. Portland, Oregón, EE. UU.: Association for Computing Machinery. págs. 585–593. arXiv : 1411.5414 . doi :10.1145/2746539.2746554. ISBN978-1-4503-3536-2.S2CID8332797 .
^ Cohn, H.; Kleinberg, R.; Szegedy, B.; Umans, C. (2005). "Algoritmos de teoría de grupos para la multiplicación de matrices". 46.º Simposio anual IEEE sobre fundamentos de la informática (FOCS'05). pág. 379. doi :10.1109/SFCS.2005.39. ISBN0-7695-2468-0. Número de identificación del sujeto 41278294.
^ Cohn, Henry; Umans, Chris (2003). "Un enfoque de teoría de grupos para la multiplicación rápida de matrices". Actas del 44.º Simposio anual IEEE sobre fundamentos de la informática, 11-14 de octubre de 2003. IEEE Computer Society. págs. 438-449. arXiv : math.GR/0307321 . doi :10.1109/SFCS.2003.1238217. ISBN .0-7695-2040-5. Número de identificación del sujeto 5890100.
^ ab Blasiak, J.; Cohn, H.; Church, T.; Grochow, J.; Naslund, E.; Sawin, W.; Umans, C. (2017). "Sobre los conjuntos de tapas y el enfoque de teoría de grupos para la multiplicación de matrices". Análisis discreto. pág. 1245. doi :10.19086/da.1245. S2CID 9687868.
^ Alon, N. ; Shpilka, A.; Umans, C. (abril de 2011). "Sobre los girasoles y la multiplicación de matrices". Coloquio electrónico sobre complejidad computacional . TR11-067.
^ Raz, Ran (2002). "Sobre la complejidad del producto matricial". Actas del trigésimo cuarto simposio anual de la ACM sobre teoría de la computación . págs. 144-151. doi :10.1145/509907.509932. ISBN1581134959.S2CID 9582328 .
^ Gall, Francois Le; Urrutia, Florent (1 de enero de 2018). Multiplicación de matrices rectangulares mejorada usando potencias del tensor de Coppersmith-Winograd. Actas. Sociedad de Matemáticas Industriales y Aplicadas. págs. 1029–1046. arXiv : 1708.05622 . doi :10.1137/1.9781611975031.67. ISBN .978-1-61197-503-1. S2CID 33396059 . Consultado el 23 de mayo de 2021 . {{cite book}}: |work=ignorado ( ayuda )
^ Cohen, Michael B.; Lee, Yin Tat; Song, Zhao (5 de enero de 2021). "Resolución de programas lineales en el tiempo de multiplicación de matrices actual". Revista de la ACM . 68 (1): 3:1–3:39. arXiv : 1810.07896 . doi :10.1145/3424305. ISSN 0004-5411. S2CID 231955576.
^ Coppersmith, D. (1 de agosto de 1982). "Multiplicación rápida de matrices rectangulares" . Revista SIAM de informática . 11 (3): 467–471. doi :10.1137/0211037. ISSN 0097-5397.
^ Ver Datos ampliados Fig. 1: Algoritmo para multiplicar matrices de 4 × 4 en aritmética modular ( Z 2 {\displaystyle \mathbb {Z} _{2}} )) con 47 multiplicaciones en Fawzi, A.; Balog, M.; Huang, A.; Hubert, T.; Romera-Paredes, B.; Barekatain, M.; Novikov, A.; r Ruiz, FJ; Schrittwieser, J.; Swirszcz, G.; Silver, D.; Hassabis, D.; Kohli, P. (2022). "Descubrimiento de algoritmos de multiplicación de matrices más rápidos con aprendizaje de refuerzo". Nature . 610 (7930): 47–53. Código Bibliográfico :2022Natur.610...47F. doi :10.1038/s41586-022-05172-4. PMC 9534758. PMID 36198780 .
^ Rosowski, Andreas (27 de julio de 2020). "Algoritmo matricial conmutativo rápido". arXiv : 1904.07683 .{{cite journal}}: Requiere citar revista |journal=( ayuda )
^ Makarov, OM (1986). "Un algoritmo para multiplicar matrices de 3 × 3". Zhurnal Vychislitel'noi Matematiki I Matematicheskoi Fiziki . 26 (2): 293–294 . Consultado el 5 de octubre de 2022 .
También en Makarov, OM (1986). "Un algoritmo para multiplicar matrices 3×3". Matemáticas computacionales y física matemática de la URSS . 26 : 179–180. doi :10.1016/0041-5553(86)90203-X.
^ Laderman, Julian D. (1976). "Un algoritmo no conmutativo para multiplicar matrices 3×3 usando 23 multiplicaciones". Boletín de la Sociedad Americana de Matemáticas . 82 (1): 126–128. doi : 10.1090/S0002-9904-1976-13988-2 . ISSN 0002-9904.
^ Bläser, Markus (febrero de 2003). "Sobre la complejidad de la multiplicación de matrices de pequeños formatos". Journal of Complexity . 19 (1): 43–60. doi : 10.1016/S0885-064X(02)00007-9 .
^ Winograd, S. (1971-10-01). "Sobre la multiplicación de matrices 2 × 2". Álgebra lineal y sus aplicaciones . 4 (4): 381–388. doi : 10.1016/0024-3795(71)90009-7 . ISSN 0024-3795.
^ L., Probert, R. (1973). Sobre la complejidad de la multiplicación de matrices. Universidad de Waterloo. OCLC 1124200063.{{cite book}}: CS1 maint: multiple names: authors list (link)
Enlaces externos
Otro catálogo de algoritmos rápidos de multiplicación de matrices
Fawzi, A.; Balog, M.; Huang, A.; Hubert, T.; Romera-Paredes, B.; Barekatain, M.; Novikov, A.; Ruiz, FJR; Schrittwieser, J.; Swirszcz, G.; Silver, D.; Hassabis, D.; Kohli, P. (2022). "Descubrimiento de algoritmos de multiplicación de matrices más rápidos con aprendizaje de refuerzo". Nature . 610 (7930): 47–53. Bibcode :2022Natur.610...47F. doi :10.1038/s41586-022-05172-4. PMC 9534758 . PMID 36198780.