Je viens d'être chargé de faire cela pour les devoirs, et je pensais que j'avais une épiphanie soignée: l'algorithme de Strassen sacrifie la "largeur" de ses composants de pré-sommation afin d'utiliser moins d'opérations en échange de composants de pré-sommation "plus profonds" qui peut encore être utilisé pour extraire la réponse finale. (Ce n'est pas la meilleure façon de le dire, mais il m'est difficile de l'expliquer).
Je vais utiliser l'exemple de la multiplication de deux nombres complexes pour illustrer l'équilibre des « opérations par rapport aux composants »:
Notez que nous utilisons 4 multiplications, ce qui donne 4 composants de produit :
Notez que les 2 composantes finales que nous voulons: les parties réelle et imaginaire du nombre complexe, sont en fait des équations linéaires: ce sont des sommes de produits mis à l'échelle. Nous avons donc affaire à deux opérations ici: l' addition et la multiplication.
Le fait est que nos 4 composants de produit peuvent représenter nos 2 composants finaux si nous ajoutons ou soustrayons simplement nos composants:
Mais, nos 2 derniers composants peuvent être représentés comme des sommes de produits. Voici ce que j'ai trouvé:
Si vous pouvez le voir, nous n'avons en fait besoin que de 3 composants de produits distincts pour faire nos deux derniers:
Mais attendez! Chacune des majuscules est en soi un produit! Mais le hic, c'est que nous savons que nous pouvons générer (A + B + C + D) à partir de (a + b) (c + d), ce qui n'est qu'une multiplication.
Donc, au final, notre algorithme est optimisé pour utiliser moins, mais des composants "plus gros", où nous échangeons la quantité de multiplications pour plus d'opérations de sommation.
Une partie de ce qui permet cela est la propriété distributive, qui permet à A (B + C) d'être équivalent à (AB + AC). Remarquez comment la première peut être calculée en utilisant 1 opération d'addition et 1 opération de multiplication, tandis que la seconde nécessite 2 multiplications et 1 somme.
L'algorithme de Strassen est une extension de l'optimisation que nous avons appliquée aux produits de nombres complexes, sauf qu'il existe plus de termes de produits cibles et éventuellement plus de composants de produits que nous pouvons utiliser pour obtenir ces termes. Pour une matrice 2x2, l'algorithme de Strassen transforme un algorithme qui a besoin de 8 multiplications en un qui a besoin de 7 multiplications, et exploite la propriété distributive pour "fusionner" deux multiplications en une seule opération, et enlève à la place du nouveau nœud "plus gros" pour en extraire un terme du produit ou l'autre, etc.
Un bon exemple: pour obtenir (-1) et (2) et (5), vous pouvez y penser simplement (-1), (2), (5), ou vous pouvez le penser comme (2-3 ), (2), (2 + 3). Les secondes opérations utilisent cependant des nombres moins distincts. Le hic, c'est que le nombre de nombres distincts est équivalent au nombre de composants de produit dont vous avez besoin pour calculer la multiplication matricielle. Nous optimisons simplement pour cela pour trouver une certaine vue des opérations sous-jacentes qui tirent parti des sorties isomorphes en utilisant une variation différente à travers la propriété distributive.
Peut-être que cela pourrait être lié à la topologie d'une manière ou d'une autre? C'est juste la façon dont mon profane la comprend.
Edit: Voici une photo de mes notes que j'ai dessinées en train de faire l'explication du nombre complexe: