一、浅析数据结构之用处和高级数据结构之特性
数据结构者,谓之数据之关系。单论数据特性,也不过是数据之间的存储方式罢。但要说更深层次之作用,是运用其存储之特性,建立数学之模型,更方便地才处理数据尔。
以上是鲁迅同志说的(鲁迅: exm e x m ???),其实一切的数据结构不过就是一种用于处理数据的、成熟的、合理的结构封装。较低级的数据结构不会支持什么操作,仅是维护自身的存储秩序;而高级数据结构则可以支持许多操作——其实也不过是维护自身数据的秩序而已,只不过在维护其自身秩序的同时,由于其本身结构复杂且特点鲜明,所以会产生许多很优化的算法。
(鲁迅:看在你讲得这么好饶了你!)
而今天我们主要介绍有关 RMQ R M Q 、 RSQ R S Q 问题的、较为基础的高级数据结构。
二、先来介绍分块思想吧
(一)基本性质与证明
其实从本质上来讲,分快更像是一种思想。分块,顾名思义,就是将一个区间分成几块,然后对于每个询问,整合一个或者多个甚至全部区间的信息。但是在这种整合不是随便整合,必须要有技巧、有目的地整合,才会减小时间复杂度。
先看一道例题:
现在你有一个长度为 n n 的序列,有 个操作:
1.修改某位置的元素的值
2.将一段区间的元素加上或减去一个值。
3.求一段区间的元素的最大值。
n n , ≤ 50000 50000
让我们考虑分块:
首先第一步,进行区间划分,在这一步我们考虑将整个序列划分成 n−−√ n 块,这可以使得其总查询时间最快
证明:
对于搜查整个序列中的一段区间,设这段区间内的完整分块块数是 C C 块,每一段均匀的分块都 个元素,那么这一段区间的最复杂形式为:有 C C 个完整区间,并且闭区间[ , r r ]还在两端包括有不完整的分好的块:
——|—【————|——————|——————|————】—|————
上图中【】表示区间,|与|之间表示分好的均匀块(qwq博主不知道怎么画精美的图啦)
我们可以发现该区间内有 段完整区间, 2 2 段不完整区间;而同时,不完整区间的元素数量之和,绝对小于等于 ;那么我们对于这一个区间而言,共需要进行最多