直線関数 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
.
これを計算するための既知のアルゴリズムはありますか? そうでない場合は、1つ考えられますか?(一次線形近似のため、多少の誤差があっても問題ありません)。