python前缀和

前缀和是用于快速计算数组区间和的技术,其时间复杂度为O(n)。通过差分数组,可以将原数组相邻元素的差存储,实现对区间元素的修改操作,提升效率至O(1)。差分是前缀和的逆运算,两者结合能有效地解决动态修改和查询区间和的问题。
摘要由CSDN通过智能技术生成

1.前缀和的概念:

对于数组a[0]~a[n-1] (长度为n),前缀和sum[i]等于a[0]~a[n-1]的和;
sum[0]=a[0]
sum[1]=a[0]+a[1]
sum[2]=a[0]+a[1]+a[2] …………
在O(n)时间内求所有前缀和:sum[i]=sum[i-1]+a[i] (递推)
代码清单1-1:

n=10
a=[i for i in range(n)]
print(a)         #数组初始化即a

sum=[0]*n
for i in range(1,n):
    sum[i]=a[i]+sum[i-1]       #递推
print(sum)

输出:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 3, 6, 10, 15, 21, 28, 36, 45]

2.区间问题

计算前缀和的作用:能快速计算出区间和,优化到O(1)的计算

a[i]+a[i-1]+……+a[j-1]+a[j]=sum[j]-sum[i-1]

3.前缀和与差分

一维差分数组D[k]=a[k]-a[k-1],即原数组a[ ]的相邻元素的差

在这里插入图片描述
a[k]=D[1]+D[2]+…+D[k]
a[ ]是D[ ]的前缀和
差分是前缀和的逆运算:把求a[k]转化为求D的前缀和

4.差分数组:提升修改的效率

把区间[L,R]内每个元素a[ ]加上d,只需把对应的D[ ]做以下操作:
把D[L]加上d:D[L]+=d
把D[R+1]减去d:D[R+1]-=d

利用D[ ],能极快解决修改区间[L,R]内元素的目的
说明:前缀和a[x]=D[1]+D[2]+…+D[x],有:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柒七77.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值