一道有趣的面试:Trie 树及其改进

本文探讨了Trie树在解决单词查询问题时的优势,以及其内存占用过多和尾链浪费的问题。提出了通过内存分配策略修改(使用vector替代new操作)和单链压缩来改进Trie树,降低了内存占用并提高了效率。此外,还提及了针对离线需求的双数组Trie树和Trie图在多模式串匹配加速中的应用。
摘要由CSDN通过智能技术生成

0x00 导言

Trie 树是一种常见的数据结构,用以解决在给定单词在字典中是否存在的问题,而且支持动态的增删词典内容,常见的实现结构如下:

struct node{
    bool is_word ;
    struct node * [26];
};

这里写图片描述
对于任意词典,查找给定单词的效率为O(1),比hash还要快。hash虽然也是O(1),但是hash不能保证没有冲突,即使预先设计了一个良好的 hash 算法,动态修改词典内容也会导致冲突问题。

0x01 一种改进思路

但是 Trie 本身也有不足的地方:

  1. 内存占用较多,每个节点都会开辟26个指针;
  2. 另外Trie 是一颗前缀树,一颗 Trie 树通常会包含很多浪费的尾链,读者可以想象下垂柳的结构。

这里分享一种笔者曾经用过的改进方法:

  1. 内存分配策略修改,原来的实现通常是每次 new 方法生成一个新的节点,这里我们换一个思路,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值