私は次のようなデータを持っています:
Date Value
2011-01-01 1
2011-01-02 5
2011-01-03 30
.....
2012-01-01 4
データ内で最大値の合計を持つ30日間を計算したいと思います。
数学の頭がよくないので説明するのが非常に難しいので、私の質問が理にかなっているかどうかはわかりません。
ありがとうスティーブ
これはあなたのためにそれをするはずです。ゼロ(0)ベースのアレイシステムを想定しています。
合計<-0 i = 0〜29の場合 合計<-合計+値(i) 最大<-合計 開始<-0 i=30からvalue.lengh-1の場合 合計<-合計-値(i-30)+値(i) 合計>最大の場合 最大<-合計 開始<-i-29
ここmax
には、30個の連続する値の最大合計がstart
含まれ、その30日間の最大実行の開始点が含まれます。
擬似コード:
MaxStartDate = FirstDate
MaxTotal = -1 (something that is definitely below your possible total)
for n=0 to lastDate-30
{
tempMax = 0
for m=n to n+29
tempMax = tempMax + date(m)
if tempMax > MaxTotal
{
MaxTotal = tempMax
MaxStartDate = date(n)
}
}
forループが終了すると、MaxTotalが最大の30日間の合計になり、MaxStartDateが30日間のセットの最初の日になります。
for first 30 days in your data, compute the sum of all values
let this be called as max_sum
let start_date be the first date in the input data
Loop 'i' from 1 to (total dates - 30)
temp_sum = (temp_sum + value of date (30+i) - value of date (i))
if max_sum < temp_sum
max_sum = temp_sum
start_date= ith date
の最終値は、開始点としてのmax_sum
30日間の値の最大合計です。start_date