B树,B+树,红黑树应用场景AVL树,红黑树,B树,B+树,Trie树
B B+运用在file system database这类持续存储结构,同样能保持lon(n)的插入与查询,也需要额外的平衡调节。像mysql的数据库定义是可以指定B+ 索引还是hash索引。
C++ STL中的map就是用红黑树实现的。AVL树和红黑树都是二叉搜索树的变体,他们都是用于搜索。因为在这些书上搜索的时间复杂度都是O(h),h为树高,而理想状况是h为n。所以构造的办法就是把二叉搜索树改造成AVL树或者红黑树,AVL树是严格维持平衡的,红黑树是黑平衡的。但是维持平衡又需要额外的操作,这也加大了数据结构的时间复杂度,所以红黑树可以看做是二叉搜索树和AVL树的一个折中,可以尽量维持树的平衡,又不用话过多的时间来维持数据结构的性质。
AVL树:平衡二叉树,一般是用平衡因子差值决定并通过旋转来实现,左右子树树高差不超过1,那么和红黑树比较它是严格的平衡二叉树,平衡条件非常严格(树高差只有1),只要插入或删除不满足上面的条件就要通过旋转来保持平衡。由于旋转是非常耗费时间的。我们可以推出AVL树适合用于插入删除次数比较少,但查找多的情况。
应用相对其他数据结构比较少。windows对进程地址空间的管理用到了AVL树。
红黑树:平衡二叉树,通过对任何一条从根到叶子的简单路径上各个节点的颜色进行约束,确保没有一条路径会比其他路径长2倍,因而是近似平衡的。所以相对于严格要求平衡的AVL树来说,它的旋转保持平衡次数较少。用于搜索时,插入删除次数多的情况下我们就用红黑树来取代AVL。
红黑树应用比较广泛:
· 广泛用在C++的STL中。map和set都是用红黑树实现的。
· 著名的linux进程调度Completely Fair Scheduler,用红黑树管理进程控制块。
· epoll在内核中的实现,用红黑树管理事件块
· nginx中,用红黑树管理timer等
· Java的TreeMap实现
B树,B+树:它们特点是一样的,是多路查找树,一般用于数据库中做索引,因为它们分支多层数少,因为磁盘IO是非常耗时的,而像大量数据存储在磁盘中所以我们要有效的减少磁盘IO次数避免磁盘频繁的查找。
B+树是B树的变种树,有n棵子树的节点中含有n个关键字,每个关键字不保存数据,只用来索引,数据都保存在叶子节点。是为文件系统而生的。
B+树相对B树磁盘读写代价更低:因为B+树非叶子结点只存储键值,单个节点占空间小,索引块能够存储更多的节点,从磁盘读索引时所需的索引块更少,所以索引查找时I/O次数较B-Tree索引少,效率更高。而且B+Tree在叶子节点存放的记录以链表的形式链接,范围查找或遍历效率更高。Mysql InnoDB用的就是B+Tree索引。
Trie树:
又名单词查找树,一种树形结构,常用来操作字符串。它是不同字符串的相同前缀只保存一份。
相对直接保存字符串肯定是节省空间的,但是它保存大量字符串时会很耗费内存(是内存)。
类似的有:前缀树(prefix tree),后缀树(suffix tree),radix tree(patricia tree, compactprefix tree),crit-bit tree(解决耗费内存问题),以及前面说的double array trie。
前缀树:字符串快速检索,字符串排序,最长公共前缀,自动匹配前缀显示后缀。
后缀树:查找字符串s1在s2中,字符串s1在s2中出现的次数,字符串s1,s2最长公共部分,最长回文串。
trie 树的一个典型应用是前缀匹配,比如下面这个很常见的场景,在我们输入时,搜索引擎会给予提示。
在大型文件系统中,采用索引可以有效的提高查找的效率,建立文件时,在输入数据记录的同时,建立一张索引表,每个索引表项记录相应数据块的地址。检索文件记录时,先将外存上的索引表读入内存,从索引表中查到数据记录的地址后,再将相应的记录读入内存。
如果文件中的数据在使用过程中记录变化较多,则要频繁地对索引表进行插入和删除操作,这时对索引表采用树型结构较好。但是如果文件系统很大,则索引表也往往很大,需分块读入内存,若采用二叉查找树的结构,仍需多次访问外存,而访问外存的代价很大,为了减少访问外存的次数,就应尽量减少索引表的深度。简要介绍一下广泛应用于大型文件系统中的B-树。
转载于:https://www.cnblogs.com/bootdo/p/10614000.html
B树,B+树,红黑树应用场景AVL树,红黑树,B树,B+树,Trie树相关推荐
- 字符串匹配数据结构 --Trie树 高效实现搜索词提示 / IDE自动补全
文章目录 1. 算法背景 2. Trie 树实现原理 2.1 Trie 树的构建 2.2 Trie树的查找 2.3 Trie树的遍历 2.4 Trie树的时间/空间复杂度 2.5 Trie 树 Vs ...
- 数据结构与算法之美笔记——基础篇(下):图、字符串匹配算法(BF 算法和 RK 算法、BM 算法和 KMP 算法 、Trie 树和 AC 自动机)
图 如何存储微博.微信等社交网络中的好友关系?图.实际上,涉及图的算法有很多,也非常复杂,比如图的搜索.最短路径.最小生成树.二分图等等.我们今天聚焦在图存储这一方面,后面会分好几节来依次讲解图相关的 ...
- Trie 树:如何实现搜索引擎的搜索关键词提示功能
------ 本文是学习算法的笔记,<数据结构与算法之美>,极客时间的课程 ------ 搜索引擎的搜索关键词提示功能,你应该不陌生吧!当你在搜索引擎的搜索框上,输入要搜索的文字的某一部分 ...
- 字符串匹配算法(Trie树)
文章目录 1. Trie树概念 2. Trie树操作 2.1 存储 2.2 查找 2.3 插入 2.4 删除 2.5 打印 3. 完整代码 4. Trie树与散列表.红黑树的比较 4.1 思考题 参考 ...
- trie树java_【数据结构】Trie树的应用:查询IP地址的ISP(Java实现)
查询IP地址的ISP 给定一个IP地址,如何查询其所属的ISP,如:中国移动(ChinaMobile),中国电信(ChinaTelecom),中国铁通(ChinaTietong)? 现在网上有ISP的 ...
- hdu 1251 统计难题 (Trie树)
本题是trie树模板题,如果不用trie而用map写可以看出trie处理这类问题有明显的时间优势. 在trie树中查找一个关键字的时间和树中包含的结点数无关,而取决于组成关键字的字符数.(对比:二叉查 ...
- 【BZOJ10561862】【codevs1985】排名系统,Splay+trie树
传送门1 传送门2 传送门3 写在前面:我就是不用hash! 思路: 听Shallwe说这道题卡内存要用hash,表示不服开始写trie树 比较关键的是建立trie树节点,Splay节点和字符串(名字 ...
- 过滤敏感词汇(trie树实现敏感词过滤)
1.字符串匹配 (1)暴力解法:采用两个for循环,每次匹配的时间复杂度O(m*n) (2)KMP:时间复杂度O(m+n) n表示字符串的长度,m表示每个灵感词的长度 (3)trie树 字典树/单词查 ...
- ┎结构之美┒之Trie树
博主今天新开一系列写"结构",简单的单链表,普通队列,普通栈,普通二叉树就不写了,今天从Trie树写起. Trie树(又叫字典树,前缀树,单词查找树,键树)是一种树形数据结构,直接 ...
最新文章
- 什么意思IndexError: Dimension out of range (expected to be in range of [-1, 0], but got 1)
- 为什么Android变得对商业世界至关重要?
- 西藏最大云计算数据中心明年投入试运营
- log file sync
- ASP.NET服务器控件开发(2)--继承WebControl类
- 用dw(dreamweaver)开发asp.net,连接数据库时出现“http错误500,服务器内部错误”的解决方法...
- 测试开发:聊一聊自动化测试框架,值得收藏!
- python如何放一张图片上去_python opencv把一张图片嵌入(叠加)到另一张图片上的实现代码...
- jQuery最新1.4 版本的十五个新特性
- ASCII码十六进制转换表
- ams1117 lm317 对比_ams1117中文资料汇总(ams1117引脚图及功能_工作原理及典型应用电路)...
- 北大计算机前辈徐,九年中获得国家最高科学技术奖的八位北大人
- 计算机导论第七章数据库基础,计算机导论教学大纲
- QFramework引入Utility和System
- 小米NFC手机 手环 复制加密IC门禁卡
- lol各个区服务器位置2020,lol大区排名2020
- Android10源码下载与编译(Mac移动硬盘)
- 社会责任·价值共创,中关村网络安全与信息化产业联盟对话网信企业家海泰方圆董事长姜海舟
- 只需5步,从0开始搭建你的第一款小程序
- 第六节-列空间与零空间