2012-04-12 5 views
1

上の値の最大値の合計を計算します。は、次のように私はデータを持っている任意の30日間期間

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

私は、値の合計の最大値を持っている私のデータ内のどの30日の期間を計算します。

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

おかげ スティーブ

+1

あなたの悩みは?実行中の30日の合計値を計算するか、最大値を見つけるか? –

+0

日付の形式はYYYY-MM-DDとしますか?そうでなければ意味がない。データは日付順であり、日付は欠落していますか? – gbulmer

+0

コメントありがとう!最大値は私が何をしたかです。日付形式はYYYY-MM-DDです。はい、日付は欠落していません。 –

答えて

2

これはあなたのために行う必要があります。それは、ゼロベースのアレイシステムを想定しています。

ここ
 
sum <- 0 
for i = 0 to 29 
    sum <- sum + value(i) 

max <- sum 
start <- 0 

for i = 30 to value.lengh-1 
    sum <- sum - value(i-30) + value(i) 
    if sum > max then 
    max <- sum 
    start <- i-29 

max 30の連続した値の最大値の合計が含まれているとstartは、その30日間の最大実行の開始点が含まれています。

+0

ありがとう、私はこの解決策を持っており、それは私のための治療を働く。私はまださらなるテストをする必要がありますが、それは私が何をしているのです! –

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) 
    } 
} 

ループが終了するため、MaxTotalはあなたの最高の30日間の合計とするとMaxStartDateは30日のセットの最初の日になりますとき。 max_sum

+0

私のポストの上のコードはよりエレガントですが、エラーがあり、コメントできません....最後にstart_date = date(i + 1)は正しい行ではありませんstart_date = date(30 + i) 。 –

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 

最終値は開始点としてstart_date有する任意の30日間の期間にわたる値の最大合計です。

+0

-1;これには論理的なエラーがいくつかあります。最初のジャスティン・ポールソンは以下のことを言います。また、連続した30日間の期間を一貫して保持するわけでもありません。 max_sumを更新するのは、条件が満たされたときだけです。多くの場合、それは満たされません。エラーを修正したり、間違っていると私に確信した場合は、-1を削除します。 – andand