千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:西安千锋IT培训  >  技术干货  >  写时拷贝与可持久化数据结构的区别是什么?

写时拷贝与可持久化数据结构的区别是什么?

来源:千锋教育
发布人:xqq
时间: 2023-10-14 12:30:13

一、写时拷贝与可持久化数据结构的区别

写时拷贝与可持久化数据结构的区别是可持久化:将数据结构的所有历史版本记录下来,称为可持久化。不是所有的数据结构都是可以持久化的,可持久化的数据结构要求其结构稳定,比如堆(是一颗满二叉树,结构稳定)、树状数组、trie(字典树)、线段树等。平衡树就不可以进行持久化操作,因为其存在左旋、右旋的操作。

存下来所有的历史版本有两种方式,一种是每改动一次则全部备份下来;另一种是增量备份。名列前茅种方式时空复杂度都比较高,不使用这种方式,我们这里只讲解增量备份的方式(类似于git)。

增量备份的核心思想是:只记录每个版本与前一个版本不同的部分。

可持久化Trie的用途:

正常的Trie树可以解决字符串的一些问题,特殊的Trie树(比如0/1Trie)可以解决最大异或和的相关问题,但是如果每次的询问是针对区间的,Trie树就不好解决,因为你不能对每个区间都建一棵Trie树,那样空间就会爆炸,于是,我们的可持久化Trie就登场了。

延伸阅读:

二、可持久化Trie的构造

设trie[x][ch],表示从x号节点连向的字符为ch的点的编号(与普通Trie的含义相同),root[i]表示第i次插入的字符串的根节点,tot代表总节点数

可持久化Trie插入第i个字符串的构造流程如下:

1:首先新建第i个字符串的根节点,并定义两个变量p,q代表当前串的节点和上一个版本与之对应的节点,初始化p=root[i-1],q=root[i]

2:若当前字符串的下一个字符是ch,那么就让trie[q][ch]=++tot;

然后对于不是ch的字符CH,trie[q][CH]=trie[p][CH];

3:让p=trie[p][ch],q=trie[q][ch],并重复2,3,步直到建树完成。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

MVVM和MVC有什么区别?

2023-10-14

低数据模式什么意思?

2023-10-14

为什么要使用Swift?

2023-10-14

最新文章NEW

maven插件和maven-publish插件有哪些区别?

2023-10-14

las文件用什么软件?

2023-10-14

优先级树是什么?

2023-10-14

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>