小熊奶糖(BearCandy)
小熊奶糖(BearCandy)
发布于 2025-12-04 / 0 阅读
0
0

《前缀和与差分 · 离散微积分》完整笔记

一、核心类比关系

1.1 基本对应

连续微积分 离散计算 符号定义(离散)
积分 前缀和 S[i] = Σ_{k=1}^{i} a[k]
微分 差分 d[i] = a[i] - a[i-1]
微积分基本定理 互逆运算 前缀和与差分互为逆变换

1.2 互逆性体现

连续形式(微积分基本定理):
[
\frac{d}{dx}\left( \int_a^x f(t)dt \right) = f(x)
]
离散形式:

  • 对数组 a 先求前缀和得 S,再对 S 求差分 → 得到原数组 a
  • 对数组 a 先求差分得 d,再对 d 求前缀和 → 得到原数组 a

代码验证:

# 原数组
a = [2, 3, 1, 4, 5]

# 前缀和(积分)
prefix = []
s = 0
for x in a:
    s += x
    prefix.append(s)  # [2, 5, 6, 10, 15]

# 对前缀和做差分(微分)
diff_from_prefix = [prefix[0]]
for i in range(1, len(prefix)):
    diff_from_prefix.append(prefix[i] - prefix[i-1])  # [2, 3, 1, 4, 5] = a

# 差分(微分)
diff = [a[0]]
for i in range(1, len(a)):
    diff.append(a[i] - a[i-1])  # [2, 1, -2, 3, 1]

# 对差分做前缀和(积分)
prefix_from_diff = []
s = 0
for x in diff:
    s += x
    prefix_from_diff.append(s)  # [2, 3, 1, 4, 5] = a

二、离散形式 vs 连续形式的详细对比

2.1 本质区别表

对比维度 连续微积分(积分/微分) 离散形式(前缀和/差分)
定义域 实数区间(连续) 整数索引(离散)
数学本质 极限过程(分析学) 有限运算(代数学)
运算 积分:无穷求和极限
微分:差商极限
前缀和:有限加法
差分:相邻减法
几何意义 积分:曲线下面积
微分:切线斜率
前缀和:条形图累积高度
差分:相邻高度差
逆运算条件 需要函数连续、可导等条件 无条件精确成立(纯代数)
信息损失 积分会丢失常数项
微分会丢失原函数常数信息
前缀和保留全部信息
差分丢失首项前的信息
物理量纲 积分:函数值×长度
微分:函数值/长度
前缀和:函数值×1(无量纲)
差分:函数值差

2.2 离散形式的局限性

  1. 无法处理非整数点:只能计算整数索引位置的"积分/微分"
  2. 无法精确描述瞬时变化:差分是固定步长(通常为1)的平均变化
  3. 缩放敏感性:连续积分有 dx,离散默认步长为1

2.3 桥梁视角:采样理论

当离散序列是连续函数的采样时:

设采样间隔为 Δx,采样点:x_i = i·Δx
函数值:f_i = f(x_i)

连续积分近似:∫_{x_0}^{x_n} f(x)dx ≈ Δx · Σ_{i=0}^{n-1} f_i  (矩形法)

连续微分近似:f'(x_i) ≈ (f_{i+1} - f_i)/Δx  (前向差分)

当 Δx = 1 时,与标准前缀和/差分完全对应(忽略量纲)

三、应用模式对比

3.1 连续积分 vs 前缀和应用

应用场景 连续积分方法 前缀和方法(离散)
求区间累积量 定积分:∫_a^b f(x)dx sum[l..r] = S[r] - S[l-1]
物理意义 求位移、面积、质量等 求子数组和、区间计数等
时间复杂度 可能需数值计算(O(n)或更复杂) O(1)查询(预处理O(n))

前缀和区间查询公式:
[
\text{sum}[l, r] = S[r] - S[l-1] \quad (\text{设 } S[0] = 0)
]

3.2 连续微分 vs 差分应用

应用场景 连续微分方法 差分方法(离散)
求变化率 导数 f'(x) 差分 d[i] = a[i] - a[i-1]
区间修改优化 对导数积分实现原函数修改 差分数组 + 前缀和实现区间加常数
边缘检测 图像梯度(连续近似) 相邻像素差

差分数组区间更新技巧:

# 原数组 a,长度为 n
# 想在区间 [l, r] 上每个元素加 val
d = [0]*(n+1)  # 差分数组(多一位方便处理)
d[l] += val
d[r+1] -= val  # 如果 r+1 越界则省略

# 重建数组(对d做前缀和)
for i in range(1, n):
    d[i] += d[i-1]
for i in range(n):
    a[i] += d[i]

时间复杂度:O(1)修改 + O(n)重建,优于直接修改的O(n)


四、扩展概念与多维情形

4.1 高维推广

维度 连续形式 离散形式
一维 定积分/偏导 一维前缀和/差分
二维 二重积分/梯度 二维前缀和/差分(图像处理)
三维 三重积分/三维梯度 三维前缀和(体数据)

二维前缀和公式:
[
S[i][j] = a[i][j] + S[i-1][j] + S[i][j-1] - S[i-1][j-1]
]
二维区间和查询:
[
\text{sum}(x1,y1)→(x2,y2) = S[x2][y2] - S[x1-1][y2] - S[x2][y1-1] + S[x1-1][y1-1]
]

4.2 高阶差分与积分

  • 高阶差分:连续应用差分算子

    Δ²a[i] = Δ(Δa[i]) = (a[i]-a[i-1]) - (a[i-1]-a[i-2])
           = a[i] - 2a[i-1] + a[i-2]
    

    对应连续的二阶导数近似

  • 高阶前缀和:多次应用前缀和

    一次前缀和:S¹[i] = Σ_{k=1}^i a[k]
    二次前缀和:S²[i] = Σ_{k=1}^i S¹[k]
    

    在组合数学中用于求部分和序列的部分和

4.3 生成函数视角

  • 前缀和 对应生成函数乘以 1/(1-x)

    序列 {a_n} 的生成函数 A(x) = Σ a_n x^n
    前缀和序列的生成函数 = A(x) / (1-x)
    

    类似积分算子:∫ f(t)dt ↔ F(s)/s(拉普拉斯变换)

  • 差分 对应生成函数乘以 (1-x)

    差分序列的生成函数 = A(x) · (1-x)
    

    类似微分算子:d/dx f(x) ↔ sF(s)(拉普拉斯变换)


五、重要注意事项

5.1 边界处理

  1. 前缀和:通常定义 S[0] = 0,使公式 S[r]-S[l-1] 对 l=1 也成立
  2. 差分:一阶差分数组比原数组长度少1(前向差分),或需要定义虚拟边界

5.2 数值稳定性

  • 连续积分:数值积分有截断误差、舍入误差
  • 离散前缀和:可能溢出(大数累加),需用大整数或取模
  • 差分:可能放大浮点数的舍入误差

5.3 时间复杂度权衡

操作 朴素方法 前缀和/差分优化 应用场景
区间求和 O(n) O(1) 频繁查询静态数组
区间加常数 O(n) O(1)修改+O(n)重建 批量更新后查询
区间加序列 O(n) 二次差分优化 等差数列区间加

六、总结要点

  1. 思想同构:前缀和≈积分,差分≈微分,本质是"累积"与"变化"的对偶关系
  2. 离散特殊性:无极限过程,纯代数运算,精确互逆
  3. 应用价值
    • 前缀和:区间查询快速化
    • 差分:区间修改快速化
    • 结合使用:解决"区间修改+区间查询"问题(树状数组、线段树替代方案)
  4. 连续桥梁:当Δx→0时,离散形式收敛到连续形式(数值分析基础)
  5. 多维扩展:自然推广到高维,处理图像、网格等问题

七、经典问题映射

问题类型 连续对应 离散解法
区间和查询 定积分求面积 一维前缀和
矩阵子矩阵和查询 二重积分求体积 二维前缀和
区间加常数后查询 对函数加常数后积分 差分数组+前缀和
区间加等差数列后查询 对函数加一次函数后积分 二次差分
滑动窗口平均/最大值 局部平均(卷积) 前缀和或单调队列
路径计数(网格) 路径积分 动态规划(递推求和)

最后提醒:虽然离散与连续形式有深刻的类比关系,但处理具体问题时必须注意离散数据的边界、索引和特殊条件,不能盲目套用连续结论。这种对应关系更多提供的是思维模型算法设计灵感,而不是严格的数学等价。


评论