Dans l'algorithme de Strassen, pour calculer le produit de deux matrices et , les matrices et sont divisées en matrices de blocs et l'algorithme procède calcul récursif de produits matrice-matrice à blocs par opposition à un produit matriciel matriciel à blocs, c'est-à-dire si nous voulons , où
B A B 2 × 2 7 8 C = A B A = [ A 1 , 1 A 1 , 2 A 2 , 1 A 2 , 2 ] , B = [ B 1 , 1 B 1 , 2 B 2 , 1 B 2 , 2 ] , C = [ C 1 ,ABAB2×278C=AB
A=[A1,1A2,1A1,2A2,2] , B=[B1,1B2,1B1,2B2,2] , C=[C1,1C2,1C1,2C2,2]
alors nous avons
qui nécessite
8C1,1=A1,1B1,1+A1,2B2,1C1,2=A1,1B1,2+A1,2B2,2C2,1=A2,1B1,1+A2,2B2,1C2,2=A2,1B1,2+A2,2B2,2
8multiplications. Au lieu de cela, dans Strassen, nous calculons
et obtenez utilise
\ mathbf {M} _ {k} comme
M1:=(A1,1+A2,2)(B1,1+B2,2)M2:=(A2,1+A2,2)B1,1M3:=A1,1(B1,2−B2,2)M4:=A2,2(B2,1−B1,1)M5:=(A1,1+A1,2)B2,2M6:=(A2,1−A1,1)(B1,1+B1,2)M7:=(A1,2−A2,2)(B2,1+B2,2)
Ci,jMkC1,1=M1+M4−M5+M7C1,2=M3+M5C2,1=M2+M4C2,2=M1−M2+M3+M6
Cependant, le choix des matrices
Mk me semble arbitraire. Existe-t-il une vue d'ensemble de la raison pour laquelle nous choisissons ces produits spécifiques des sous-matrices de
A et
B ? De plus, je m'attendrais à ce que les
Mk impliquent les
Ai,j et les
Bi,j de manière symétrique, ce qui ne signifie pas semblent être le cas ici. Par exemple, nous avons
M2:=(A2,1+A2,2)B1,1 . Je m'attendrais à ce que son homologue dise
A1,1(B1,2+B2,2) également être calculé. Cependant, ce n'est pas le cas, car il peut être obtenu à partir d'autres
Mk .
J'apprécierais que quelqu'un puisse éclairer cela.