前缀和【一维前缀和与二维前缀和】
创始人
2024-04-10 19:17:11

全文目录

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

😀 一维前缀和

一维前缀和很简单,就是高中数学中的前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]

在这里插入图片描述


完结散花🌈🌈🌈

在这里插入图片描述

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...