可持久化 - 维护数据集的历史状态

I.综述

可持久化是一个类别,基础含义就是支持操作历史数据结构版本。

II.起源

但是你不觉得奇怪吗?真的这么简单?

其实它本质上是体现了对序列操作的“循序渐进”。

这是啥意思?就是前面的版本里不含后面的操作造成的影响,后面的版本累计了前面操作造成的所有影响。你觉不觉得这很显然?

没错,挺显然,但是这像不像是前缀和

是的,绕了一圈,又回去了。

如果说树状数组维护了一堆数的前缀和,那么可持久化数据结构就可以维护更多复杂信息的“前缀和”,而且支持修改。

体现最明显的是可持久化线段树,你只需要把两版本同一区间上的信息相减,就得到了这一段该信息的改变量。

如果你选择基于下标建立可持久化权值线段树,就相当于求到了一个区间内的某种原来难以维护的信息。

当然,你也可以理解为这样做可以的原因其实是“升维”了,这样,第i个版本不再意味着第i个数据,而是前面所有数据的某种信息的维护。

妙啊,所以本章结尾,作者lyd提到的“树套树”,何尝不是另一种升维呢?

III.基操

将修改受影响的部分复制出来,作为一个版本。

种类比较多,因题而异吧。

posted @ 2023-07-09 15:25  haozexu  阅读(33)  评论(0)    收藏  举报  来源