WAYNETS.ORG

Game and Program

前缀和

作者:

发表于

Context Polling System Post-Processing Renderer

前缀和(Prefix Sum) 是一种用于快速计算数组区间和的技术。

  • 在一维数组中,它可以让你用 O(1) 的时间计算任意区间 [l, r] 的元素和。
  • 二维数组中,它可以让你用 O(1) 的时间计算任意子矩阵的元素和。

前缀和是一种空间换时间的优化手段。

它主要用于解决:

  • 快速查询任意区间或子矩阵的和
  • 大大减少暴力遍历矩阵的时间复杂度,从 O(n²) → O(1)
  • 常用于:
    • 图像处理(图像积分)
    • 动态规划优化(比如最大子矩阵和)
    • 算法竞赛中常用的技巧题、滑动窗口题等

一维前缀和

二维前缀和

二维前缀和的定义

给定一个二维数组 A[i][j],我们构建一个辅助数组 S[i][j]

得出的结果表示包含左上角 (1,1) 到右下角 (i,j) 的矩形区域的和。

S[i][j] = A[1][1] + A[1][2] + ... + A[i][j]
        = 从 (1,1) 到 (i,j) 这个矩形区域内所有元素的和

前缀和的构建公式

S[i][j] = A[i][j] + S[i-1][j] + S[i][j-1] - S[i-1][j-1];

画图理解

为了避免重复加,S[i][j] 需要“加当前值 + 上边 + 左边 - 重复部分”
+---+---+---+
| A | A | A |
+---+---+---+
| A | A | x |  ← 你正在处理这个格子 x = A[i][j]
+---+---+---+

Leave a comment