Double Array Trie介绍

本文探讨了Trie树的不同实现方式及其优缺点,并详细对比了Trie与DoubleArrayTrie(DAT)两种数据结构。重点分析了DAT的存储机制及如何通过base和check数组高效检索词汇。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    正统介绍请移步百度或其他博客。都比我讨论的好。

    Trie和Double Array Trie(DAT)的比较。

    Trie有两种数据结构:

    1.数组或hash链式:

        介绍:兄弟节点使用数组或者hash存储,儿子节点使用指针存储。

        优点:1. 便于查找,能快速定位兄弟节点中是否有该值,然后跳到该值的儿子hash或者数组中查找。

                  2. 插入快速。  

        缺点:空表中仅插入aa时,就要创建一个26+26的数组或者两个hash表。

    2. 链式trie树:

        介绍:儿子节点和父亲节点的关系用链表维护,兄弟节点也用链表维护。

        优点:1. 便于插入。

        缺点:1. 兄弟节点不好找。汉字的话可能会遍历3w多个汉字。

                  2. 大数据情况下,会保存多个指针域,浪费空间。

    DAT:

    数据结构:采用base和check两个数组来保存。base保存是否成词(-base),是否是叶子节点(-i),是否是普通非叶子节点和位置(普通数值)。check数组表示该词的上一个词是否正确。

    数据结构要点:该结构主要使用base[i] + next.acsii = base[next], then check[next] ?= base[i];两步,第一步算下一个节点的位置。第二部check下一个节点是不是由上一个节点推出来的。

    注意:每一层的节点必须按从小到大的顺序排列。

    双数组数据结构比trie数据结构主要节省空间在1的hash上或者是2的指针域上两点。很稳定。DAT很可能也有空隙,但应该比hash的空隙要小。

    注:仅分析,未时间。如有不明了或者写错之处。请大家务必提出!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值