Double Array Trie

Double Array Trie(DAT)是一种节省空间的Trie数据结构实现,它结合了数组的快速访问和空间压缩。文章详细介绍了Trie的逻辑结构、TAT(Triple Array Trie)的思想,以及DAT的原理,包括插入、删除操作。DAT通过合并base和next数组,减少了空间开销,并通过后缀压缩进一步优化。文中还提到了libdatrie的C语言实现及其安装和使用方法。
摘要由CSDN通过智能技术生成
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
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值