Trie字典

trie,字典 · 浏览次数 : 51

小编点评

**Aho-Corasick 算法 AC自动机实现** **双数组 Trie 树** (Double-array Trie): * 双数组结构,其中第一个数组存储字符串的指针。 * 第二个数组存储字符串本身。 * 每个节点包含一个字符串的指针。 * 每个节点的子节点包含该节点对应字符串的所有子节点的字符。 **字典树** (Prefix Tree): * 每个节点只包含一个字符的指针。 * 每个节点对应一个字符串。 * 每个节点的子节点包含该节点对应字符串的所有子节点的字符。 * 每个节点都包含所有字符串的公共前缀。 **优点和缺点** **Trie 树**: * 利用字符串的公共前缀来减少查询时间。 * 每个字符可能包含多个字符集大小数目的指针。 * 空间效率高,当字符串较多时,会有大量的空节点。 **双数组 Trie 树**: * 每个字符的指针指向对应字符串的第一个字符。 * 每个节点包含所有字符串的子节点的字符。 * 存储效率更高,空间复杂度降低。 **应用场景** * **单词自动补齐**:输入字符串的前缀,查找包含该前缀的所有字符串。 * **字符串集合维护**:向集合中插入字符串,查询集合中是否存在某个字符串。 * **字符串搜索**:查询字符串集合中是否有某个字符串。 * **统计字符串出现频率**:统计字符串在集合中的出现频率。 * **字典序排序**:排序字符串集合按字典序。 * **求集合内两个字符串的 LCP**:求最长公共前缀。

正文

Aho-Corasick 算法 AC自动机实现:https://www.cnblogs.com/vipsoft/p/17722761.html
双数组Trie树 (Double-array Trie):https://www.cnblogs.com/vipsoft/p/17759850.html

Trie树,又叫字典树,前缀树(Prefix Tree),单词查找树,是一种多叉树的结构.
image
{"a","apple","appeal","appear","bee","beef","cat"} 深色表示接受态
image
关键字集合{"pool", "prize", "prepare", "preview", "produce", "progress"}.
image

Trie 树举例
原字符串集合:{ abcde 、aced 、bcdf 、bcff }
插入字符串:aced 、cdaa
新字符串集合:{ abcde 、abde、aced 、bcdf 、bcff 、cdaa }
image

字典树的基本性质如下:

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

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

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

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

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

在本模板采用子结点默认包含 所有字符集 的连接方式,
对于少量的字符串存储来说,大量的结点的儿子是空闲的,造成了 空间的浪费 。

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

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

应用场景

  • 1、维护字符串集合(即字典)。
  • 2、向字符串集合中插入字符串(即建树)。
  • 3、查询字符串集合中是否有某个字符串(即查询)。
  • 4、统计字符串在集合中出现的个数(即统计)。
  • 5、将字符串集合按字典序排序(即字典序排序)。
  • 6、求集合内两个字符串的LCP(Longest Common Prefix,最长公共前缀)(即求最长公共前缀)。

与Trie字典相似的内容:

Trie字典

Trie树,又叫字典树,前缀树(Prefix Tree),单词查找树,是一种多叉树的结构. {"a","apple","appeal","appear","bee","beef","cat"} 深色表示接受态 关键字集合{"pool", "prize", "prepare", "preview",

算法学习笔记(15): Trie(字典树)

# Trie树 Trie(字典树)是一种用于实现字符串检索的多叉树。 Trie的每一个节点都可以通过 `c` 转移到下一层的一个节点。 > 我们可以看作可以通过某个字符转移到下一个字符串状态,直到转移到最终态为止。这是后话…… 我们以插入了字符串 `ab`,`aa`,`b` 三个字符串的Trie树为

在线问诊 Python、FastAPI、Neo4j — 构建问题分类器

目录构建字典数据构建 Trie 字典树按实体组装字典问题分析 将问题进行分析,和系统已有的分类进行关联 构建字典数据 将构建的知识图片字典化, 用于后面对问题的解析,下图为症状的字典,其它字典同理 构建 Trie 字典树 将建字典数据,组装集合 cur_dir = '/'.join(os.path.

算法学习笔记(20): AC自动机

# AC自动机 **前置知识**: - 字典树:可以参考我的另一篇文章 [算法学习笔记(15): Trie(字典树)](https://www.cnblogs.com/jeefy/p/17101290.html) - ~~KMP~~:可以参考 [KMP - Ricky2007](https://ww

【数据结构和算法】Trie树简介及应用详解

Trie树,即字典树,又称单词查找树或键树,是一种树形结构,典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。

算法学习笔记(21): 平衡树(二)

# 平衡树(二) > 平衡树(一)链接:[算法学习笔记(18): 平衡树(一) - jeefy - 博客园](https://www.cnblogs.com/jeefy/p/17204439.html) 本文中将讲述一下内容: - 可持久化Treap - 基于`Trie`的 *类* 平衡树(后文称之