Skip to content

前缀和

Prefix sum · Cumulative sum

预先累计序列前缀,使静态区间和查询可由两个前缀值相减得到。

条目类型
算法

形式陈述

给定数组或有限序列 a1,,an,以及幺半群 (M,,e),定义左前缀聚合

P0=e,Pi=Pi1ai=a1ai.

顺序扫描可在 O(n) 次运算内构建全部 Pi,之后每个前缀查询直接读取 Pr。这里只需要结合律与空前缀单位元,不需要交换律或逆元。

(M,,e) 进一步是,则闭区间 alar 可由

Pl11Pr

O(1) 次群运算内恢复,因为 Pr=Pl1(alar)。非交换群中逆元必须放在左侧;写成 PrPl11 一般错误。普通数值前缀和位于加法阿贝尔群中,公式退化为 PrPl1

直觉

前缀数组把一条长依赖链的所有中间累计值预先保存。查询前缀时直接读取;查询内部区间时,用逆元撤销左侧已经累计的部分。结合律允许改变括号,却不允许交换元素次序;逆元负责消去,交换律只在常见加法实例中额外成立。

这种预处理适合静态数据。修改 aj 会影响所有 Piij),直接维护需要线性时间;动态版本必须换成树状或分层摘要。

闭区间与两个前缀边界
例子与边界

数组 [2,1,4,3] 的加法前缀为 [0,2,3,7,10],区间 [2,4] 的和是 102=8。异或构成阿贝尔群,也可用同一边界消去;字符串拼接只有幺半群结构,能求前缀串,却不能由两个前缀串一般地“相除”得到中间子串。

浮点加法在机器算术下不满足精确结合律。顺序前缀、树形 scan 和不同并行归约可能产生不同舍入结果;复杂度公式不因此失效,但数学等价与数值可复现性应分别说明,误差分析见浮点求和

二维前缀和利用包含—排除由四个角值求矩形和;这需要交换加法群。对非交换操作,没有不声明顺序约定的直接二维推广。

推论与应用

并行前缀扫描在任意幺半群上以 Θ(n) 工作、O(logn) 深度计算全部前缀。Fenwick 树则在标准阿贝尔群更新模型下支持动态点增量和前缀查询。两者实现的是不同更新/并行接口,不能只因都输出前缀就互换复杂度。

在有限序列的阿贝尔群范围内,差分数组与前缀和互为变换:差分取相邻值之差,前缀累积恢复原序列。equivalent_to 只在这一共同范围内成立;一般幺半群前缀没有逆元,因而没有对应的无条件差分变换。

前缀计数、积分图、离线频率和扫描线事件都沿用相同边界思想。更高维、动态或输出敏感查询需要额外索引结构,不能从一维静态 O(1) 区间和直接外推。

参考资料
  • 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.
关系图谱11 个相邻概念 · 4 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系