最近N个数字的加权和


19

假设我们正在接收流中的数字。接收到每个数字后,需要计算最后数字的加权和,其中权重始终相同,但是是任意的。N

如果允许我们保留数据结构来帮助计算,那么这样做的效率如何?我们能做得比更好的方法吗,即每次收到一个数字都重新计算总和?Θ(N)

例如:假设权重为。在某一点上,我们有最后数字的列表和加权和。Ñ 大号1 = 一个b c ^ d > 小号1 = 瓦特1 * 一个+ 瓦特2 * b + 瓦特3 * C ^ + 瓦特4 * dW=w1,w2,w3,w4NL1=a,b,c,d>S1=w1a+w2b+w3c+w4d

当收到另一个数字,我们更新列表以获得,我们需要计算。大号2 = b c ^ d ë š 2 = 瓦特1 * b + 瓦特2 * C ^ + 瓦特3 * d + 瓦特4 * ëeL2=b,c,d,eS2=w1b+w2c+w3d+w4e

使用FFT考虑通过使用快速傅立叶变换,可以有效解决此问题的特殊情况。在这里,我们计算出加权和的倍数。换句话说,我们收到数字,然后才能计算出相应的加权总和。为此,我们需要过去的数字(已经计算出总和)和新数字,总共数字。N N N N 1 N 2 N 1SNNNN1N2N1

如果此输入数字向量和权重向量定义多项式和系数,而系数相反,则我们看到乘积为多项式,其系数从到恰好是我们寻求的加权和。可以使用时间中的FFT计算这些值,这为每个输入数字提供了Θ(\ log(N))时间的平均值。P X Q X Q P X × Q X X ñ - 1 X 2 Ñ - 2 Θ Ñ * 日志Ñ Θ日志Ñ WP(x)Q(x)QP(x)×Q(x)xN1x2N2Θ(Nlog(N))Θ(log(N))

但是,这并不是解决上述问题的方法,因为要求每次接收到新的数字时都必须有效地计算加权和-我们不能延迟计算。


请注意,您可以在此处使用LaTeX
拉斐尔

输入是否来自某些已知分布?它们具有有用的数学特性吗?如果他们不这样做,则不可能做到这一点(除非有人能够找到亚线性可计算的整齐的封闭形式,我当然找不到)。另外,近似值可以吗?如果这对您完全有用,那可能是一种方法。
RDN

FIR滤波器可以做到这一点,因此它们的设计至关重要。
adrianN

@RDN我是出于好奇而提出这个问题的,我没有实际的用途。
Ambroz Bizjak

Answers:


6

这是您的方法的详细说明。假设后续的值为零,则每次迭代,我们都会使用FFT算法计算时间卷积值。换句话说,我们正在计算 其中是权重(或反向权重),是输入序列,是当前时间,和为。m O n log n m n 1 i = 0 w i a t i + kmmO(nlogn)m瓦特 Ñ 一个' = 0 ' >

i=0n1wiati+k,0km1,
winaitat=0t>t

对于以下迭代中的每个迭代,我们都能够计算所需的时间卷积(第个迭代需要时间)。因此,摊销时间为。通过选择可以将其最小化,它的摊销运行时间为。O m i O i O m + O n log n / m m = mO(m)iO(i)O(m)+O(nlogn/m) Om=nlognO(nlogn)

通过将计算分为几部分,我们可以将其改进为的最坏情况。修复,然后定义 每个仅取决于输入,因此可以在时间进行计算。同样,给定对于,我们可以计算时间的卷积。因此,计划是维护列表 对于每周期mb T p o = m 1 i = 0 w p m + i a T m i + oO(nlogn)mÇ Ť p 2 ø 日志Ç /- p p 0 p ñ /- 1 Ö ñ /+

bT,p,o=i=0m1wpm+iaTmi+o,CT,p=bT,p,0,,bT,p,m1.
CT,p2mO(mlogm)Ct/mp,p0pn/m1ç /- p pO(n/m+m)ñ /ø 日志ø ñ / 2日志= Ö Ñ /日志ø Ñ /log m + m m =
Ct/mp,p,0pn/m1.
m输入,我们需要更新其中的。每次更新花费时间,因此,如果我们平均分配这些更新,则每个输入将占用。与计算卷积本身一起,每个输入的时间复杂度为。像以前一样选择,得到。n/mO(mlogm)O((n/m2)mlogm)=O((n/m)logm)O((n/m)logm+m) Om=nlognO(nlogn)

很棒的解决方案,谢谢,我不确定是否可以做到。
Ambroz Bizjak

而且有效!C实现:ideone.com/opuoMj
Ambroz Bizjak 2013年

嗯,我错过了实际上使它破坏计算的最后一部分代码,已在ideone.com/GRXMAZ处修复
Ambroz Bizjak

在我的机器上,此算法在大约17000权重下开始比简单算法更快。对于少量砝码,它很慢。基准测试:ideone.com/b7erxu
Ambroz Bizjak

mm=nlognm
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.