В алгоритмі Страссена для обчислення добутку двох матриць і B матриці A і B діляться на 2 × 2 блок-матриці, і алгоритм протікає рекурсивно, обчислюючи 7 блок-матричних матричних добутків на відміну від наївних 8- матричних блокових матриць- матричні продукти, тобто, якщо ми хочемо C = A B , де
A = [ A 1 , 1 A 1 , 2 A 2 , 1 A 2 , 2ABAB2 × 278C=AB+ A 1
тоді маємо
C 1 , 1 = A 1 , 1 B 1 , 1 , 2 B 2
А =[A1,1A2 ,1A1,2A2,2] , B = [B1 ,1B2 , 1B1 , 2B2 , 2] , C = [C1 , 1C2 , 1C1 , 2C2 , 2]
що вимагає
8множень. Замість Strassen ми обчислюємо
M 1 :=( A 1 , 1 + A 2 , 2 )( B 1 , 1 + B 2С1 , 1= А1 , 1Б1 , 1+ А1 , 2Б2 , 1С1 , 2= А1 , 1Б1 , 2+ А1 , 2Б2 , 2С2 , 1= А2 , 1Б1 , 1+ А2 , 2Б2 , 1С2 , 2= А2 , 1Б1 , 2+ А2 , 2Б2 , 2
8
і отримаємо
C i , j , використовуючи
M k 's як
C 1 , 1 = M 1 + M 4 - М 5 + М 7М1: = ( A1 , 1+ А2 , 2) ( В1 , 1+ В2 , 2)М2: = ( A2 , 1+ А2 , 2) Б1 , 1М3: = A1 , 1( В1 , 2- Б2 , 2)М4: = A2 , 2( В2 , 1- Б1 , 1)М5: = ( A1 , 1+ А1 , 2) Б2 , 2М6: = ( A2 , 1- А1 , 1) ( В1 , 1+ В1 , 2)М7: = ( A1 , 2- А2 , 2) ( В2 , 1+ В2 , 2)
Сi , jМкC1,1=M1+M4−M5+M7C1,2=M3+M5C2,1=M2+M4C2,2=M1−M2+M3+M6
MkAB? Also, I would expect
Mk's to involve
Ai,j's and
Bi,j's in a symmetric fashion, which does not seem to be the case here. For instance, we have
M2:=(A2,1+A2,2)B1,1. I would expect its counterpart say
A1,1(B1,2+B2,2) also to be computed. However, it is not since it can be obtained from other
Mk's.
I would appreciate if someone could throw some light on this.