No algoritmo Strassen, para calcular o produto de duas matrizes e B , as matrizes A e B estão divididos em 2 × 2 matrizes de blocos e o algoritmo procede de forma recursiva computação 7 bloco produtos matriz-matriz, por oposição a um naive 8 matriz-bloco produtos matriciais, ou seja, se queremos C = A B , onde
A = [ A 1 , 1 A 1 , 2 A 2 , 1 A 2 , 2UMABUMAB2 × 278C = A B
então temos
C 1 , 1 = A 1 , 1 B 1 , 1 + A 1
A = [ A1 , 1UMA2 , 1UMA1 , 2UMA2 , 2] , B = [ B1 , 1B2 , 1B1 , 2B2 , 2] , C = [ C1 , 1C2, 1C1 1, 2C2, 2]
que requer
8multiplicações. Em vez disso, em Strassen, calculamos
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 1, 2+A2 ,2B2 , 2
8
e obtenha
C i , j usando
M k 's como
C 1 , 1 = M 1 + M 4 - M 5 + M 7M1 1: = ( 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 , jMk
No entanto, a escolha das matrizes
M k 's me parece arbitrária. Existe uma imagem maior do motivo pelo qual escolhemos esses produtos específicos das sub-matrizes de
A e
B ? Além disso, eu esperaria
M k 's para envolver
A i , j ' s e
B i , j é de uma forma simétrica, o que não parece ser o caso aqui. Por exemplo, temos
M 2 :=C1 , 1= M1 1+ M4- M5+ M7C1 , 2= M3+ M5C2 , 1= M2+ M4C2 , 2= M1 1- M2+ M3+ M6
MkUMABMkUMAi , jBi , j . Eu esperaria que sua contraparte diga
A 1 , 1 ( B 1 , 2 + B 2 , 2 ) também seja computada. No entanto, isso não é uma vez que pode ser obtido a partir de outros
M k 's.
M2: = ( A2 , 1+ A2 , 2) B1 , 1UMA1 , 1( B1 , 2+ B2 , 2)Mk
Eu apreciaria se alguém pudesse lançar alguma luz sobre isso.