Учебники

DAA — матричное умножение Штрассена

В этой главе сначала мы обсудим общий метод умножения матриц, а позже мы обсудим алгоритм умножения матриц Штрассена.

Постановка задачи

Рассмотрим две матрицы X и Y. Мы хотим вычислить результирующую матрицу Z , умножив X и Y.

Наивный метод

Сначала обсудим наивный метод и его сложность. Здесь мы вычисляем Z = X × Y. Используя наивный метод, две матрицы ( X и Y ) могут быть умножены, если порядок этих матриц p × q и q × r . Ниже приводится алгоритм.

Algorithm: Matrix-Multiplication (X, Y, Z) 
for i = 1 to p do 
   for j = 1 to r do 
      Z[i,j] := 0 
      for k = 1 to q do 
         Z[i,j] := Z[i,j] + X[i,k] × Y[k,j] 

сложность

Здесь мы предполагаем, что целочисленные операции занимают O (1) времени. В этом алгоритме есть три цикла for, и один вложен в другой. Следовательно, алгоритм занимает O (n 3 ) времени для выполнения.

Алгоритм умножения матриц Штрассена

В этом контексте, используя алгоритм умножения матриц Штрассена, можно немного улучшить потребление времени.

Умножение матрицы Штрассена может быть выполнено только на квадратных матрицах, где n — степень 2 . Порядок обеих матриц n × n .

Разделите X , Y и Z на четыре (n / 2) × (n / 2) матрицы, как показано ниже —

Z = \ begin {bmatrix} I & J \\ K & L \ end {bmatrix} X = \ begin {bmatrix} A & B \\ C & D \ end {bmatrix} и Y = \ begin {bmatrix} E & F \\ G & H \ end {bmatrix}

Используя алгоритм Штрассена, вычислите следующее:

M1 colon=(A+C) times(E+F)

M2 colon=(B+D) times(G+H)

M3 colon=(AD) times(E+H)

M4 colon=A times(FH)

M5 colon=(C+D) times(E)

M6 colon=(A+B) times(H)

M7 colon=D times(GE)

Затем,

I colon=M2+M3M6M7

J colon=M4+M6

K colon=M5+M7

L colon=M1M3M4M5

Анализ

T (n) = \ begin {case} c & if \: n = 1 \\ 7 \: x \: T (\ frac {n} {2}) + d \: x \: n ^ 2 & в противном случае \ end {case}, где c и d — константы

Используя это рекуррентное соотношение, мы получаем T(n)=O(nlog7)

Следовательно, сложность алгоритма умножения матриц Штрассена составляет O(nlog7).