目录
B树
特性
一个m阶的B树具有如下特征:
- 根结点至少有两个子女。
- 每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m
- 每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m
- 所有的叶子结点都位于同一层。
- 每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。
结构
每次深度加1就会进行一次磁盘IO的查询,将当前高度的数据加到内存中,再进行数值比较。从中可以看出相比大部分的查询时间是花费在磁盘IO的速度上,所以要想提高性能就是将树的高度足够低,IO次数足够少,这就是B树的优势。
B树可以直接得到内部节点的值
应用:
主要用于文件系统以及部分数据库索引(MongoDB) 而Mysql是用B+树的。
B+树
特性
- 有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。
- 所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。
- 所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。
数据结构
应用:
mysql索引 磁盘
红黑树
特性
- 每个结点要么是红的,要么是黑的。
- 根结点是黑的。
- 每个叶结点(叶结点即指树尾端NIL指针或NULL结点)是黑的。
- 如果一个结点是红的,那么它的俩个儿子都是黑的。
- 对于任一结点而言,其到叶结点树尾端NIL指针的每一条路径都包含相同数目的黑结点
数据结构
应用:
内部排序,全部放在内存中的,比如HashMap
红黑树解决的问题,它可以在O(log n)时间复杂度内实现查找,插入和删除,任何不平衡都会在三次旋转内解决。
设计红黑树就是为了解决平衡树维护麻烦的问题
相关问题
B树跟B+树比较
B+树相比B树拥有更小的磁盘代价,读写代价更低(因为同样的数据量,B+树比B树高度低,因为B+树非叶子节点不保存数据),B+树的查询关键字的路径相等,即从根节点到叶子节点的路径,即每个数据的查询效率相等且稳定。
B树的查找可能比B+树更加快点,因为B树的数据值都在对应的节点上,可能会比B+树更快的返回。但是如果要去连续的一段值的话,B+树更加的合适。符合空间局部性。