Toeplitz矩阵乘积的O(n log n)
算法和正确长度的矢量是众所周知的:将它放在循环矩阵中,乘以矢量(和后续的零),然后返回产品的最高n
元素。
我很难找到最佳(时间)算法来乘以相同大小的两个Toeplitz矩阵。
有人可以给我一个算法吗?
答案 0 :(得分:7)
这是一个O(n ^ 2)时间算法。
要计算产品矩阵的一个对角线,我们需要计算长度为n个窗口的长度为(2n-1)列表的点积,这些列表以锁步方式滑动。可以在时间O(1)中计算两个连续条目之间的差异。
例如,考虑
的产品e f g h i o p q r s
d e f g h m o p q r
c d e f g l m o p q
b c d e f k l m o p
a b c d e j k l m o
1,1条目是eo + fm + gl + hk + ij
。 2,2条目是dp + eo + fm + gl + hk
,或1,1条目减去ij
加dp
。 3,3条目为cq + dp + eo + fm + gl
,或2,2条目减去hk
加cq
。 4,4条目是br + cq + dp + eo + fm
等等。
如果以浮点实现此功能,请注意catastrophic cancellation。