📜  DAA-Strassen™的矩阵乘法

📅  最后修改于: 2021-01-12 03:32:34             🧑  作者: Mango


在本章中,我们将首先讨论矩阵乘法的一般方法,然后再讨论Strassen的矩阵乘法算法。

问题陈述

让我们考虑两个矩阵XY。我们想通过乘以XY来计算结果矩阵Z。

天真的方法

首先,我们将讨论朴素的方法及其复杂性。在这里,我们正在计算Z = X×Y 。使用朴素方法,如果两个矩阵的顺序为p×qq×r,则可以将两个矩阵( XY )相乘。以下是算法。

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 )时间来执行。

Strassen的矩阵乘法算法

在这种情况下,使用Strassen的矩阵乘法算法,可以将时间消耗略微改善。

Strassen的矩阵乘法只能在n2幂的平方矩阵上执行。两个矩阵的阶数均为n×n

XYZ分成四个(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} $

使用Strassen的算法计算以下内容-

$$ M_ {1} \:\冒号=(A + C)\次(E + F)$$

$$ M_ {2} \:\冒号=(B + D)\次(G + H)$$

$$ M_ {3} \:\ colon =(AD)\ times(E + H)$$

$$ M_ {4} \:\ colon = A \ times(FH)$$

$$ M_ {5} \:\冒号=(C + D)\次(E)$$

$$ M_ {6} \:\冒号=(A + B)\次(H)$$

$$ M_ {7} \:\ colon = D \ times(GE)$$

然后,

$$ I \:\ colon = M_ {2} + M_ {3}-M_ {6}-M_ {7} $$

$$ J \:\ colon = M_ {4} + M_ {6} $$

$$ K \:\ colon = M_ {5} + M_ {7} $$

$$ L \:\ colon = M_ {1}-M_ {3}-M_ {4}-M_ {5} $$

分析

$ T(n)= \ begin {cases} c&if \:n = 1 \\ 7 \:x \:T(\ frac {n} {2})+ d \:x \:n ^ 2&否则\ end {cases} $,其中cd为常数

使用该递归关系,我们得到$ T(n)= O(n ^ {log7})$

因此,斯特拉森矩阵乘法算法的复杂度为$ O(n ^ {log7})$。