前缀和

概述

前缀和(Prefix Sum)是数组的一种预处理技术,构造前缀和数组 ,使得任意区间 的求和可在 时间内完成。前缀和的构造时间为 。在并行计算中,并行前缀和(扫描算法)可在 时间内使用 的 work 完成。

定义

前缀和(Prefix Sum)

给定数组 ,其前缀和数组 定义为:

利用前缀和数组,任意区间和可在 时间内计算:

并行前缀和(Parallel Prefix Sum / Scan)

并行前缀和(扫描算法)使用动态多线程模型,在 的 span 和 的 work 内完成前缀和计算。算法采用上-下扫描(up-sweep / down-sweep)两阶段:

  1. 上扫描:自底向上构建部分和的树结构
  2. 下扫描:自顶向下将部分和分配到正确位置

核心性质

性质描述备注
构造时间(串行)一次遍历即可
区间查询
空间开销需要额外的前缀和数组
并行 span适合并行化
并行 workwork-optimal
并行度足够利用多核处理器

应用场景

  • 区间求和查询:给定数组,快速回答任意区间的元素之和
  • 差分数组:前缀和的逆运算,用于区间批量更新
  • 并行算法基础:许多并行算法(如并行归并排序、并行筛选)的基础组件
  • 图像处理:积分图(integral image)用于快速计算矩形区域特征
  • 字符串哈希:利用前缀和计算子串的哈希值,实现 子串比较
  • 计数排序/基数排序:前缀和用于确定每个元素在排序结果中的位置

串行 vs 并行前缀和

比较维度串行前缀和并行前缀和
Work
Span
并行度1
适用场景单处理器多核/并行系统

参见