前缀和与差分、树状数组与线段树概述
前置知识
- 前缀和
- 差分
- 树状数组
- 线段树
我们知道,前缀和、差分、树状数组与线段树是四个用来处理区间问题的数据结构。接下来,作者为大家准备了这四种数据结构的一些特征。
注:本文讨论一维情况。
时间复杂度比较
下表整理了各个数据结构适用的一些基础区间问题。
以下
n
n
n 为元素个数,
m
m
m 为修改次数,
q
q
q 为查询个数。
数据结构 | 适用的基础区间问题及其实现的时间复杂度 | 是否在线 |
---|---|---|
前缀和 | 单点修改区间查询 O ( n + m + q ) O(n+m+q) O(n+m+q) | 否 |
差分 | 区间修改单点查询 O ( n + m + q ) O(n+m+q) O(n+m+q) | 否 |
树状数组 | 单点修改区间查询 O ( m log n + q log n ) O(m\log n+q\log n) O(mlogn+qlogn) | 是 |
线段树 | 单点修改区间查询 O ( m log n + q log n ) O(m\log n+q\log n) O(mlogn+qlogn),区间修改区间查询 O ( m log n + q log n ) O(m\log n+q\log n) O(mlogn+qlogn) | 是 |
当然,我们还可以使用双重数据结构来维护一些特殊问题。
数据结构 | 适用的基础区间问题及其实现的时间复杂度 | 是否在线 |
---|---|---|
前缀和与差分 | 区间修改区间查询 O ( n + m + q ) O(n+m+q) O(n+m+q) | 否 |
差分与树状数组 | 区间修改单点查询 O ( m log n + q log n ) O(m\log n+q\log n) O(mlogn+qlogn) | 是 |
空间复杂度比较
有了时间复杂度,当然还要讨论空间复杂度。
下表与上文一一对应。
数据结构 | 适用的基础区间问题及其实现的时间复杂度 | 是否在线 |
---|---|---|
前缀和 | 单点修改区间查询 O ( n ) O(n) O(n) | 否 |
差分 | 区间修改单点查询 O ( n ) O(n) O(n) | 否 |
树状数组 | 单点修改区间查询 O ( n ) O(n) O(n) | 是 |
线段树 | 单点修改区间查询 O ( n log n ) O(n\log n) O(nlogn),区间修改区间查询 O ( n log n ) O(n\log n) O(nlogn) | 是 |
当然,我们还可以使用双重数据结构来维护一些特殊问题。
数据结构 | 适用的基础区间问题及其实现的时间复杂度 | 是否在线 |
---|---|---|
前缀和与差分 | 区间修改区间查询 O ( n ) O(n) O(n) | 否 |
差分与树状数组 | 区间修改单点查询 O ( n ) O(n) O(n) | 是 |
以上就是关于前缀和、差分、树状数组与线段树的比较了。