En el algoritmo de Strassen, para calcular el producto de dos matrices y , las matrices y se dividen en matrices de bloques y el algoritmo procede calcular recursivamente productos de matriz de matriz de bloques en lugar de productos de matriz de matriz de bloques ingenuos , es decir, si queremos , donde
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 ,UNsiUNsi2 × 27 78C = A B
A = [ A1 , 1UN2 , 1UN1 , 2UN2 , 2] , B = [ B1 , 1si2 , 1si1 , 2si2 , 2] , C = [ C1 , 1C2 , 1C1 , 2C2 , 2]
entonces tenemos
que requiere
C1 , 1= A1 , 1si1 , 1+ A1 , 2si2 , 1C1 , 2= A1 , 1si1 , 2+ A1 , 2si2 , 2C2 , 1= A2 , 1si1 , 1+ A2 , 2si2 , 1C2 , 2= A2 , 1si1 , 2+ A2 , 2si2 , 2
8multiplicaciones En cambio, en Strassen, calculamos
y obtén usa como
METRO1: = ( A1 , 1+ A2 , 2) ( B1 , 1+ B2 , 2)METRO2: = ( A2 , 1+ A2 , 2) B1 , 1METRO3: = A1 , 1( B1 , 2- B2 , 2)METRO4 4: = A2 , 2( B2 , 1- B1 , 1)METRO5 5: = (A1, 1+A1, 2)B2 , 2METRO6 6: = (A2 ,1- A1 ,1) (B1 ,1+B1 ,2)METRO7 7: = (A1 ,2- A2 ,2) (B2 ,1+B2 ,2)
Ci , jMETROkC1 ,1= M1+ M4 4- M5 5+ M7 7C1 ,2= M3+ M5 5C2 ,1= M2+ M4 4C2 ,2= M1- M2+ M3+ M6 6
Sin embargo, la elección de las matrices me parece arbitraria. ¿Hay una idea más amplia de por qué elegimos estos productos específicos de submatrices de
\ mathbf {A} y
\ mathbf {B} ? Además, esperaría que
\ mathbf {M} _k 's involucre
\ mathbf {A} _ {i, j} ' s y
\ mathbf {B} _ {i, j} 's de manera simétrica, lo que no Parece ser el caso aquí. Por ejemplo, tenemos
METROkABMkAi,jBi,jM2:=(A2,1+A2,2)B1,1 . Esperaría que su contraparte digamos
A1,1(B1,2+B2,2) también se calcule. Sin embargo, no lo es, ya que puede obtenerse de otros
Mk 's.
Agradecería si alguien pudiera arrojar algo de luz sobre esto.