可持久化瞎扯

Posted butterflydew

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可持久化瞎扯相关的知识,希望对你有一定的参考价值。

可持久化

  • 不强制在线的可持久化不是可持久化
  • 卡空间的可持久化已经成为历史的大势
  • 以上都是在胡扯

以前一直以为区间修改又不能标记永久化的主席树是假的,后来发现是自己naive

其实很简单,有一个操作

int Copy(int now)
{
    ++tot;
    //copy node now to node tot
    return tot;
}

然后,我们在进入一个新版本的时候,把根对着它基于的历史版本的根赋值一遍,再进行操作。

比如你要进行某区间操作

当你要进入某儿子的时候,把这个儿子赋值一遍接给自己。

当你要pushdown的时候,把左右两个儿子都赋值一遍再接给自己。

所以说,我们保证的其实是当前所在的那个结点一定是当前时刻的新点,这样的话,你怎么玩都没问题了。

注意,在查询的时候也要这样,因为你查询的时候也会pusdown


这样虽然稳,但有可能被卡空间。

所以,一般我们要看一看那个标记可不可以永久化。这样,就少了pushdown时建的点,这个pushdown其实和新儿子的重复点是很多的。

如果还是卡空间,恭喜你,去分块把


平衡树

其实差不多,我只会非旋treap的

空间常数也很大

确保你split和merge的时候的当前节点是新节点就可以了,标记同主席树。

据说split的时候建新节点时,merge就不用建了。但事实上不是所有的split与merge都是对应的,merge的时候不想新建节点你得先考虑考虑。

卡空间:没有标记的时候,可以在平衡树上二分就别split,merge一个劲儿的。

以上是关于可持久化瞎扯的主要内容,如果未能解决你的问题,请参考以下文章

片段中的Firebase数据不是持久的,会重新下载

SpringCloud系列十一:SpringCloudStream(SpringCloudStream 简介创建消息生产者创建消息消费者自定义消息通道分组与持久化设置 RoutingKey)(代码片段

微信小程序代码片段

Redis入门到实践,由持久化引发的思考

回栈事务后如何持久化分片数据?

瞎扯淡