■平均の計算方法
平均を計算する方法は、
①毎回指定時刻から過去へ遡って各値の合計を行い、平均期間で除算する。
②平均量をから期間外となり除外するもの、期間内となり追加するものを考慮して計算する。
2つの方法がある。
②の具体的イメージは以下のとおり、i はデータの並び。真ん中の平均は5期間平均で、現時点がi=6となった瞬間の処理内容である。期間外となるi=0データを除外し、期間内となるi=6データを追加することで計算量の増大を防ぐ。
■実験内容
上記2つの方法において、
値の範囲:1~1000万
値の増加方法:1ずつ
平均期間の範囲:1から99(下記図の横軸)
平均値算出回数:(1~99) × (1000万)
1から99の期間ごとに、1000万回シフトして平均計算した時間(ミリ秒)の遷移を調べた。
・赤字が逐次計算
・青字が平均量計算
凄まじい違いが出た。
時々青字(平均量計算)でブレているのは検証方法の問題ではなく、おそらくJavaの問題。
ある回数のメソッド実行が行われると、最適化が走りJavaバイトコードへのコンパイルが再度行われるとか。
計算回数および平均期間が増大するごとに、①の逐次計算は指数関数的に処理時間が伸びる。
②の平均量計算は、計算回数に対しては一定で、平均期間が増大すると線形に増加する。
[3回]
PR