当前位置: 首页 > news >正文

数据预处理:前缀和算法详解

数据预处理:前缀和算法详解

文章目录

  • 数据预处理:前缀和算法详解
    • 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. 数组下标从1开始
  2. 前缀和数组初始化为 s[0] = 0
  3. 前缀和数组在数据范围超过int 时使用long long 数据类型

4.实战题目

前缀和算法会在如下题目中经常用到
求区间和
[蓝桥杯 2022 省 A] 求和

相关文章:

  • Vue3 + TypeScript 实现二维码生成与展示
  • poi生成横向文档以及复杂表头
  • 驱动开发硬核特训 · Day 18:深入理解字符设备驱动与子系统的协作机制(以 i.MX8MP 为例)
  • 欧拉计划 Project Euler54(扑克手牌)题解
  • MySQL运算符
  • stack和queue的学习
  • 【实证分析】ESG发展对企业新质生产力影响的研究—来自中国A股上市企业的经验
  • ROS第十二梯:ros-noetic和Anaconda联合使用
  • Python常用的第三方模块之【pymysql库】操作数据库
  • HarmonyOS 5.0应用开发——MVVM模式的应用
  • CF2103F Maximize Nor
  • AI 人工智能模型:从理论到实践的深度解析⚡YQW · Studio ⚡【Deepseek】【Chat GPT】
  • 深度学习中的黑暗角落:梯度消失与梯度爆炸问题解析
  • springboot+vue 支付宝支付(沙箱方式,测试环境使用)
  • VUE Element-ui Message 消息提示组件自定义封装
  • 如何在编译命令中添加灰度标识
  • cnas认证注意事项,cnas认证审核有效期?cnas认证难吗?
  • 思科路由器密码绕过+重置
  • uniapp小程序使用echarts
  • 湖南大学-操作系统实验四
  • 从“土”到“潮”,唢呐何以“圈粉”年轻人
  • 圆桌|如何应对特朗普政府的关税霸凌?一种联合国视角的思考
  • 国泰海通合并后首份业绩报告出炉:一季度净利润增逾391%
  • 女乘客遭顺风车甩客、深夜丢高速服务区,滴滴霸道回应:赔五百元
  • 因高颜值走红的女通缉犯出狱后当主播自称“改邪归正”,账号已被封
  • 2025厦门体育产业采风活动圆满举行