El famoso algoritmo de multiplicación matricial de Strassen es un verdadero placer para nosotros, ya que reduce la complejidad temporal del tradicional O (n 3 ) a O (n 2.8 ).
Pero de todos los recursos que he utilizado, incluso el libro de Cormen y Steven Skienna, claramente no explican cómo Strassen lo pensó.
¿Cuál es el fundamento del algoritmo de multiplicación matricial de Strassen? ¿Es un accidente afortunado o hay algo más profundo?
algorithms
matrix
usuario1369975
fuente
fuente
Respuestas:
Aparte de Strassen, nadie puede decirte cómo Strassen ha tenido su idea. Howeber¹, puedo decirte, cómo podrías haber encontrado esa fórmula tú mismo, siempre que estés interesado en la geometría algebraica y la teoría de la representación. Esto también le brinda las herramientas para mostrar que la fórmula de Strassen es tan buena como puede, o más precisamente, que no existe una fórmula que calcule el producto de dos matrices 2 × 2 que utiliza menos de 7 multiplicaciones .
Como te interesan las matrices, supongo que conoces álgebra lineal básica y estarás un poco borroso para los detalles más avanzados.
Primero deje ser E el conjunto de todos los mapas lineales de un plano a un plano. Este es básicamente el conjunto de todas las matrices 2 × 2, pero nos olvidamos de un sistema de coordenadas particular, porque si hubiera un sistema de coordenadas mejor que el "predeterminado" podríamos tener interés en usarlo para la multiplicación de matrices. También denotamos por E † el espacio dual de E y por X = P (E⊗E † ⊗E †) el espacio proyectivo asociado al producto tensorial E⊗E † ⊗E † .
Un elemento de X = P (E⊗E † ⊗E †) de la forma especial [c⊗α⊗β] puede interpretarse como una operación elemental en matrices, que, en algunos sistemas de coordenadas apropiados, lee un coeficiente de una matriz a y un coeficiente de una matriz B y escribe el producto de estos coeficientes en alguna matriz C . Un elemento general de X es una combinación de estas operaciones elementales, para que el producto π de dos matrices, entendida como un mapa de P (E) × P (E) a P (E), es un punto en X .
La fórmula habitual del producto matricial y la fórmula de Strassen se pueden expresar como combinaciones de estas operaciones lineales, así que permítanme denotar con W₁ el conjunto de estas operaciones elementales [c⊗α⊗β] y permitirme describir geométricamente sus combinaciones.
Sea W₂ la variedad de secantes de W₁ en X. Se obtiene tomando la unión (cierre de) de todas las líneas que pasan por dos puntos (genéricos) de W₁ . Podemos pensar en él como en el conjunto de todas las combinaciones de dos operaciones elementales.
Sea W₃ la variedad de planos secantes de W₁ en X. Se obtiene tomando la unión (cierre de) de todos los planos que pasan por tres puntos (genéricos) de W₁ . Podemos pensar en él como en el conjunto de todas las combinaciones de tres operaciones elementales.
Del mismo modo, definimos variedades secantes para mayores índices. Tenga en cuenta que estas variedades crecen más y más, es decir W₁⊂W₂⊂W₃⊂ ⋯ Por lo tanto, la fórmula clásica del producto de matriz muestra que el producto de matrices es un punto de W₈ . Realmente
PROPOSICIÓN (Strassen): el producto de las matrices π se encuentra en W₇.
Hasta donde sé, Strassen no expresó las cosas de esa manera, sin embargo, este es un punto de vista geométrico sobre esta cuestión. Este punto de vista es muy útil, porque también le permite probar que la fórmula de Strassen es la mejor, es decir, que π no se encuentra en W₆ . Los métodos geométricos desarrollados aquí también pueden usarse para una gama más amplia de problemas.
Espero, capté tu curiosidad. Puede ir más lejos leyendo este artículo de Landsberg y Manivel:
http://arxiv.org/abs/math/0601097
¹ No arreglaré este error tipográfico, porque me resfrié.
fuente
Me encargaron hacer esto para la tarea, y pensé que tenía una buena epifanía: el algoritmo de Strassen sacrifica la "amplitud" de sus componentes previos a la suma para usar menos operaciones a cambio de componentes "profundos" anteriores a la suma que todavía se puede usar para extraer la respuesta final. (Esta no es la mejor manera de decirlo, pero es difícil para mí explicarlo).
Voy a usar el ejemplo de multiplicar dos números complejos juntos para ilustrar el balance de " operaciones versus componentes ":
Tenga en cuenta que utilizamos 4 multiplicaciones, que dan como resultado 4 componentes del producto :
Tenga en cuenta que los 2 componentes finales que queremos: las partes real e imaginaria del número complejo, en realidad son ecuaciones lineales: son sumas de productos escalados. Así que estamos tratando con dos operaciones aquí: suma y multiplicación.
El hecho es que nuestros 4 componentes del producto pueden representar nuestros 2 componentes finales si simplemente sumamos o restamos nuestros componentes:
Pero, nuestros 2 componentes finales se pueden representar como sumas de productos. Esto es lo que se me ocurrió:
Si puede ver, en realidad solo necesitamos 3 componentes distintos del producto para hacer nuestros dos últimos:
¡Pero espera! ¡Cada una de las letras mayúsculas son en sí mismas productos! Pero el problema es que sabemos que podemos generar (A + B + C + D) a partir de (a + b) (c + d), que es solo 1 multiplicación.
Entonces, al final, nuestro algoritmo está optimizado para usar menos componentes, pero "más gordos", donde intercambiamos la cantidad de multiplicaciones por más operaciones de suma.
Parte de lo que permite esto es la propiedad distributiva, que permite que A (B + C) sea equivalente a (AB + AC). Observe cómo se puede calcular el primero usando 1 suma y 1 operación de multiplicación, mientras que el segundo requiere 2 multiplicaciones y 1 suma.
El algoritmo de Strassen es una extensión de la optimización que aplicamos a productos de números complejos, excepto que hay más términos de productos objetivo y posibles más componentes de productos que podemos usar para obtener esos términos. Para una matriz de 2x2, el algoritmo de Strassen transforma un algoritmo que necesita 8 multiplicaciones a uno que necesita 7 multiplicaciones, y aprovecha la propiedad distributiva para "fusionar" dos multiplicaciones en una sola operación, y en su lugar quita el nuevo nodo "más gordo" para extraer uno término del producto u otro, etc.
Un buen ejemplo: para obtener (-1) y (2) y (5), puede pensarlo como solo (-1), (2), (5), o puede considerarlo como (2-3 ), (2), (2 + 3). Sin embargo, las segundas operaciones usan números menos distintos. El problema es que el número de números distintos es equivalente al número de componentes del producto que necesita calcular para la multiplicación de matrices. Simplemente optimizamos para esto para encontrar una cierta vista de las operaciones subyacentes que aprovecha las salidas isomorfas utilizando una variación diferente a través de la propiedad distributiva.
¿Quizás esto podría estar relacionado con la topología de alguna manera? Esta es solo la forma en que mi laico lo entiende.
Editar: Aquí hay una foto de mis notas que dibujé en el proceso de hacer la explicación de números complejos:
fuente