1

私は次のようなデータを持っています:

Date        Value
2011-01-01  1
2011-01-02  5
2011-01-03  30
   .....
2012-01-01  4

データ内で最大値の合計を持つ30日間を計算したいと思います。

数学の頭がよくないので説明するのが非常に難しいので、私の質問が理にかなっているかどうかはわかりません。

ありがとうスティーブ

4

3 に答える 3

2

これはあなたのためにそれをするはずです。ゼロ(0)ベースのアレイシステムを想定しています。

合計<-0
i = 0〜29の場合
  合計<-合計+値(i)

最大<-合計
開始<-0

i=30からvalue.lengh-1の場合
  合計<-合計-値(i-30)+値(i)
  合計>最大の場合
    最大<-合計
    開始<-i-29

ここmaxには、30個の連続する値の最大合計がstart含まれ、その30日間の最大実行の開始点が含まれます。

于 2012-04-12T19:12:10.940 に答える
1

擬似コード:

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日間のセットの最初の日になります。

于 2012-04-12T17:01:27.093 に答える
0
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_sum30日間の値の最大合計です。start_date

于 2012-04-12T17:03:30.163 に答える