假设我们正在接收流中的数字。接收到每个数字后,需要计算最后数字的加权和,其中权重始终相同,但是是任意的。
如果允许我们保留数据结构来帮助计算,那么这样做的效率如何?我们能做得比更好的方法吗,即每次收到一个数字都重新计算总和?
例如:假设权重为。在某一点上,我们有最后数字的列表和加权和。Ñ 大号1 = ⟨ 一个,b ,c ^ ,d ⟩ > 小号1 = 瓦特1 * 一个+ 瓦特2 * b + 瓦特3 * C ^ + 瓦特4 * d
当收到另一个数字,我们更新列表以获得,我们需要计算。大号2 = ⟨ b ,c ^ ,d ,ë ⟩ š 2 = 瓦特1 * b + 瓦特2 * C ^ + 瓦特3 * d + 瓦特4 * ë
使用FFT 的考虑通过使用快速傅立叶变换,可以有效解决此问题的特殊情况。在这里,我们计算出加权和的倍数。换句话说,我们收到数字,然后才能计算出相应的加权总和。为此,我们需要过去的数字(已经计算出总和)和新数字,总共数字。N N N N − 1 N 2 N − 1
如果此输入数字向量和权重向量定义多项式和系数,而系数相反,则我们看到乘积为多项式,其系数从到恰好是我们寻求的加权和。可以使用时间中的FFT计算这些值,这为每个输入数字提供了Θ(\ log(N))时间的平均值。P (X )Q (X )Q P (X )× Q (X )X ñ - 1 X 2 Ñ - 2 Θ (Ñ * 日志(Ñ ))Θ(日志(Ñ ))
但是,这并不是解决上述问题的方法,因为要求每次接收到新的数字时都必须有效地计算加权和-我们不能延迟计算。