W algorytmie Strassena, aby obliczyć iloczyn dwóch macierzy ZA i , macierze i są podzielone na macierze blokowe i algorytm kontynuuje rekurencyjne obliczanie bloków produkty matryca-matryca w przeciwieństwie do naiwnych blokowych produktów matrycowo-matrycowych, tj. jeśli chcemy , gdzie
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 , 1bZAb2 × 278C = A B
A = [ A1 , 1ZA2 , 1ZA1 , 2ZA2 , 2] , B = [ B1 , 1b2 , 1b1 , 2b2 , 2] , C = [ C1 , 1do2 , 1do1 , 2do2 , 2]
mamy więc
który wymaga
do1 , 1= A.1 , 1b1 , 1+ A1 , 2b2 , 1do1 , 2= A.1 , 1b1 , 2+ A1 , 2b2 , 2do2 , 1= A.2 , 1b1 , 1+ A2 , 2b2 , 1do2 , 2= A.2 , 1b1 , 2+ A2 , 2b2 , 2
8mnożenia. Zamiast tego w Strassen obliczamy
i uzyskaj używa jako as
M.1: = ( A1 , 1+ A2 , 2) ( B1 , 1+ B2 , 2)M.2): = ( A2 , 1+ A2 , 2) B.1 , 1M.3): = A1 , 1( B1 , 2- B.2 , 2)M.4: = A2 , 2( B2 , 1- B.1 , 1)M.5: = ( A1 , 1+ A1 , 2) B.2 , 2M.6: = ( A2 , 1- A1 , 1) ( B1 , 1+ B1 , 2)M.7: = ( A1 , 2- A2 , 2) ( B2 , 1+ B2 , 2)
doja , jM.kdo1 , 1= M.1+ M.4- M5+ M.7do1 , 2= M.3)+ M.5do2 , 1= M.2)+ M.4do2 , 2= M.1- M2)+ M.3)+ M.6
Jednak wybór macierzy wydaje mi się arbitralny. Czy istnieje szerszy obraz tego, dlaczego wybieramy te konkretne produkty z macierzy i
\ mathbf {B} ? Spodziewałbym się także, że
\ mathbf {M} _k będzie angażował
\ mathbf {A} _ {i, j} i
\ mathbf {B} _ {i, j} w symetryczny sposób, co nie wydaje się, że tak właśnie jest. Na przykład mamy
M.kZAbM.kZAja , jbja , jM.2): = ( A2 , 1+ A2 , 2) B.1 , 1 . Spodziewałbym się, że jego odpowiednik powie, że również zostanie obliczony. Jednak nie jest tak, ponieważ można go uzyskać z innych .
ZA1 , 1( B1 , 2+ B2 , 2)M.k
Byłbym wdzięczny, gdyby ktoś mógł rzucić na to trochę światła.