有限容量下持续流入数据的time-strip图表数值计算方案问询
有限容量时间序列图表的增量数据压缩方案
我需要实现一个最多存储100个x-y数据对的图表,数据从设备持续流入。要求绘制从测量起始时刻到当前的完整趋势图(而非仅显示最近100个值的滑动窗口),且不能存储全部输入数据(系统长期运行会产生数亿条数据),仅保留100个数据项或少量额外信息。
该图表属于"时间条"类型:新数据点从右侧加入,左侧固定为测量起始点。当前代码结构如下:
struct vec2f { float x, y; }; std::vector<vec2f> data;
我希望用100个经过平均/最小/最大值处理的数据点来绘制图表。当接收的数据量≤100时处理简单,但第101条数据到来时,如何在保持完整趋势的前提下实现需求?核心限制是数据增量流入,无法批量处理所有数据,也不能存储全部数据。
我的直觉是按99/100的比例"压缩"现有数据,再添加新数据,但想知道处理点数组(向量)的最佳方法,以及是否有成熟的解决方案。优先采用C++实现(尽量使用标准库工具),但其他语言的实现思路也可接受,重点关注方法本身。
更新约束
更新1:图表的第一个(最左侧)和最后一个(最右侧)值必须精确显示。例如数据从时间0、值0开始,即使其他位置使用平均值,图表也需从[0,0]起始,确保初始值清晰可见;最新加入的值也需精确显示。
更新2:数据变换需保持比例与一致性,例如当输入为直线(如y=x)时,变换后仍需保持直线。时间(x值)无约束,采样间隔可变甚至为0(此时取最新传入的值),唯一约束是时间不可回溯。
宽松条件
- 图表可在取值(平均/最小/最大/中位数)或混合加权计算导致的锯齿效应上存在轻微误差;
- 性能要求不高(除非过度消耗),核心需求是避免存储过多输入数据。
内容的提问来源于stack exchange,提问作者Damir Tenishev
相关产品推荐
相关产品推荐

