博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
可持久化数据结构
阅读量:4671 次
发布时间:2019-06-09

本文共 598 字,大约阅读时间需要 1 分钟。

可持久化数据结构

总述

充分利用以前的状态

可持久化Trie树

这是一颗插入了"AFK"的可持久化Trie

1505765-20190317100426696-1925922046.png

接下来插入"KFC",此时新建一个根(因为要可持久化),然后我们来看他该怎么连边

  • 首先,肯定要有"KFC"

  • 其次,还要能访问到以前的节点

然后就可以这么搞:

1505765-20190317102048551-791825348.png

然后插入"KFK":

1505765-20190317102058536-1998278853.png

所以我们发现一个这样的算法:

ins(u,f) 被定义为一个插入算法

那么对于[a..z]中的字母X,考虑f所连的一条边权为X的边,若其存在,则将root[i]的X指针指向之。特别的,若X是要插入的字符串中正在处理的一位,则不执行以上操作,并将X指针指向一个新的节点,记该节点为t,该字符为m,该边所指向的节点为k

执行完后,递归ins(t,k),把处理到的位置++

这样就好啦qwq

可持久化线段树

先建树,过程同普通线段树,不再赘述

然后假设建出来一颗这样的:1505765-20190324142625533-1677396586.png

接下来修改v[1] = 3 , 根据推理发现应该是这样的:1505765-20190324143015728-739405287.png

继续,v[2]=0,树长这样子:1505765-20190324143543590-1539636564.png

OK,代码跟可持久化Trie+线段树样的,然后时间复杂度证明如下:

1.一开始树中只有原始的NlogN个节点

2.每次插入会增加一条长度为logN的链

所以总长度为O(NlogN+(N-1)logN)=O((2N-1)logN)=O(NlogN)

转载于:https://www.cnblogs.com/tyqtyq/p/10545941.html

你可能感兴趣的文章
八LWIP学习笔记之用户编程接口(NETCONN)
查看>>
Git Day02,工作区,暂存区,回退,删除文件
查看>>
Windows Phone 7 Coding4Fun控件简介
查看>>
Nginx 常用命令总结
查看>>
hall wrong behavior
查看>>
Markdown test
查看>>
Collection集合
查看>>
int最大值+1为什么是-2147483648最小值-1为什么是2147483647
查看>>
【C++】const在不同位置修饰指针变量
查看>>
github新项目挂历模式
查看>>
编写jquery插件
查看>>
敏捷开发笔记
查看>>
神秘海域:顶级工作室“顽皮狗”成长史(下)
查看>>
C++指针、引用知多少?
查看>>
services 系统服务的启动、停止、卸载
查看>>
Fiddler 网页采集抓包利器__手机app抓包
查看>>
Number and String
查看>>
java中的值传递和引用传递2<原文:http://blog.csdn.net/niuniu20008/article/details/2953785>...
查看>>
css实现背景图片模糊
查看>>
什么是runtime?什么是webgl?
查看>>