差分与前缀和是一对互逆的操作,常常用于处理区间问题,差分法是解决区间加减问题,前缀和是解决区间求和问题的常用办法。
**差分法**
差分法的应用主要是用于处理区间问题。当某一个数组要在很多不确定的区间,加上相同的一个数。我们如果每个都进行加法操作的话,那么复杂度 O(nm) 是平方阶的,非常消耗时间。
如果我们采用差分法,将数组拆分,构造出一个新的拆分数组,通过对数组区间的端点进行加减操作,最后将数组和并就能完成原来的操作。
差分法的特点:
将对于区间的加减操作转化为对于端点的操作;
时间复杂度为 O(n);
用于维护区间的增减但不能维护乘除;
差分后的序列比原来的数组序列多一个数。
**前缀和**
前缀和算法的应用主要也是用于处理区间内求和问题。
前缀和是指某序列的前 n 项和,可以把它理解为数学上的数列的前 n 项和。当对于某一数组区间进行多次询问,[L,r] 的和时,如果正常处理,那么我们每次都要 [l,r]。查询 N 次,那么时间复杂度也是 O(nm) 也是平方阶的。
前缀和的特点:
将对于区间的求和操作转化为对于端点值的减法的操作;
区间求和操作的时间复杂度为 O(1);
数组存放时要从 1 开始;
前缀和数组比原来的数组序列多一个数,第 0 个