📅  最后修改于: 2021-01-12 03:32:34             🧑  作者: Mango
在本章中,我们将首先讨论矩阵乘法的一般方法,然后再讨论Strassen的矩阵乘法算法。
让我们考虑两个矩阵X和Y。我们想通过乘以X和Y来计算结果矩阵Z。
首先,我们将讨论朴素的方法及其复杂性。在这里,我们正在计算Z = X×Y 。使用朴素方法,如果两个矩阵的顺序为p×q和q×r,则可以将两个矩阵( X和Y )相乘。以下是算法。
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的矩阵乘法只能在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} $
使用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} $,其中c和d为常数
使用该递归关系,我们得到$ T(n)= O(n ^ {log7})$
因此,斯特拉森矩阵乘法算法的复杂度为$ O(n ^ {log7})$。