Diferencia entre revisiones de «Algoritmo de Strassen»

De Wikipedia, la enciclopedia libre
Contenido eliminado Contenido añadido
Sin resumen de edición
m Revertidos los cambios de 190.25.146.29 (disc.) a la última edición de AVBOT
Línea 1: Línea 1:
En la disciplina [[Matemáticas|matemática]] del [[álgebra lineal]], el [[algoritmo]] de Strassen, llamado así por [[Volker Strassen]], es un algoritmo usado para la [[multiplicación de matrices]]. Es asintóticamente más rápido que el algoritmo de multiplicación de matrices estándar, pero más lento que el algoritmo más rápido conocido, y es útil en la práctica para matrices grandes.
En la disciplina [[Matemáticas|matemática]] del [[álgebra lineal]], el [[algoritmo]] de Strassen, llamado así por [[Volker Strassen]], es un algoritmo usado para la [[multiplicación de matrices]]. Es asintóticamente más rápido que el algoritmo de multiplicación de matrices estándar, pero más lento que el algoritmo más rápido conocido, y es útil en la práctica para matrices grandes.


== Historia ==
== Historia ==


[[Volker Strassen]] publicó el algoritmo de Strassen en 1969. Pese a que su algoritmo es sólo ligeramente más rápido que el algoritmo estándar para la multiplicación de matrices, fue el primero en señalar que el enfoque estándar no es óptimo. Su articulo comenzó la búsqueda de algoritmos aún más rápidos, como el complejo algoritmo de [[Coppersmith–Winograd]] de [[Shmuel Winograd]] en 1980 (que utiliza 7 maultiplicaciones binarias, pero utiliza 15 sumas binarias en lugar de las 18 del algoritmo de Strassen), publicado en 1987.
[[Volker Strassen]] publicó el algoritmo de Strassen en 1969. Pese a que su algoritmo es sólo ligeramente más rápido que el algoritmo estándar para la multiplicación de matrices, fue el primero en señalar que el enfoque estándar no es óptimo. Su articulo comenzó la búsqueda de algoritmos aún más rápidos, como el complejo algoritmo de [[Coppersmith–Winograd]] de [[Shmuel Winograd]] en 1980 (que utiliza 7 multiplicaciones binarias, pero utiliza 15 sumas binarias en lugar de las 18 del algoritmo de Strassen), publicado en 1987.


== Algoritmo ==
== Algoritmo ==

Revisión del 14:16 10 mar 2010

En la disciplina matemática del álgebra lineal, el algoritmo de Strassen, llamado así por Volker Strassen, es un algoritmo usado para la multiplicación de matrices. Es asintóticamente más rápido que el algoritmo de multiplicación de matrices estándar, pero más lento que el algoritmo más rápido conocido, y es útil en la práctica para matrices grandes.

Historia

Volker Strassen publicó el algoritmo de Strassen en 1969. Pese a que su algoritmo es sólo ligeramente más rápido que el algoritmo estándar para la multiplicación de matrices, fue el primero en señalar que el enfoque estándar no es óptimo. Su articulo comenzó la búsqueda de algoritmos aún más rápidos, como el complejo algoritmo de Coppersmith–Winograd de Shmuel Winograd en 1980 (que utiliza 7 multiplicaciones binarias, pero utiliza 15 sumas binarias en lugar de las 18 del algoritmo de Strassen), publicado en 1987.

Algoritmo

Sean A, B dos matrices cuadradas sobre un anillo R. Queremos calcular la matriz C como producto

Si las matrices A, B no son de tipo 2n x 2n habrá que rellenar lo que falta de filas y columnas con ceros.

Partimos A, B y C en matrices de igual tamaño de bloque

Con

Entonces

Con esta construcción, no hemos reducido el número de multiplicaciones. Todavía tenemos 8 multiplicaciones para calcular la matriz Ci,j , que es el mismo número de multiplicaciones que se necesitan cuando se usa el método estándar de multiplicación de matrices.

Ahora viene la parte importante. Definimos las matrices de nuevo

que luego se utilizan para expresar Ci,j en términos de Mk. Debido a nuestra definición de la Mk podemos eliminar una multiplicación de matrices y reducir el número de multiplicaciones a 7 (una multiplicación por cada Mk) y expresar Ci,j como

Iteramos n-veces el proceso de división hasta que las submatrices degeneran en números (elementos del anillo R).

Las implementaciones prácticas del algoritmo de Strassen, permiten cambiar a métodos estándar de multiplicación de matrices para submatrices lo suficientemente pequeñas, para las cuales son más eficientes. El punto a partir del cual el algoritmo de Strassen es más eficiente depende de la implementación específica y del hardware. Se ha estimado que el algoritmo de Strassen es más rápido para matrices con anchura desde 32 a 128 para implementaciones optimizadas,[1]​ y 60.000 o más para implementaciones básicas.[2]

Análisis numérico

La multiplicación de matrices estándar requiere aproximadamente (donde )operaciones aritméticas (sumas y multiplicaciones); la complejidad asintótica es .

El número de sumas y multiplicaciones requeridas en el algoritmo de Strassen puede ser calculado como sigue: sea el número de operaciones para una matriz de . Entonces por aplicación recursiva del algoritmo de Strassen, vemos que , para alguna constante que depende del número de sumas realizadas en cada aplicación del algoritmo. Por lo tanto ,esto es, la complejidad asintótica para multiplicar matrices de tamaño usando el algoritmo de Strassen es

.

La reducción en el número de operaciones aritméticas se obtiene a cambio de reducir un tanto la estabilidad numérica.

Referencias

  1. Skiena, Steven S. (1998), «§8.2.3 Multiplicación de matrices», El manual de diseño de algoritmos, Berlín, Nueva York: Springer-Verlag, ISBN 978-0-387-94860-7 ..
  2. Kakaradov, Boyko (2004), «Multiplicación de matrices ultra-rápida: Un análisis empirico de algoritmos de vector altamente optimizados», Stanford Undergraduate Research Journal 3: 33-36 ..

Enlaces externos