数据预处理:前缀和算法详解
数据预处理:前缀和算法详解
文章目录
- 数据预处理:前缀和算法详解
- 1.算法原理
- 2.算法作用
- 3.C++代码实现
- 4.实战题目
1.算法原理
基本概念
前缀和(Prefix Sum)是一种常用的数据预处理技术,它可以快速求解区间和问题,大大降低查询的时间复杂度。在处理一系列数据的区间查询时,前缀和能够提供高效的解决方案。
其核心思想是:通过构建一个新数组,其中每个元素存储原数组前i个元素之和.
数学原理
构建过程
2.算法作用
核心功能
• 快速区间求和:可 O(1) 时间内计算任意区间 [l, r] 的和
• 降低时间复杂度:将区间求和的复杂度从 O(n) 优化到 O(1)
计算公式
适用场景
1. 频繁查询数组区间和
2. 二维前缀和(矩阵区域和)
3.C++代码实现
#include <iostream>
using namespace std;
const int N = 1e5+10;
int a[N], s[N];
int main() {int n, m;cin >> n >> m;// 输入数组(下标从1开始)for(int i = 1; i <= n; i ++) cin >> a[i];// 构建前缀和数组for(int i = 1; i <= n; i ++) s[i] = s[i-1] + a[i];// 处理查询while(m --) {int l, r;cin >> l >> r;cout << s[r] - s[l-1] << endl;}return 0;
}
注意事项
- 数组下标从1开始
- 前缀和数组初始化为 s[0] = 0
- 前缀和数组在数据范围超过int 时使用long long 数据类型
4.实战题目
前缀和算法会在如下题目中经常用到
求区间和
[蓝桥杯 2022 省 A] 求和