给定一个线函数 y = a*x + b
(a
和b
是先前已知的常数),很容易计算线和样本窗口之间的平方和距离(1, Y1), (2, Y2), ..., (n, Yn)
(其中Y1
最旧的样本和Yn
最新的样本):
sum((Yx - (a*x + b))^2 for x in 1,...,n)
我需要一个快速算法来计算滚动窗口(长度n
)的这个值 - 每次新样本到达时,我都无法重新扫描窗口中的所有样本。
显然,对于每个进入窗口的新样本和每个离开窗口的旧样本,都应该保存和更新一些状态。
请注意,当一个样本离开窗口时,其余样本的指数也会发生变化——每个 Yx 都变为 Y(x-1)。因此,当一个样本离开窗口时,窗口中的每个其他样本都会为新总和贡献一个不同的值:(Yx - (a*(x-1) + b))^2
而不是(Yx - (a*x + b))^2
.
有没有已知的算法来计算这个?如果没有,你能想到一个吗?(由于一阶线性近似,有一些错误是可以的)。