Trie逻辑结构
Trie是一种常见的数据结够,可以实现前缀匹配(hash是不行的),而且对于词典搜索来说也是O(1)的时间复杂度,虽然比不上Hash,但是空间会省不少。
比如下图表示了包含“pool, prize, preview, prepare, product, progress"的一个Trie

Trie的逻辑结构:每个圆圈都表示一个状态,比如状态1,状态之间的边表示状态1遇到字符p就变成状态2。用两个圈画的状态表示终止状态,也就是表示匹配了一个单词。
这是DFA的表示方法,当然按照正规的定义,还得有个“吸收”所以非法字符的状态,比如状态1碰到p之外的任何字符都会匹配失败,也就是会进入这个“吸收”状态,这个状态就像
黑洞,进去之后就永远没有出头之日了------永远在那个状态跳转。
Trie的实现
从上面可以知道,要表示一个Trie,关键就是一个跳转矩阵(DFA里的正式名字是状态转移表),比如上图可以这样表示
| 1 | 2 | 3 | 4 | .. | |
|---|---|---|---|---|---|
| p | 2 | X | X | X | |
| r | X |
Double Array Trie:压缩数据结构与实现

Double Array Trie(DAT)是一种节省空间的Trie数据结构实现,它结合了数组的快速访问和空间压缩。文章详细介绍了Trie的逻辑结构、TAT(Triple Array Trie)的思想,以及DAT的原理,包括插入、删除操作。DAT通过合并base和next数组,减少了空间开销,并通过后缀压缩进一步优化。文中还提到了libdatrie的C语言实现及其安装和使用方法。
最低0.47元/天 解锁文章
9860

被折叠的 条评论
为什么被折叠?



