“数组存储频数,前缀和把频数变成位置。计数排序是小整数键、直方图与离散事件聚合的基础,也是 LSD 基数排序保持稳定性的关键子过程。更一般的整数排序会在 $k$ 太大而不能直接开桶时改用分位、…”
形式陈述 ​
顺序扫描可在
若
在
直觉
前缀数组把一条长依赖链的所有中间累计值预先保存。查询前缀时直接读取;查询内部区间时,用逆元撤销左侧已经累计的部分。结合律允许改变括号,却不允许交换元素次序;逆元负责消去,交换律只在常见加法实例中额外成立。
这种预处理适合静态数据。修改
例子与边界
数组
浮点加法在机器算术下不满足精确结合律。顺序前缀、树形 scan 和不同并行归约可能产生不同舍入结果;复杂度公式不因此失效,但数学等价与数值可复现性应分别说明,误差分析见浮点求和。
二维前缀和利用包含—排除由四个角值求矩形和;这需要交换加法群。对非交换操作,没有不声明顺序约定的直接二维推广。
推论与应用
并行前缀扫描在任意幺半群上以
在有限序列的阿贝尔群范围内,差分数组与前缀和互为变换:差分取相邻值之差,前缀累积恢复原序列。equivalent_to 只在这一共同范围内成立;一般幺半群前缀没有逆元,因而没有对应的无条件差分变换。
前缀计数、积分图、离线频率和扫描线事件都沿用相同边界思想。更高维、动态或输出敏感查询需要额外索引结构,不能从一维静态
参考资料
- Thomas H. Cormen et al., Introduction to Algorithms, 4th ed., MIT Press, 2022, prefix computations and range sums.
- Guy E. Blelloch, “Prefix Sums and Their Applications,” in Synthesis of Parallel Algorithms, Morgan Kaufmann, 1990.
- Donald E. Knuth, The Art of Computer Programming, Vol. 1, 3rd ed., Addison-Wesley, 1997, cumulative sums and finite differences.