たとえば、1000 個のオブジェクトのリストがあります。最後の 20 個のオブジェクトの標準偏差を表すフィールドを各オブジェクトに追加したいと考えています。リストの終わりまでに、980 のローリング標準偏差と 20 のゼロが得られます。
リストを反復処理して stdev を見つけたが、それを 20 オブジェクト前の要素にプッシュした場合、それはどのような問題ですか? それは2nの問題ですか?
これが私のコードのサンプルです:
(0...thelist.length-20).each do |n|
...do some calculations on n
if n == 20:
...use the calculations to calculate stdev
thelist[n-20].push(stdeviation)
end
end
[n-20]
基本的に、関数の理論上の速度にどのように影響するのか疑問に思っています。
標準偏差を計算するために以下のようなことを行うこともできますが、個々の要素ごとに計算を行っているのに対し、20 個の要素を反復処理する以下の方法よりも上の方が速いと思います。速度に違いはありますか?
(0...thelist.length-20).each do |n|
(n..n+20).each do |m|
...calculate stdev
end
end