Algorithm 计算任何30天期间的最大值总和

Algorithm 计算任何30天期间的最大值总和,algorithm,math,Algorithm,Math,我有以下资料: Date Value 2011-01-01 1 2011-01-02 5 2011-01-03 30 ..... 2012-01-01 4 我想计算我的数据中哪一个30天的时间段具有最大值之和 我不确定我的问题是否有意义,因为我的数学头脑不好,很难解释 谢谢 史蒂夫伪代码: MaxStartDate = FirstDate MaxTotal = -1 (something that is definitely below your possibl

我有以下资料:

Date        Value
2011-01-01  1
2011-01-02  5
2011-01-03  30
   .....
2012-01-01  4
我想计算我的数据中哪一个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天集合中的第一天。

对于数据中的前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 将开始日期设为输入数据中的第一个日期 循环“i”从1到(总日期-30) 临时总和=(临时总和+日期值(30+i)-日期值(i)) 如果最大和<温度和 最大总和=温度总和 开始日期=第i个日期

max\u sum
的最终值是以
start\u date
为起点的任何30天期间的最大值之和。

这应该对您有用。它假定一个基于零(0)的阵列系统

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
什么部分困扰你?计算运行30天的总和值或查找最大值?我假设日期格式为YYYY-MM-DD?否则就没什么意义了。数据是否按日期顺序排列,是否缺少日期?谢谢您的评论!最大值就是我所追求的。日期格式为YYYY-MM-DD,是的,数据按日期顺序排列,没有遗漏日期。我的帖子上面的代码更优雅,但有一个错误,我无法对此发表评论。。。。在结束时,开始日期=日期(i+1)是正确的行,而不是开始日期=日期(30+i)。-1;这有几个逻辑错误。贾斯汀·保尔森在下面提到的第一个问题。您也没有始终保持任何30天的运行总时间;唯一一次更新max_sum是在满足条件时,在许多情况下,它不会满足。如果你纠正了错误,或者说服我我错了,我会删除-1。谢谢你,我有这个解决方案,它对我来说很有用。我仍然需要做进一步的测试,但它是我所追求的!