前缀和【一维前缀和与二维前缀和】

news2024/9/20 19:28:33

全文目录

  • 😀 一维前缀和
    • 🤔 构建一维前缀和数组
    • 😵‍💫 子序列的和
  • 😀 二维前缀和
    • 🤔 构建二维前缀和数组
    • 😵‍💫 子矩阵的和

😀 一维前缀和

一维前缀和很简单,就是高中数学中的前n项和。

设有一个数组a[]

a = {a[1], a[2], a[3], a[4], a[5], a[6], ... , a[n]};

还有一个数组 S[]

S = {S[1], S[2], S[3], S[4], S[5], S[6], ... , S[n]};
S[1] = a[1];
S[2] = a[1] + a[2];
S[3] = a[1] + a[2] + a[3];
S[4] = a[1] + a[2] + a[3] + a[4];
...
S[n] = a[1] + a[2] + a[3] + a[4] + ... + a[n];

那么就称 S[]a[] 的前缀和数组。我们可以利用前缀和数组快速求出原数组中一段区域内的总和


🤔 构建一维前缀和数组

小技巧:

数组的下标是从 0 开始的,我们可以多开一个空间,让a[]的下标从 1 开始。
在构建前缀和数组时,可以将多开一个空间,将S[0] 初始化为0,并从S[1] 开始构建,这样就可以让前缀和数组中的全部元素都使用同一公式来构建。

// n表示数据个数
// 下标从1开始,S[0] = 0; 
for (int i = 1; i <= n; i++)
{
	S[i] = S[i - 1] + a[i];
}

😵‍💫 子序列的和

我们可以用前缀和数组来求原数组中 [l, r] 的和

a[l] + ... + a[r] = S[r] - S[l - 1]

根据公式推导一下:
S[r] = a[1] + a[2] + a[3] + ... + a[r]
S[l - 1] = a[1] + a[2] + a[3] + ... + a[l - 1]
S[r] - S[l - 1] = a[l] + a[l + 1] + ... + a[r]

😀 二维前缀和

如果说一维前缀和是线性的,那么二维前缀和就是平面的。


🤔 构建二维前缀和数组

为了方便构造前缀和数组,数组的下标都从1开始。

二维前缀和数组S[i][j] 是原数组中左上角的和:

S[4][3] 为例:

在这里插入图片描述
S[4][3] 就是原数组中红色区域的和。

公式:
a[i][j] 左边的数据和上边的数据加上,再将都加的数据减去一份,在加上 a[i][j]

S[i, j] = S[i, j - 1] + S[i - 1, j] - S[i - 1, j - 1] + a[i, j]

根据画图来感受一下构建过程:

先将左边的数据加上,S[i, j - 1] :

在这里插入图片描述

然后将上边的数据加上,S[i, j - 1] + S[i - 1, j]:

在这里插入图片描述

因为S[i - 1][j - 1] 被加了两次,所以需要 减去一份S[i - 1][j - 1].

将多加的数据减去,S[i, j - 1] + S[i - 1, j] - S[i - 1][j - 1]:

在这里插入图片描述

最后将 a[i][j] 加上,就是S[i][j]:

S[i, j] = S[i, j - 1] + S[i - 1, j] - S[i - 1, j - 1] + a[i, j]
在这里插入图片描述


😵‍💫 子矩阵的和

二维前缀和一般用来求子矩阵的和,子矩阵以 (x1, y1) 为左上角,(x2, y2) 为右下角:
在这里插入图片描述

公式:
子矩阵的和跟构建二维前缀和数组时的公式很像,将多余的减去,再将多减的加上

子矩阵的和 
= 
S[x2, y2] - S[x1 - 1, y2] - S[x2, y1 - 1] + S[x1 - 1, y1 - 1]

同样的画图来感受一下:

S[x2,y2]:
在这里插入图片描述

减去子矩阵上边的数据,S[x2, y2] - S[x1 - 1, y2]
在这里插入图片描述

减去子矩阵左边的数据,S[x2, y2] - S[x1 - 1, y2] - S[x2, y1 - 1]
在这里插入图片描述

S[x1 - 1][y1 - 1] 被减去了两次,所以需要将这块区域补上,
S[x2, y2] - S[x1 - 1, y2] - S[x2, y1 - 1] + S[x1 - 1, y1 - 1]

在这里插入图片描述


完结散花🌈🌈🌈

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/22072.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]java毕业设计铁路法院数字档案管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[附源码]java毕业设计网上花店系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

同步时序逻辑电路

分类 按逻辑功能不同分为&#xff1a;RS触发器、D触发器、JK触发器、T触发器。按触发方式不同分为&#xff1a;电平触发器、边沿触发器和脉冲触发器。按电路结构不同分为&#xff1a;基本RS触发器和钟控触发器。按存储数据原理不同分为&#xff1a;静态触发器和动态触发器。按…

【从零开始学微服务】03.软件架构的演化过程

大家好&#xff0c;欢迎来到万猫学社&#xff0c;跟我一起学&#xff0c;你也能成为微服务专家。 目前大部分的企业系统和互联网应用都是采用Web的形式提供服务能力&#xff0c;根据系统的组织方式和部署结构&#xff0c;我们通常把软件架构的演化过程分为以下几个阶段&#xf…

微信小程序实战,基于vue2实现瀑布流

1、什么是瀑布流呢&#xff1f; 瀑布流&#xff0c;又称瀑布流式布局。是比较流行的一种网站页面布局&#xff0c;视觉表现为参差不齐的多栏布局&#xff0c;随着页面滚动条向下滚动&#xff0c;这种布局还会不断加载数据块并附加至当前尾部。 瀑布流对于图片的展现&#xff0c…

HTML+CSS+JS大作业:生态环境网站设计——环境保护主题 大学生环保主题网页制

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 环境保护 | 保护地球 | 校园环保 | 垃圾分类 | 绿色家园 | 等网站的设计与制作HTML期末大学生网页设计作业 HTML&#xff1a;结构 CSS&#xff1a;样…

【计算机编程基础】

计算机编程基础1 本节目标2 编程语言2.1 编程2.2 计算机语言2.3 编程语言2.4 翻译器2.5 编程语言和标记语言区别3 计算机基础3.1 计算机组成3.2 数据存储3.3 数据存储单位3.4 程序运行1 本节目标 说出什么是编程语言区分编程语言和标记语言的不同说出常见的数据存储单位及其换…

Maven入门学习——使用IDEA创建Maven文件的两种方式(内含配置setting文件)

使用IDEA创建Maven文件的两种方式一、前言二、前期准备&#xff08;配置setting文件&#xff09;1.修改文件放置位置2.改用阿里云镜像3.修改默认JDK版本三、构建Maven项目1.新建空项目2.设置项目中Maven版本3.新建模块4.配置模块5.测试四、使用插件创建Maven项目1.新建Maven项目…

Python字典制作“编码本”“密码本”,“试炼”加、解密文本操作

【点击此处跳转笔记正文】Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不仅仅是基础那么简单…… My CSDN主页、My HOT博、My Python 学习个人备忘录好文力荐、 老齐教室 自学并不是什么神秘的…

【k8s】2、二进制安装k8s

文章目录一、环境准备二、操作系统的初始化三、部署Etcd集群1、 准备cfssl证书生成工具2、生成etcd证书3、部署Etcd集群四、安装docker(所有node节点)五、部署master组件1、 准备证书2、 准备二进制文件、token3、 启动kube-apiserver服务4、启动scheduler服务5、启动controlle…

SpringBoot SpringBoot 开发实用篇 4 数据层解决方案 4.15 ES 文档操作

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇4 数据层解决方案4.15 ES 文档操作4.15.1 文档操作4.15.2 小结4 数据…

最新最全面的Spring详解(四)——面向切面编程

前言 本文为 【Spring】面向切面编程 相关知识&#xff0c;下边将对AOP概述&#xff08;包含什么是AOP、AOP相关术语、Spring AOP通知类型&#xff09;&#xff0c;Spring AOP能力和目标&#xff0c;AOP代理&#xff0c;AspectJ风格的支持&#xff08;包含对于 AspectJ的支持、…

[附源码]java毕业设计图书馆自习室管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

LIO-SAM

3D激光SLAM&#xff1a;位姿融合输出&#xff0c;LIO-SAM 提出了一个利用GT-SAM的紧耦合激光雷达惯导里程计的框架。实现了高精度、实时的移动机器人的轨迹估计和建图。这里主要讲解如何通过imu来进行位姿融合输出的。 LIO-SAM的全称是&#xff1a;Tightly-coupled Lidar Iner…

修复微信小程序不能获取头像和昵称的bug,微信小程序新版头像昵称API使用

导读&#xff1a; 大厂程序员都是有KPI绩效考核的&#xff0c;所以他们不能闲着&#xff0c;每天要想着怎么优化程序代码、怎么满足奇葩用户的需求&#xff0c;所以苦逼了我们这些小公司程序员&#xff0c;微信一个小小的API接口改动&#xff0c;可能就让一个小公司因此损失惨…

人工智能——大白话熟悉目标检测基本流程

&#x1f466;&#x1f466;一个帅气的boy&#xff0c;你可以叫我Love And Program &#x1f5b1; ⌨个人主页&#xff1a;Love And Program的个人主页 &#x1f496;&#x1f496;如果对你有帮助的话希望三连&#x1f4a8;&#x1f4a8;支持一下博主 大白话熟悉目标检测基本…

天然产物化合物库在肥胖中的潜在靶点 | MedChemExpress

脂肪有分类&#xff1f;都说“燃脂”&#xff0c;但很少有人了解脂肪组织。其实脂肪组织主要分为两类&#xff1a;白色脂肪组织 (WAT) 和棕色脂肪组织 (BAT)。白色脂肪以甘油三酯的形式储存多余的能量&#xff0c;而棕色脂肪则通过消耗能量产热&#xff0c;在保暖和抵抗肥胖中起…

31.nacos集成Feign和Gateway实例(springcloud)

一、项目nacos-client-a 1.pom.xml文件 新增了springcloud的依赖 新增了springcloud的依赖管理 新增了feign依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://…

ArcMap10.6以上版本添加天地图底图

文章目录 申请天地图服务Key在ArcMap10.7中添加天地图服务注意点 申请天地图服务Key 天地图API&#xff1a;http://lbs.tianditu.gov.cn/server/MapService.html 需要登录后进入控制台&#xff0c;申请免费的Key&#xff1a; 在ArcMap10.7中添加天地图服务 天地图API提供…

(十)Spring之回顾反射机制

文章目录反射机制四要素Spring反射机制底层原理上一篇&#xff1a;&#xff08;九&#xff09;Spring之Bean的循环依赖问题反射机制四要素 反射机制调用方法&#xff0c;一般涉及到4个要素&#xff1a; 调用哪个对象的哪个方法传什么参数返回什么值 一般分为这几个步骤&…