两个Toeplitz矩阵的乘积?

时间:2013-04-08 21:41:22

标签: performance algorithm matrix fft matrix-multiplication

Toeplitz矩阵乘积的O(n log n)算法和正确长度的矢量是众所周知的:将它放在循环矩阵中,乘以矢量(和后续的零),然后返回产品的最高n元素。

我很难找到最佳(时间)算法来乘以相同大小的两个Toeplitz矩阵。

有人可以给我一个算法吗?

1 个答案:

答案 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条目减去ijdp。 3,3条目为cq + dp + eo + fm + gl,或2,2条目减去hkcq。 4,4条目是br + cq + dp + eo + fm等等。

如果以浮点实现此功能,请注意catastrophic cancellation