配列の複数の平均最大値を計算するアルゴリズムに取り組んでいます。配列には、Garmin デバイスで 5 時間の実行で記録された HR データなどの時間/値のペアが含まれています。データは不明な期間で 1 秒に約 1 回ですが、頻度は保証されていません。例としては、10 分間の最大平均期間値である 10 分間の平均最大値があります。「平均」は、この議論の単なる平均値であると仮定します。目的の平均最大値の持続時間は任意で、1 分、5 分、60 分です。そして、私はそれらの多くを必要とするでしょう - 少なくとも 30 ですが、それが長い要求でなければ、理想的にはオンデマンドです。
現在、値を計算するための単純なアルゴリズムがあります。
1) 配列の先頭から開始し、サブセットが目的の期間と同じか、1 要素を超えるまで前方に「ウォーク」します。配列の終わりに達したら停止します。
2) これらのサブセット値の平均を見つけます。現在の最大値よりも大きい場合は、最大平均として保存します。
3) 配列の左側から単一の値をシフトします。
4) 配列の最後が一致するまで、1 から繰り返します。
基本的に、可能なすべての連続平均を計算し、最大値を返します。これは、期間ごとに行われます。そして、単純移動平均シリーズの場合のように、左のポイントを削除して右のポイントを追加することで何らかの方法でスライドさせるのではなく、実際の平均計算を継続的に計算します。配列の合計サイズにもよりますが、平均最大値ごとに約 3 ~ 10 秒かかります。
これを最適化する方法を考えています。たとえば、一連のすべての平均最大値は、1 の値が最も高く、全体の平均が満たされるまで低下する指数曲線になります。この曲線とすべての値は、特定の数のポイントから補間できますか? または、上記の重い計算に対する他の最適化ですが、それでも精度を維持しますか?