总结

为什么用Trie树?

  1. 词频统计
    可能有人要说了,词频统计简单啊,一个hash或者一个堆就可以打完收工,但问题来了,如果内存有限呢?还能这么玩吗?所以这里我们就可以用trie树来压缩下空间,因为公共前缀都是用一个节点保存的。

  2. 前缀匹配
    如果and,as,at,我想获取所有以”a”开头的字符串,如果不用trie树,你该怎么做呢?很显然朴素的做法时间复杂度为O(N2),那么用Trie树就不一样了,它可以做到h,h为你检索单词的长度,可以说这是秒杀的效果。

为什么使用Ternary tree?

  1. Trie树结构,它的实现简单但空间效率低。如果要支持26个英文字母,每个节点就要保存26个指针,假若我们还要支持国际字符、标点符号、区分大小写,内存用量就会急剧上升,以至于不可行。
  2. 由于节点数组中保存的空指针占用了太多内存,我们遇到的困难与此有关,因此可以考虑改用其他数据结构去代替,比如用hash map。
  3. 然而,管理成千上万个hash map肯定也不是什么好主意,而且它使数据的相对顺序信息丢失,所以我们还是去看看另一种更好解法——Ternary Tree。

Ternary tree 与 hash比较:

Ternary tree 效率高而且容易实现;
Ternary tree 大体上效率比hash来的快,因为当数据量大的时候hash出现碰撞的几率也会大,而Ternary search tree 是指数增长;
Ternary tree 增长和收缩很方便,而 hash改变大小的话则需要拷贝内存重新hash等操作;
Ternary tree 支持模糊匹配,哈密顿距离查找,前缀查找等操作;
Ternary tree 支持许多其他操作,比如字典序输出所有字符串等,trie也能做,不过很费时;


Trie树

基本概念:

称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树。

举例说明:

下面我们有and,as,at,cn,com这些关键词,那么如何构建trie树呢?

Ternary Tree

基本概念:

有三个只节点,在查找的时候,比较当前字符,如果查找的字符比较小,那么就跳到左节点.如果查找的字符比较大,那么就跳转到友节点.如果这个字符正好相等,那么就走向中间节点.这个时候比较下一个字符。

举例说明:

比如要查找”ax”:

  1. 先比较”a” 和 “i”, “a” < “i”,跳转到”i”的左节点;
  2. 比较 “a” < “b”, 跳转到”b”的左节点;
  3. 比较”a” = “a”,跳转到 “a”的中间节点,并且比较下一个字符”x”;
  4. 比较”x” > “s” , 跳转到”s” 的右节点;
  5. 比较 “x” > “t” 发现”t” 没有右节点了;
  6. 找出结果,不存在”ax”这个字符;

Trie树 与 三分树(Ternary Trees)相关推荐

  1. Ternary Search Trees 三分树

    Efficient auto-complete with a ternary search tree 分类: 算法和数据结构学习 2012-04-18 18:03  125人阅读  评论(0)  收藏 ...

  2. Trie树(字典树)详细知识点及其应用

    Trie,又经常叫前缀树,字典树等等.它有很多变种,如后缀树,Radix Tree/Trie,PATRICIA tree,以及bitwise版本的crit-bit tree.当然很多名字的意义其实有交 ...

  3. 从Trie树(字典树)和后缀树

    从Trie树(字典树)谈到后缀树 转载:http://blog.csdn.net/v_july_v/article/details/6897097#t22 感谢作者,侵删. 引言 常关注本blog的读 ...

  4. 浅谈树形结构的特性和应用(上):多叉树,红黑树,堆,Trie树,B树,B+树......

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 上篇文章我们主要介绍了线性数据结构,本篇233酱带大家看看 无所不 ...

  5. 0x16.基本数据结构 — Trie树(字典树)+ A C 自 动 机

    目录 用TrieTrieTrie树来处理整数异或问题是真的舒服! 一.TrieTrieTrie树 TrieTrieTrie的基本操作 0.初始化 1.插入 2.检索 二.TrieTrieTrie树例题 ...

  6. 各种树:trie树、B树、B-树、B+树、B*树

    红黑树rbtree 二叉排序树 map 就是采用红黑树存储的,红黑树(RB Tree)是平衡二叉树,其优点就是树到叶子节点深度一致,查找的效率也就一样,为logN.在实行查找,插入,删除的效率都一致, ...

  7. Burst trie(爆炸式字典树)解读

    burst trie(爆炸式字典树) Burst trie组成介绍 burst trie有三个不同的组成部分,一组records,一组containers,还有一个access trie. recor ...

  8. 18B树、B++树和Trie树

    B树.B++树和Trie树 B树 定义:一个非空M元(也称M阶)B树(R.Bayer,1970年) 满足下列条件: 1)每个结点含有m个元素a1<a2<-<am.含有m个元素的结点有 ...

  9. 【转】各种树:trie树、B树、B-树、B+树、B*树

    红黑树rbtree 二叉排序树 map 就是采用红黑树存储的,红黑树(RB Tree)是平衡二叉树,其优点就是树到叶子节点深度一致,查找的效率也就一样,为logN.在实行查找,插入,删除的效率都一致, ...

最新文章

  1. 再见 Python,Hello Julia!
  2. 简单的在jsp页面操作mysql
  3. python实现一个简单的加法计算器_Python tkinter实现简单加法计算器代码实例
  4. apache.camel_Apache Camel 3.1 –更多骆驼核心优化(第3部分)
  5. Spring JMS,消息自动转换,JMS模板
  6. linux编译动态库之fPIC
  7. python实现按回车键继续程序_python实现按任意键继续执行程序
  8. 总结在开发中常用的Linux命令
  9. html显示日志_如何实现类似“jenkins”的滚动日志功能?
  10. 组件cdn引入_高性能 React UI组件库SHINEOUT
  11. 项目部署:IIS部署后运行报错iconfont.woff:1 Failed to load resource: the server responded with a status of 404
  12. su灯光插件_lightup插件下载|lightup for sketchup下载v4.0中文免费版 附使用教程 - 欧普软件下载...
  13. 英文java简历模板下载_java英文简历模板
  14. extmail mysql数据库 重启_Extmail邮件服务器部署
  15. top与with ties用法
  16. 区块链-压缩格式的密钥
  17. 使用Android辅助功能AccessibilityService实现微信自动聊天【外挂插件】
  18. R语言-批量读取数据文件以及提取字符串中的数字
  19. jdk+apache+jboss +mod_jk+openssl--从零开始搭建Linux测试环境
  20. 阿里云服务器优惠活动

热门文章

  1. IPU VPU GPU
  2. imx6上调用 vpu
  3. [CF1292C] Xenon's Attack on the Gangs
  4. 苹果所用应用打不开怎么办?论浮标有多重要?
  5. 工作一般预留什么邮箱? 注册工作邮箱谨防几大雷区!
  6. git/github教程
  7. 推荐贝塔斯曼书友会淘宝旗舰店
  8. Silverlight游戏设计(Game Design):(八)三国策(Demo) 之 “江山一统”①
  9. word文档自动保存方法
  10. HTML 表格与表单 个人简历