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: