使用与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。
我被问到一个问题,找出这个算法有什么问题,如果我们推广这个算法来找到矩阵的平方,它什么时候会失败?
答案 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次乘法才能得到结果:
aa
,dd
,bc
,b(a + d)
,c(a + d)
。
这种方法没有任何问题,即它对所有输入都是正确的。
也许你的面试官希望你提出你的想法并捍卫它实际上并没有错,而不是同意它是错的。
如果你的面试官仍然会说错了,那么最好先问一下"错误"的定义。也许"不是最佳的" (在数量,乘法和加法方面)。 Good read.
或许它的错误",因为它没有扩大规模,例如它不适用于4x4矩阵。
答案 2 :(得分:2)
此算法无法工作,因为矩阵乘法不可交换。
ab + bd!= b(a + d) 因为b(a + d)= ba + bd和矩阵乘法ab!= ba。 所以我们不能减少任何乘法。该算法仅适用于2X2矩阵。