我有一个得分变量,它可以在主循环的每次迭代中增长和缩小。
需要获得过去1000秒内的平均分数。 (也就是说,我需要一个简单的移动平均线)
计算平均值最直接的方法是保留一个分数列表,并与记录分数的时间戳配对。
每一帧,我们遍历列表,总结score*deltaTime
,其中deltaTime
计算为(ourTimestamp - prevTimeStamp) / 1000sec.
和的结果是我们过去1000秒的平均值这个框架。
我们将处理列表中的任何旧元素,这些元素的时间戳早于"现在"
上述方法将耗费内存。是否有一种更简单的方法来立即计算平均值,而不保留这个"跟踪列表"?
答案 0 :(得分:7)
上述方法将耗费内存。
正确。
是否有更简单的方法可以立即计算平均值,而不保留此“跟踪列表”?
不。
累积平均有一个更简单的算法,但这是所有时间的平均值,而不是过去1000秒的平均值。最后1000秒的平均值是简单移动平均值,您需要有历史数据来计算它。
答案 1 :(得分:2)
您可以结合简单移动平均线和累积移动平均线的方法。说你累积一秒钟的所有分数。然后你有1000个项目的常量内存使用+当前秒的一些,你将在下一秒累积。
根据应用程序所需的精度,这可能就足够了。
答案 2 :(得分:1)
正如埃里克写的没有,但你可以估算你需要减去你总和的价值。这不是100%正确,但如果您不需要确切的结果,它可能会很方便。
对于前。
RSQLite