滑动窗口聚合:双栈算法的巧妙解法

Two-Stack Sliding-Window Aggregation

在数据流处理中,滑动窗口聚合是常见需求,但面对无逆运算的聚合函数(如最小值、HyperLogLog),传统方法往往失效。本文介绍了一种简洁高效的双栈算法(Two-Stack Sliding-Window Aggregation),它能在摊还 O(1) 时间内完成任意结合律聚合操作。作者通过抽象 empty、unit、combine 和 finalize 四个函数,将算法推广到均值、近似去重计数等多种场景。该算法不仅避免了 NaN 等异常值的长期污染,还有效控制了浮点误差的累积。无论是固定窗口还是动态窗口,双栈结构都能优雅应对,是处理复杂聚合问题的实用利器。

即使浮点加法不满足结合律,这个算法依然非常有用,因为结果与预期高度吻合,而且每个聚合值仅由窗口内的元素组合而成。

同日更多故事

2026-10-16