c语言程序移动平均法,计算C中的移动平均值

本文介绍了使用C语言实现移动平均法的技巧,包括在实时和模拟场景下如何处理时间窗口更新,以及如何通过增量计算优化算法效率,以实现高效且稳定的移动平均值计算。
摘要由CSDN通过智能技术生成

诀窍如下:通过void update(int time,float value)随机获取更新.但是,您还需要跟踪时间窗口的更新时间,因此您可以设置一个在时间N调用的“闹钟”,这样可以在计算过程中再次考虑先前的更新.

如果这种情况发生在实时中,您可以请求操作系统调用方法void drop_off_oldest_update(int time)在时间N被调用

如果这是一个模拟,您无法从操作系统获得帮助,您需要手动进行操作.在一个模拟中,您将调用方法,将时间提供为参数(与实时不相关).然而,一个合理的假设是,呼叫被保证是这样,时间参数正在增加.在这种情况下,您需要维护一个排序的闹钟时间值列表,并且对于每个更新和读取调用,您都可以检查时间参数是否大于报警列表的开头.当您进行相关的报警处理(删除最旧的更新)时,请卸下头部并重新检查,直到处理给定时间之前的所有报警.然后进行更新调用.

我到目前为止,假设很明显你会为实际的计算做什么,但我会详细说明如何.我假设你有一个用于读取值的方法float read(int time).目标是使这个呼叫尽可能高效.所以每次调用read方法时,都不要计算移动平均值.相反,您可以预先计算最后一次更新或最后一次警报的值,并通过几个浮点运算“调整”该值以计算自上次更新以来的时间. (即除了可能处理堆叠报警列表之外的常数操作).

希望这是很清楚的 – 这应该是一个非常简单的算法,效率非常高.

进一步的优化:剩下的问题之一是如果在时间窗口内发生大量的更新,那么很长一段时间内既没有读取也没有更新,然后读取或更新.在这种情况下,上述算法在逐渐更新每个正在掉线的更新的值时效率低下.这不是必需的,因为我们只关心时间窗口之外的最后一次更新,所以如果有办法有效地删除所有较旧的更新,这将有所帮助.

为了做到这一点,我们可以修改算法来进行更新的二进制搜索,以便在时间窗口之前找到最新的更新.如果相对较少的更新需要“删除”,那么可以逐步更新每个丢弃的更新的值.但是如果有很多更新需要删除,那么在删除旧的更新后,可以从头重新计算该值.

增量计算附录ÿ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值