我正在研究一种算法来计算数组的多个平均最大值。该阵列包含时间/值对,例如在5小时运行时记录在Garmin设备上的HR数据。对于未知时期,数据大约每秒一次,但没有保证频率。一个例子是10分钟的平均最大值,这是最大平均10分钟持续时间值。假设“平均值”只是此讨论的平均值。期望的平均最大值的持续时间是任意的,1分钟,5分钟,60分钟。并且,我可能需要其中许多 - 至少30个,但如果不是一个冗长的请求,理想情况下任何需求。
现在我有一个直接的算法来计算值:
1)从数组的开头开始并向前“向前走”,直到子集等于或超过所需持续时间的1个元素。如果到达数组末尾则停止。
2)找出这些子集值的平均值。如果大于当前最大值,则以最大平均值存储
3)从阵列左侧移出一个值。
4)从1重复到阵列结束。
它基本上计算每个可能的连续平均值并返回最大值。 它为每个持续时间执行此操作。它会连续计算一个真正的平均计算,而不是通过移除左边点并添加右边来以某种方式滑动它,就像可以为简单移动平均值系列做的那样。每个平均最大值大约需要3-10秒,具体取决于总阵列大小。
我想知道如何优化它。例如,所有平均最大值的系列将是指数曲线,其中1s值最高,并且降低直到满足整个平均值。这条曲线和所有值是否可以从一定数量的点插值?或者对上述繁重的计算进行其他一些优化,但仍保持准确性?
答案 0 :(得分:1)
“它会连续计算一个真正的平均计算,而不是通过移除左边的点并添加右边来滑动它,就像一个简单移动平均值系列那样。”
为什么不滑动它(即保持一个运行总和并除以该总和中的元素数量)?