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

1498

被折叠的 条评论
为什么被折叠?



