Strassen计算矩阵平方的方法有什么问题?

时间:2014-12-18 09:31:52

标签: algorithm matrix strassen

使用与Strassen's相同的方法,仅5次乘法就足以计算矩阵的平方。如果A [2] [2] = [a,b,c,d],则乘法是a * a,d * d,b *(a + d),c *(a + d),b * c。

如果我们推广这个算法来获得矩阵的平方,那么复杂度会降低到n ^ log5,而基数为2。

我被问到一个问题,找出这个算法有什么问题,如果我们推广这个算法来找到矩阵的平方,它什么时候会失败?

3 个答案:

答案 0 :(得分:3)

你可以在调用树的根处只进行5次乘法,但这些乘法中的一些不是正方形,因此运行时间并不比Strassen更好用于乘法。

换句话说,如果我们有一个O(n ^ c)算法来对n-by-n矩阵求平方,那么我们得到一个O(n ^ c)乘法算法,通过平方2n-by- 2n块矩阵

     2
[0 A]    [AB 0 ]
[B 0]  = [0  BA].

答案 1 :(得分:2)

有一个矩阵A

ab
cd

我们可以通过8次乘法以幼稚的方式计算AA

aa + bc
ab + bd 
ac + cd 
bc + dd

直接应用Strassen的乘法将给我们7次乘法。

但是,使用与Strassen类似的方法,我们可以注意到:

ab + bd = b(a + d) 
ac + cd = c(a + d)

所以,实际上,我们只能进行5次乘法才能得到结果:
aaddbcb(a + d)c(a + d)

这种方法没有任何问题,即它对所有输入都是正确的。

也许你的面试官希望你提出你的想法并捍卫它实际上并没有错,而不是同意它是错的。

如果你的面试官仍然会说错了,那么最好先问一下"错误"的定义。也许"不是最佳的" (在数量,乘法和加法方面)。 Good read.

或许它的错误",因为它没有扩大规模,例如它不适用于4x4矩阵。

答案 2 :(得分:2)

此算法无法工作,因为矩阵乘法不可交换。

ab + bd!= b(a + d) 因为b(a + d)= ba + bd和矩阵乘法ab!= ba。 所以我们不能减少任何乘法。该算法仅适用于2X2矩阵。