是什么?

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

上图是一棵Trie树,表示了关键字集合{“a”, “to”, “tea”, “ted”, “ten”, “i”, “in”, “inn”} 。

从上图可以归纳出Trie树的基本性质:

  1. 根节点:根节点不包含字符,除根节点外的每一个子节点都包含一个字符。
  2. 子节点:每个节点的所有子节点,包含的字符互不相同
  3. 路径:从根节点到某一个节点路径上经过的字符连起来,为该节点对应的字符串。

实际场景中,每个中间节点,会设置「一个标记」,用于标识当前节点是否构成一个单词(关键词)。

  • 关键字,都存储在「路径」上,而没有存储再「节点」中。
  • 前缀树:公共前缀相等的「关键字」在 Trie Tree 中,前缀部分对应路径相同,因此,Trie 树,又称为前缀树

有什么用?

字典树,作为数据结构,有什么用?本质是:查询效率,或者说「时间复杂度」。

Trie树:

  • 核心思想:空间换时间
  • 利用字符串的「公共前缀」,来减少无谓的字符串比较,以达到提高查询效率的目的。

优点

  • 插入和查询的效率很高,都为O(m),其中 m 是待插入/查询的字符串的长度。
  • 关于查询,会有人说 hash 表时间复杂度是O(1)O(1)不是更快?但是,哈希搜索的效率通常取决于 hash 函数的好坏,若一个坏的 hash 函数导致很多的冲突,效率并不一定比Trie树高。
  • Trie树中,不同的关键字不会产生冲突。
  • Trie树只有在允许一个关键字关联多个值的情况下,才有类似hash碰撞发生。
  • Trie树不用求 hash 值,对短字符串有更快的速度。通常,求hash值也是需要遍历字符串的。
  • Trie树可以对关键字,按字典序排序。

缺点

  • 当 hash 函数很好时,Trie树的查找效率会低于哈希搜索。
  • 空间消耗比较大。

具体的应用场景:

  • 字符串检索
  • 词频统计
  • 字符串排序:Trie 树,每层节点采用「字典序」存储
  • 前缀匹配:例如网址自动提示
  • 其他数据结构和算法的辅助结构:后缀树、AC自动机等

转自http://ningg.top/data-structure-series-01-trie-tree/

ac自动机 匹配最长前缀_傻傻分不清吗?——Trie Tree,字典树、前缀树概述相关推荐

  1. ac自动机 匹配最长前缀_AC自动机算法

    AC自动机简介: 首先简要介绍一下AC自动机:Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一.一个常见的例子就是给出n个单词,再给出一段包 ...

  2. ac自动机 匹配最长前缀_Aho Corasick自动机结合DoubleArrayTrie极速多模式匹配

    本文使用Double Array Trie实现了一个性能极高的Aho Corasick自动机,应用于分词可以取得1400万字每秒,约合27MB/s的分词速度.其中词典为150万词,构建耗时1801 m ...

  3. ac自动机 匹配最长前缀_别再暴力匹配字符串了,高效的KMP,才是真的香

    如果你想了解KMP算法,请静下心读完这篇文章,一定不会辜负你的时间 暴力匹配(BF) 字符串匹配是我们在编程中常见的问题,其中从一个字符串(主串)中检测出另一个字符串(模式串)是一个非常经典的问题,当 ...

  4. 动词ing基本用法_如果实在分不清英语动名词和现在分词,那就直接学习-ing分词...

    作者:保研的YOYO君 字数:3080字 YOYO君最近在网上看到一个有趣的英语小问题,"go swimming"这个词组中的swimming是个什么形式?动名词还是现在分词? 小 ...

  5. 国防大学计算机学院,国防大学和国防科技大学是同一所学校吗?很多人傻傻都分不清!...

    国防大学和国防科技大学,这两所大学名字相近,极易混淆,在很多网站搜索"国防大学录取分数线",出来的全是国防科技大学的的高考录取分数线,所以给广大考生带来了很大困惑,难道国防大学和国 ...

  6. Educational Codeforces Round 132 (Rated for Div. 2) C,D+AC自动机

    D. Rorororobot 题意:n*m的矩阵,从下到上是1到n行,从左到右是1到m列,每列从下到上有连续x个单元格损毁,如果给出起点和终点坐标,并且规定每次只能向同一个方向移动k次,是否能够从起点 ...

  7. go regexp匹配字符串_多模式字符串匹配算法ac自动机(用go语言实现)

    本文主要包括三部分内容 字典树 建立ac自动机 ac自动机匹配规则 字典树 字典树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种. 典型应用是用于统计,排序和保存大量的字符串(但不仅限 ...

  8. 字符串匹配算法 -- AC自动机 基于Trie树的高效的敏感词过滤算法

    文章目录 1. 算法背景 2. AC自动机实现原理 2.1 构建失败指针 2.2 依赖失败指针过滤敏感词 3. 复杂度及完整代码 1. 算法背景 之前介绍过单模式串匹配的高效算法:BM和KMP 以及 ...

  9. hdu 6096---String(AC自动机)

    题目链接 Problem Description Bob has a dictionary with N words in it. Now there is a list of words in wh ...

  10. 数据结构与算法之美笔记——基础篇(下):图、字符串匹配算法(BF 算法和 RK 算法、BM 算法和 KMP 算法 、Trie 树和 AC 自动机)

    图 如何存储微博.微信等社交网络中的好友关系?图.实际上,涉及图的算法有很多,也非常复杂,比如图的搜索.最短路径.最小生成树.二分图等等.我们今天聚焦在图存储这一方面,后面会分好几节来依次讲解图相关的 ...

最新文章

  1. ACMNO.40 C语言-子串 有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串
  2. 【译】理解Javascript函数执行—调用栈、事件循环、任务等
  3. ASP.NET编译执行常见错误及解决方法汇总之一
  4. 理解原理的重要性 - 论PostgreSQL merge join 成本评估陷阱 含case
  5. linux命令重定向、、 1、 2、 1、 2、
  6. windowsXP下安装Qt4.8
  7. Nokia7610彩信设置
  8. 常见问题摘要(生活篇)
  9. jquery点击按钮显示和隐藏div
  10. 惠斯通电桥信号调理芯片_基于精密分流电阻器的惠斯通电桥校准
  11. matlabpython建模_参加数学建模用 MATLAB,还是 Python?
  12. IT成长日记(二)——联想打印机
  13. 做H5页面用什么软件比较好?
  14. Unity零基础到入门 ☀️| 万字教程 对 Unity 中的 Navigation导航系统基础 全面解析+实战演练【收藏不迷路】
  15. echarts地图整体渐变色
  16. 图片如何高清修复?高清修复图片的方法
  17. 多路温度采集控制系统(1)项目介绍
  18. opencv频域滤波 C++实现陷波滤波器
  19. Scrum开发管理方法的由来、团队建设与实施过程
  20. Poi 导出excel多个sheet的内容

热门文章

  1. Luogu1880 石子合并
  2. [数据结构] 树链剖分
  3. matlab多图形相交,用MATLAB作出柱面x^2+y^2=4 和柱面x^2+z^2=4 相交的图形.
  4. androidsettitle方法_android去掉标题方法
  5. 电脑c盘空间不足怎么清理_C盘空间不足怎么办?如何给C盘扩容?
  6. hql 占位符_hibernate中如何使用占位符拼接HQL
  7. java中的linearnumexpr,java - Cplex中的上限和下限等于0.0(在cplex中) - 堆栈内存溢出...
  8. cesium加载倾斜优化_干货 | 6款倾斜摄影裸眼3D采集软件推荐给大家
  9. exfat最佳单元大小_回音壁构造和单元相关的个人看法
  10. 空格表示 java_java 正则表达式 空格怎么表示