双数组字典树

nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial 0. 前置知识需要提前有字典树的知识 1. 双数组字典树介绍双数组字典树英文名为DoubleArrayTrie,他的特点就是使用两个数组来表示一颗字典树,这里有比较有趣了,两个数组是怎么表达出字典树的呢? 2. 双数组介绍顾名思义,有两个数组,一个是base,另一个是check。 首先介绍数组的下标,数组的下标代表字典树上节点的编号,一个下标对应一个节点。 其实base数组的作用是用来记录一个基础值,这个值可以是随机值,只要不产生冲突就可以了,所以这个值可以用随机数算法获取,当然这样效率不高,高效的做法应该是使用指针枚举技术,ok,现在你已经明白了,base数组是一个不产生冲突的随机数组。 最后,check数组,check数组与base数组相互照应,如果base[i]=check[j] 则说明j是i的儿子,而且i到j的边权恰好为j-base[i],也可以写作j-check[j]好好理解这句话 从另一个方面而言,双数组字典树的base数组,应该是一个指针数组,他指向了一个长度为字符集大小的数组的首地址,而check数组是一种hash碰撞思路,由于base数组疯狂指向自己,导致产生了很多碰撞,但是由于字典树是一个稀疏图,导致儿子节点指针利用率低,所以base数组疯狂复用这段空间,最后必须要依赖check来解决冲突, 双数组字典树相比于传统字典树,仅仅只在内存方面于增删改查占有优势,但是唯一不好的地方就是删和改会导致base数组内存分裂,难以回收,删和改如果占大头,那么传统字典树的内存效率更高 由于搜索领域几乎不涉及到删和改,所以这个数据结构很nice,字符集多大,就节省了多少倍的空间 数据结构很棒,但是在现在这个内存不值钱的时代,这些指针的储存用hashmap直接无脑顶掉,空间占用也高不了多少,hashmap顶多浪费两倍空间 两倍的空间算不上啥,除非这是唯一的优化点,否则不会优化到这个数据结构上来     阅读全文
fightinggg's avatar
fightinggg 10月 18, 2021

基数树

    阅读全文
fightinggg's avatar
fightinggg 3月 16, 2020

后缀树

    阅读全文
fightinggg's avatar
fightinggg 3月 16, 2020

trie

    阅读全文
fightinggg's avatar
fightinggg 3月 16, 2020

后缀自动机

nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial 前言本文力争用理性分析的手段,来推测此算法发明者的思维过程, 尝试感受其在设计此算法的时所展现出的思维方式, 力求用数学证明的手段,尽可能多的为读者证明相关结论,建议有其他自动机学习的基础,最好已经学会AC自动机和回文自动机,后缀自动机很难,他 和其他自动机不一样,它的状态更加复杂,一个算法的创作过程很 复杂,学起来当然会感到很难。强烈建议看陈立杰的ppt,看一遍肯定看不懂,仔细看,一遍看不懂看多遍,第一次可能只能看懂几面,第二次可 能就能看懂到十几面了,慢慢的就全懂了。     阅读全文
fightinggg's avatar
fightinggg 3月 08, 2019

Manacher算法

    阅读全文
fightinggg's avatar
fightinggg 12月 08, 2018

AC自动机

nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial AC自动机所谓AC自动机,其实是kmp算法与字典树的结合,不懂这两个,是无法学会的。 自动机自动机,是一个五元组,包括了状态的非空有穷集合,符号的有限集合,状态转移函 数, 开始状态,终止状态集合,而在字典树上,增加了两个新的东西,一个标记了终止状态集合,另一个辅助了状态转移函数。 我们利用字典树上 的节点来表示状态,而边则用来表示状态转移函数的一部分。     阅读全文
fightinggg's avatar
fightinggg 11月 06, 2018

回文自动机

    阅读全文
fightinggg's avatar
fightinggg 11月 03, 2018

错位比较

    阅读全文
fightinggg's avatar
fightinggg 10月 29, 2018

后缀数组

    阅读全文
fightinggg's avatar
fightinggg 10月 29, 2018