Trie字典树

简介: Trie字典树

Aho-Corasick 算法 AC自动机实现:https://www.cnblogs.com/vipsoft/p/17722761.html

双数组Trie树 (Double-array Trie):https://www.cnblogs.com/vipsoft/p/17774393.html

Trie树,又叫字典树,前缀树(Prefix Tree),单词查找树,是一种多叉树的结构.

{"a","apple","appeal","appear","bee","beef","cat"} 深色表示接受态

关键字集合{"pool", "prize", "prepare", "preview", "produce", "progress"}.

Trie 树举例

原字符串集合:{ abcde 、aced 、bcdf 、bcff }

插入字符串:aced 、cdaa

新字符串集合:{ abcde 、abde、aced 、bcdf 、bcff 、cdaa }

字典树的基本性质如下:

  • 根节点不包含字符,除根节点外每一个节点都只包含一个字符
  • 从根节点到某一节点,路径上的字符连接起来,为该节点对应的字符串
  • 每个节点的所有子节点包含的字符都不相同.

Trie 树的优缺点

Trie 树是一种 以空间换时间 的数据结构。

  • 优点:利用字符串的 公共前缀 来减少查询时间,最大限度地减少无谓的字符串比较。

公共前缀:例如字符串 abcdef 与 abcghi 有公共前缀 abc 。

  • 缺点:其每一个字符都可能包含至多字符集大小数目的指针。

在本模板采用子结点默认包含 所有字符集 的连接方式,

对于少量的字符串存储来说,大量的结点的儿子是空闲的,造成了 空间的浪费 。

当我们在浏览器的搜索框中打出一个字符串的前缀时,它便实时的显示出了以这个输入为前缀的一些字符串,也就是说,它帮我们搜索到了以这个输入为前缀的所有字符串,并且显示出了搜索频率较高的一些,这就是字典树的一个应用场景:单词自动补齐.

输入“人工” 自动带出人工开头的关键字

应用场景

  • 1、维护字符串集合(即字典)。
  • 2、向字符串集合中插入字符串(即建树)。
  • 3、查询字符串集合中是否有某个字符串(即查询)。
  • 4、统计字符串在集合中出现的个数(即统计)。
  • 5、将字符串集合按字典序排序(即字典序排序)。
  • 6、求集合内两个字符串的LCP(Longest Common Prefix,最长公共前缀)(即求最长公共前缀)。
目录
相关文章
|
5月前
|
搜索推荐
前缀树Trie
前缀树Trie
|
5月前
|
NoSQL 容器 消息中间件
字典树 (Trie)
字典树 (Trie)
|
5月前
|
存储 C++
leetcode-208:实现 Trie (前缀树/字典树)
leetcode-208:实现 Trie (前缀树/字典树)
46 0
|
11月前
|
存储 Python
字典树(Trie,
字典树(Trie,也称为前缀树或单词查找树)是一种用于存储字符串的树形数据结构。它是一种特殊的多叉树,其中每个节点都包含一个字符和一个指向其子节点的指针数组。字典树的主要作用是用于快速查找字符串和处理字符串的前缀。
57 6
|
搜索推荐 数据格式
Trie字典树
Trie字典树
96 0
Trie字典树
|
搜索推荐
字典树 trie
字典树 trie
50 0
理解前缀树
理解前缀树
56 0
|
存储 机器学习/深度学习 算法
|
存储
前缀树
Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。
73 0
前缀树
|
存储 自然语言处理 算法
字典树详解
字典树,顾名思义,是关于“字典”的一棵树。即:它是对于字典的一种存储方式(所以是一种数据结构而不是算法)。
161 0
字典树详解