最後のN個の数値の加重合計


19

ストリームで数値を受け取っているとします。各数値を受信した後、最後の数値の加重合計を計算する必要があります。加重は常に同じですが、任意です。N

計算を支援するためにデータ構造を保持することが許可されている場合、これはどの程度効率的に実行できますか?よりも良いこと、つまり数字を受け取るたびに合計を再計算することはできますか?Θ(N)

例:重みがます。ある時点で、最後の数値のリストと、加重和ます。W=w1,w2,w3,w4NL1=a,b,c,d>S1=w1a+w2b+w3c+w4d

別の番号を受け取ったら、リストを更新してをし、を計算する必要があります。eL2=b,c,d,eS2=w1b+w2c+w3d+w4e

FFTを使用した検討 この問題の特殊なケースは、高速フーリエ変換を使用することで効率的に解決できるようです。ここでは、倍数で加重和を計算します。言い換えれば、数値を受け取り、対応する加重和を計算することができます。これを行うには、過去の数(合計が既に計算されている)と、合計個の新しい数が必要です。SNNNN1N2N1

この入力数のベクトルと重みベクトル、係数を逆にして多項式との係数を定義する場合、積はaからまでの係数を持つ多項式が、求める重み付き和になります。これらは、時間でFFTを使用して計算できます。これにより、入力数ごとのΘ(\ log(N))時間の平均が得られますWP(x)Q(x)QP(x)×Q(x)xN1x2N2Θ(Nlog(N))Θ(log(N))

ただし、新しい数値が受信されるたびに加重和を効率的に計算する必要があるため、これは前述の問題の解決策ではありません。計算を遅らせることはできません。


ここでLaTeX使用できることに注意してください。
ラファエル

入力は既知の分布から来ていますか?有用な数学的特性はありますか?そうでない場合、これが可能になる可能性は低いです(誰かが準線形計算可能なきちんとした閉じた形を見つけられない限り-私は確かにそれを見つけることができません)。また、近似は大丈夫ですか?それがあなたにとってまったく有用であるならば、それは行く一つの方法かもしれません。
RDN

FIRフィルターはこれを行うため、それらの設計が関連します。
adrianN

@RDNこの質問は好奇心だと思いましたが、実用的なアプリケーションは考えていません。
アンブロズビズジャク

回答:


6

ここにあなたのアプローチの詳細があります。回の反復ごとに、FFTアルゴリズムを使用して、後続の値がゼロであると仮定して、時間の畳み込みの値を計算します。つまり、 ます ここで、は重み(または逆の重み)、は入力シーケンス、は現在の時刻、場合はです。mmO(nlogn)m

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

次の回の反復のそれぞれについて、時間で必要な畳み込みを計算できます(番目の反復には時間が必要です)。したがって、償却時間はです。これは、選択すること最小化され、償却実行時間が得られ。mO(m)iO(i)O(m)+O(nlogn/m)m=nlognO(nlogn)

計算を部分に分割することにより、最悪の実行時間にこれを改善でき。修正し、を定義します 各は入力のみに依存するため、時間で計算できます。また、が与えられた、時間の畳み込みを計算できます。したがって、計画はリストを維持することです 各期間についてO(nlogn)m

bT,p,o=i=0m1wpm+iaTmi+o,CT,p=bT,p,0,,bT,p,m1.
CT,p2mO(mlogm)Ct/mp,p0pn/m1O(n/m+m)
Ct/mp,p,0pn/m1.
m入力、これらのを更新する必要があります。各更新には時間がかかるため、これらの更新を均等に分散させると、各入力は作業を占有します。畳み込み自体の計算と合わせて、入力ごとの時間の複雑さはです。選択前のように、これは、得られる。n/mO(mlogm)O((n/m2)mlogm)=O((n/m)logm)O((n/m)logm+m)m=nlognO(nlogn)

素晴らしい解決策、ありがとう、それができるかどうかは本当にわかりませんでした。
アンブロズビズジャク

そしてそれは動作します!C実装:ideone.com/opuoMj
Ambroz Bizjak

Meh、私は実際に計算を分割するコードの最後のビットが欠落していました。ここでideone.com/GRXMAZを修正しました
アンブロズビズジャク

私のマシンでは、このアルゴリズムは、約17000の重みで単純なアルゴリズムよりも高速になり始めています。重みの数が少ない場合は時間がかかります。ベンチマーク:ideone.com/b7erxu
Ambroz Bizjak

実際にこれを実装したことは非常に印象的です!おそらく超えて最適化したいでしょう。選択肢は単なる目安であり、最適ではない可能性があります。異なる値でアルゴリズムを実行してみましたか?mm=nlognm
ユヴァルフィルマス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.