2017-10-20 12 views
0

株価のリアルタイム供給があるとします。そのサブセットの平均をどのようにして計算しますか(過去1週間など)?リアルタイムでの時系列の平均サブセット

これはインタビューの質問でした。私はO(n^2)でそれを行うアルゴリズムを考え出すことができますが、インタビュアーはO(n)のアルゴリズムを望んでいました。

答えて

2

便利な方法は、配列の累積合計を計算することです。

これは、累積合計配列の各エントリが以前のすべての価格の合計であることを意味します。

これは、1つの減算を使用して入力の特定のサブアレイに対して合計を生成できるので便利です。

新しい入力が到着したときは、新しい累積合計を計算するために1回の加算が必要になります(古い累積合計に新しい要素を追加するだけなので)。

+0

興味深い概念。株価と同じ数のエントリを持つ別の配列を作成すると言っていますが、累積合計を含む値はありますか?そのようにして、私が過去1週間に合計を計算したいのであれば、累積合計配列の最新の値を1週間前の値で減算し、それをエントリー数。ありがとうございました。 – user84405

+1

これは良いアプローチですが、最終的なオーバーフロー(永久に追加することはできません)を処理するための保守メカニズムが必要です。 – Amit

+0

@Amit良い点:価格を整数になるようにスケーリングすると、標準的な折り返し演算を使用でき、正しい答えを計算する必要があります(データ型のサイズ内で和を合わせる) –

0

もう1つのアプローチは、Genomicsのスキューを計算することに似ています。

過去1週間の平均を計算する場合は、移動するウィンドウの合計を含む変数を作成します。エントリが作成されると、上記のsum変数にエントリを追加し、そこから移動ウィンドウ内の最も古いエントリを減算します。ウィンドウのサイズは一定であるため、過去1週間の平均は、過去1週間のエントリ数に対する移動平均です。

関連する問題