前缀和算法


一、前缀和算法概念

前缀和算法,也称为累积和算法,是一种用于高效计算数组或序列前缀和的方法。前缀和指的是数组中前n个元素的和,其中n可以是任意位置。前缀和算法的主要思想是通过预处理构建一个额外的数组或序列,其中每个元素存储原数组对应位置之前的所有元素的和。

前缀和算法的优势在于可以在O(1)的时间复杂度内查询任意位置的前缀和。
需要频繁查询或计算区间和的问题非常有用。
例如求解数组中某个区间内的元素和、求解连续子数组和最大的问题等。

二、具体实现

1.一维前缀和

前缀和数组实现步骤:
1.创建一个与原数组形状相同的数组。
2.对于索引0的元素单独赋值,否则在后续创建前缀和数组时会越界错误。
3.一个for循环遍历索引,核心公式如下
s u m i = s u m i − 1 + a r r a y i sum_i=sum_{i-1}+array_i sumi=sumi1+arrayi

查询函数实现步骤
说明:前面得到的前缀和数组都是从第一个元素开始的,也就是说左边界是索引0,右边界可变,但实际上我们想得到任意区间范围内的,也就是左右边界都可以自己设置。这样一旦创建好了前缀和数组,后续查找不需要使用循环,减少了时间复杂度。
1.需要接受的变量:【l:左边界】 【r:右边界】 【sum_array:已经得到的前缀和数组】
2.核心公式:(注意是r减去l-1!!!!!)
a n s w e r = s u m r − s u m l − 1 answer=sum_r-sum_{l-1} answer=sumrsuml1

代码如下(示例):

import numpy as np

def creat_front_sum(array):
    sum_array=np.zeros_like(array)
    sum_array[0]=array[0]
    for i in range(1,len(array)):
        sum_array[i]=sum_array[i-1]+array[i]
    return sum_array

def query(l,r,sum_array):
#防止越界
	if l==0:
		answer=sum_array[r]
	else:
    	answer=sum_array[r]-sum_array[l-1]
    return answer

if __name__=='__main__':
    array=np.array([1,2,3,4,5,6
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值