Nell'algoritmo Strassen, per calcolare il prodotto di due matrici e B , le matrici A e B sono divise in matrici a blocchi 2 × 2 e l'algoritmo procede calcolando ricorsivamente 7 prodotti matrice a matrice di blocchi rispetto a una matrice a 8 blocchi ingenua- prodotti matrice, ovvero se vogliamo C = A B , dove
A = [ A 1 , 1 A 1 , 2 A 2 , 1 A 2 , 2UNBUNB2 × 278C = A B
quindi abbiamo
C 1 , 1 = A 1 , 1 B 1 , 1 + A 1
A = [ A1 , 1UN2 , 1UN1 , 2UN2 , 2] , B = [ B1 , 1B2 , 1B1 , 2B2 , 2] , C = [ C1 , 1C2 , 1C1 , 2C2 , 2]
che richiede
8moltiplicazioni. Invece in Strassen, calcoliamo
M 1 :=( A 1 , 1 + A 2 , 2 )( B 1 , 1 + B 2 , 2 )C1 , 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
8
e ottenere
C i , j usando
M k come
C 1 , 1 = M 1 + M 4 - M 5 + M 7M1: = ( 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)
Cio , jMK
Tuttavia, la scelta delle matrici
M k mi sembra arbitraria. Esiste un quadro più ampio del perché scegliamo questi prodotti specifici delle sottomatrici di
A e
B ? Inoltre, mi aspetto che
M k coinvolga
A i , j e
B i , j in modo simmetrico, il che non sembra essere il caso qui. Ad esempio, abbiamo
M 2 :=C1 , 1= M1+ M4- M5+ M7C1 , 2= M3+ M5C2 , 1= M2+ M4C2 , 2= M1- M2+ M3+ M6
MKUNBMKUNio , jBio , j . Mi aspetto che anche la sua controparte dica che
A 1 , 1 ( B 1 , 2 + B 2 , 2 ) verrà calcolato. Tuttavia, non lo è poiché può essere ottenuto da altri
M k .
M2: = ( A2 , 1+ A2 , 2) B1 , 1UN1 , 1( B1 , 2+ B2 , 2)MK
Gradirei se qualcuno potesse far luce su questo.