“C 数组是字符总频率的前缀和:C[c] 给出首列中严格小于 c 的字符数,再与 rankc(L,i) 相加定位同一字符的稳定次序。”
形式陈述
用数组保存结果,顺序扫描可在
若
在
直觉
前缀数组把一条长依赖链的所有中间累计值预先保存。查询前缀时直接读取;查询内部区间时,用逆元撤销左侧已经累计的部分。结合律允许改变括号,却不允许交换元素次序;逆元负责消去,交换律只在常见加法实例中额外成立。
这种预处理适合静态数据。修改
例子与边界
数组
浮点加法在机器算术下不满足精确结合律。顺序前缀、树形 scan 和不同并行归约可能产生不同舍入结果;复杂度公式不因此失效,但数学等价与数值可复现性应分别说明,误差分析见浮点求和。
二维前缀和利用包含—排除由四个角值求矩形和;这需要交换加法群。对非交换操作,没有不声明顺序约定的直接二维推广。
推论与应用
并行前缀扫描在任意幺半群上以
在有限序列的阿贝尔群范围内,差分数组与前缀和互为变换:差分取相邻值之差,前缀累积恢复原序列。这份互逆对应限定在上述阿贝尔群范围内;一般幺半群前缀没有逆元,因而没有对应的无条件差分变换。
前缀计数、积分图、离线频率和扫描线事件都沿用相同边界思想。更高维、动态或输出敏感查询需要额外索引结构,不能从一维静态
参考资料
- 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.