可持久化 - 维护数据集的历史状态
I.综述
可持久化是一个类别,基础含义就是支持操作历史数据结构版本。
II.起源
但是你不觉得奇怪吗?真的这么简单?
其实它本质上是体现了对序列操作的“循序渐进”。
这是啥意思?就是前面的版本里不含后面的操作造成的影响,后面的版本累计了前面操作造成的所有影响。你觉不觉得这很显然?
没错,挺显然,但是这像不像是前缀和?
是的,绕了一圈,又回去了。
如果说树状数组维护了一堆数的前缀和,那么可持久化数据结构就可以维护更多复杂信息的“前缀和”,而且支持修改。
体现最明显的是可持久化线段树,你只需要把两版本同一区间上的信息相减,就得到了这一段该信息的改变量。
如果你选择基于下标建立可持久化权值线段树,就相当于求到了一个区间内的某种原来难以维护的信息。
当然,你也可以理解为这样做可以的原因其实是“升维”了,这样,第i个版本不再意味着第i个数据,而是前面所有数据的某种信息的维护。
妙啊,所以本章结尾,作者lyd提到的“树套树”,何尝不是另一种升维呢?
III.基操
将修改受影响的部分复制出来,作为一个版本。
种类比较多,因题而异吧。
本文来自博客园,作者:haozexu,转载请注明原文链接:https://www.cnblogs.com/haozexu/p/18281770

浙公网安备 33010602011771号