同じ長さの Double の配列が 2 つあります。配列 a にはいくつかのデータが入り、配列 b は計算されます。
配列 b の各要素は、配列 a の対応する値に、配列 b の先行するすべての要素の加重合計を加えた値に等しくなります。
重み付けされた合計は、すべての要素に係数を掛けて加算することによって計算されます。この係数は、計算した現在の要素からの距離を前のサブセットの要素数で割った値に等しくなります。
これを実装するために、計算する要素ごとに前のサブセット全体をループします。
これは最適化できますか?私は十分な数学のスキルを持っていませんが、すべての要素がすでに前のセットから派生しており、すでに重み付けされたすべての情報を含んでいるため、最初の前の要素を使用して次のすべてを計算することしかできないと思います。たぶん、重みの式を調整するだけで、第 2 レベルのループなしで同じ結果を得ることができますか?
これは Scala の例のようです (正しいかどうかはわかりません :-])。実際のプロジェクトでは負のインデックスを使用するため、上記のタスクに関して a(1) と a(2) を a(0) に先行するものとして扱います。
import scala.Double.NaN
val a = Array[Double] (8.5, 3.4, 7.1, 5.12, 0.14, 5)
val b = Array[Double] (NaN, NaN, NaN, NaN, NaN, 5)
var i = b.length - 2
while (i >= 0) {
b(i) = a(i) + {
var succession = 0.0
var j = 1
while (i + j < b.length) {
succession += b (i+j) * (1.0-j.toDouble/(b.length - i))
j += 1
}
succession
}
i -= 1
}
b.foreach((n : Double) => println(n))