В алгоритме Штрассена, чтобы вычислить произведение двух матриц и B , матрицы A и B делятся на блочные матрицы 2 × 2, и алгоритм продолжает рекурсивное вычисление 7- блочных матрично-матричных произведений, а не наивных 8- блочных матричных матриц. матричные произведения, т. е. если мы хотим C = A B , где
A = [ A 1 , 1 A 1 , 2 A 2 , 1 A 2 , 2AВAВ2 × 278C = A B
тогда мы имеем
C 1 , 1 = A 1 , 1 B 1 , 1 + A 1
A = [ A1 , 1A2 , 1A1 , 2A2 , 2] , B = [ B1 , 1В2 , 1В1 , 2В2 , 2] , C = [ C1 , 1С2 , 1С1 , 2С2 , 2]
что требует
8умножений. Вместо этого в Штрассене мы вычисляем
M 1 :=( A 1 , 1 + A 2 , 2 )( B 1 , 1 + B 2 , 2 )С1 , 1= A1 , 1В1 , 1+ А1 , 2В2 , 1С1 , 2= A1 , 1В1 , 2+ А1 , 2В2 , 2С2 , 1= A2 , 1В1 , 1+ А2 , 2В2 , 1С2 , 2= A2 , 1В1 , 2+ А2 , 2В2 , 2
8
и получить
C i , j , используя
M k в качестве
C 1 , 1 = M 1 + M 4 - М 5 + М 7M1: = ( А1 , 1+ А2 , 2) ( B1 , 1+ B2 , 2)M2: = ( А2 , 1+ А2 , 2) Б1 , 1M3: = A1 , 1( Б1 , 2- Б2 , 2)M4: = A2 , 2( Б2 , 1- Б1 , 1)M5: = ( А1 , 1+ А1 , 2) Б2 , 2M6: = ( А2 , 1- А1 , 1) ( B1 , 1+ B1 , 2)M7: = ( А1 , 2- А2 , 2) ( B2 , 1+ B2 , 2)
Ся , джMК
Однако выбор матриц
M k мне кажется произвольным. Есть ли общая картина, почему мы выбираем эти конкретные произведения подматриц
A и
B ? Кроме того, я ожидал бы, что
M k будет задействовать
A i , j и
B i , j симметрично, что, похоже, не имеет место. Например, у нас есть
M 2 :=С1 , 1= М1+ М4- М5+ М7С1 , 2= М3+ М5С2 , 1= М2+ М4С2 , 2= М1- М2+ М3+ М6
MКAВMКAя , джВя , дж . Я ожидаю, что его коллега скажет, что
A 1 , 1 ( B 1 , 2 + B 2 , 2 ) также будет вычислена. Однако это не так, поскольку его можно получить из других
M k .
M2: = ( А2 , 1+ А2 , 2) Б1 , 1A1 , 1( Б1 , 2+ B2 , 2)MК
Буду признателен, если кто-нибудь сможет пролить свет на это.