Trie(前缀树)和ternary trie和binary search tree
1 什么是trie
trie是一棵多叉树,假如存放的是由26个字母(不区分大小写)构成的字符串的话,那么就是一棵26叉树。
trie树是一棵前缀树,因为每个结点只保存字符串中的一个字符,整个字符串保存在路径中。
trie树的根结点里面不保存任何字符,因为根结点是下面所有路径的前缀,如果固定为一个字符的话,那么该trie树只能保存以该字符为前缀的字符串了。
trie树的每个结点要保存两类数据,一个是字符(root结点不保存),一个是到该字符所有后缀的结点的指针,比如26个字母的话,就是到该字符所有可能后缀的数组,一个保存26个指针的数组。
如果字符串不是很充分的话,trie树会浪费空间,因为会存在很多的null指针。
2 什么是binary search tree
和trie将key存放在树的路径中不同的是,binary search tree将key存放在每个结点中
binary search tree的左子树中所有的结点的值小于该结点的值,所有的右子树中的所有结点的值大于该结点的值。
所以,在binary search tree中查找时,每次比较之后,如果小于该结点的值的话,就往其左子树中继续找,如果大于该结点的值的话,就往其右子树中继续找。
因为涉及到一个平衡的问题,所以还有红黑树和avl树,它们都是自平衡的binary search tree。
3 什么是ternary trie
ternary trie是trie和binary search tree的杂交体。
ternary trie也是将key保存在路径中,但是和trie不同的是,key的整个字符串不是保存在连续的路径中。每个结点只保存一个前缀字符。
ternary trie的每个结点都保存三个指针,一个是字符等于该结点处保存的字符的子树的指针,一个是字符小于该结点处保存的字符的子树的指针,还有一个是字符大于该结点处保存的字符的子树的指针。
由于一个结点只保存一个前缀字符,所以,很可能该前缀字符并不是我们当前要找的字符,那么就要继续找子树,直到找到了当前字符为止,因此保存key字符串的路径可能不是连续的,是断开的。因此,ternary trie也不需要像trie那样root结点不能用。
4 怎样创建trie
见分析。
5 怎样创建binary search trie
见分析。
6 怎样创建ternary trie
见分析。
Trie(前缀树)和ternary trie和binary search tree的更多相关文章
- Java实现 LeetCode 208 实现 Trie (前缀树)
208. 实现 Trie (前缀树) 实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作. 示例: Trie trie = new Trie() ...
- [Swift]LeetCode208. 实现 Trie (前缀树) | Implement Trie (Prefix Tree)
Implement a trie with insert, search, and startsWith methods. Example: Trie trie = new Trie(); trie. ...
- python利用Trie(前缀树)实现搜索引擎中关键字输入提示(学习Hash Trie和Double-array Trie)
python利用Trie(前缀树)实现搜索引擎中关键字输入提示(学习Hash Trie和Double-array Trie) 主要包括两部分内容:(1)利用python中的dict实现Trie:(2) ...
- leetcode 208. 实现 Trie (前缀树)
实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作. 示例: Trie trie = new Trie(); trie.insert(" ...
- 第15个算法-实现 Trie (前缀树)(LeetCode)
解法代码来源 :https://blog.csdn.net/whdAlive/article/details/81084793 算法来源:力扣(LeetCode)链接:https://leetcode ...
- 实现 Trie (前缀树)
实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作. 示例: Trie trie = new Trie(); trie.insert(" ...
- 力扣208——实现 Trie (前缀树)
这道题主要是构造前缀树节点的数据结构,帮助解答问题. 原题 实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作. 示例: Trie trie = ...
- 数据结构—— Trie (前缀树)
实现一个 Trie (前缀树),包含 插入, 查询, 和 查询前缀这三个操作. Trie trie = new Trie(); trie.insert("apple"); trie ...
- 力扣 - 208. 实现Trie(前缀树)
目录 题目 思路 代码 复杂度分析 题目 208. 实现 Trie (前缀树) 思路 在我们生活中很多地方都用到了前缀树:自动补全,模糊匹配,九宫格打字预测等等... 虽然说用哈希表也可以实现:是否出 ...
随机推荐
- django下的framework
可以创建个虚拟环境先,不过我没使用这个方式 virtualenv env source env/bin/activate ------ 退出: To exit the virtualenv envir ...
- python 简易计算器(只能计算加减乘除和括号)
import re # 格式化字符串函数(消除一些错误的格式) def format_string(string): # 一系列的替换语句 string = string.replace(" ...
- 跟http相关的
http http 中 请求: 请求行 请求方式 采用协议 版本号 网址 请求头 客户端可以接受数据类型 可以接受语言 可以接受的压缩格式 请求 ...
- ASP.NET MVC______VS2012
1,在VS2010中,选中指定的代码段,可以拖拽到工具箱中,形成标签,以后还想书写类似的代码,双击鼠标即可. 2,在VS2012中,可以在注释上标注//TODO:我是注释 这样,注释就会出现在任务列表 ...
- 大数据学习——关于hive中的各种join
准备数据 2,b 3,c 4,d 7,y 8,u 2,bb 3,cc 7,yy 9,pp 建表: create table a(id int,name string) row format delim ...
- 大数据学习——linux常用命令(二)
二.目录操作 1 查看目录信息 ls / 查看根目录下的文件信息 ls . 或者 ls ./查看当前目录下的文件信息 ls ../查看根目录下 ls /home/hadoop ls -l . 查看当前 ...
- 性能测试工具 - ab 简单应用
之前知道一般网站性能可以通过 LoadRunner, JMeter, QTP 等相应的软件进行测试, 印象中本科学习 “软件测试” 这门课程时安装并使用过, LoadRunner等不是一个小软件, 安 ...
- BNUOJ 1575 Supermarket
Supermarket Time Limit: 2000ms Memory Limit: 65536KB This problem will be judged on PKU. Original ID ...
- 80. Hibernate 5.0命名策略使用naming-strategy 不起作用【从零开始学Spring Boot】
[原创文章,转载请注明出处] 事情的起因:一不小心从1.3.3升级到了1.4.0版本,结果就碰到了各种悲催的事情了,好吧,Hibernate5.0的新特性就是其中一个坑,我们会发现我们配置的namin ...
- FZU-1881-Problem 1881 三角形问题,打表二分查找~~
B - 三角形问题 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descripti ...