Trie树及其优化

本文介绍了Trie树的特性,比较了HashMap和ElasticSearch在前缀匹配中的应用。在讨论Trie树的实现时,提出了在数据量较大时HashMap和普通数组的不足,并引出了DoubleArrayTrie作为优化空间复杂度的解决方案。DoubleArrayTrie是一种基于确定有限状态自动机的高效存储结构,用于压缩Trie树的同时保持快速查询。
摘要由CSDN通过智能技术生成

1 Trie树简介

Trie又称前缀树或字典树,有如下特性:

  • 除根节点为空外,其每个节点都表示一个字符
  • 一个节点的所有子孙都有相同的前缀
  • 从根节点出发,到某一end节点,则表示一个字符串

一下是一个简单的例子:在trie树中插入多个子串[she, he, her, this, his, is]

在这里插入图片描述

蓝色的节点表示end节点,即从root出发到end节点表示一个子串。

当我们要查找主串sherthis,是否存在一个从首字符起前缀相同的子串时(如果是查找子串,则需要为trie加上fail指针,即AC自动机,这里不讲),我们便可以在trie上以O(n)的时间复杂度完成查找。

从上边的例子中,我们可以看到在前缀匹配中,trie拥有不俗查找效率外,还能够对公共前缀进行空间上的压缩。

Trie树主要可以应用在各种字符串前缀匹配的场景下,如搜索提示、词频统计等。

看完后依然不明白,可以手动实现一遍LeetCode208题。

2 比较

2.1 HashMap

HashMap可以在O(1)的时间复杂度和O(n)的时间复杂度内,完成对字符串的匹配。

但其只能使用在字符串精确匹配,而无法应对前缀匹配

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值