背景:在利用红黑树和AVL树(都是二叉平衡树)进行数据访问时,是从硬盘访问数据,读到内存中才能比较需要的元素,但是硬盘访问数据的时间周期远高于内存,所以多次访问硬盘时间成本是非常高的,以上说的这两种树结构就不再适用了。(硬盘的访问次数与树高呈正相关,并且硬盘读取物理地址连续的多个字节和读取单个字节的耗时几乎没有区别)
所以应运而生了一种树结构——B树
B树(多叉平衡搜索树):每个结点不一定只有一个元素,每个结点也不一点只有两个分支。
B树访问结点是在硬盘上进行的,结点内的数据操作是在内存中进行的。
B树内部有元素的结点叫做内部结点,没有元素的叫做外部结点(失败结点),内部结点的最后一层结点叫叶子结点。
B树的特点:
1,平衡:所有叶结点都在同一层。
2,有序:结点内有序,并且任一元素左子树都小于它,右子树都大于它。
3,多路:如果这是一个m阶B树,那么它最多有m个分支,m-1个元素;最少有[m/2](取整操作)个分支,[m/2]-1个元素;根节点有2个分支,1个元素。
例如如下的B树:
B树的插入:
左小右大进行比较,如果插入位置没有出现上溢出(大于最多的元素个数),无需调整直接插入,如果出现上溢出,将m/2上取整(如果m=3,那么[m/2]=2)处的元素上移到父节点(可以是根节点,但如果根节点也上溢出就要把[m/2]当作新的根节点来创建)处,原来[m/2]左边的元素变成左分支,原来[m/2]右边的元素变成右分支。
B+树介绍
背景:B树的遍历一般采用中序遍历,要在结点之间来回穿梭。
B+树的叶结点层包含所有元素,并用链表从小到大链接起来;
B+树常被用作数据库中的索引结构,叶结点每个元素都包含指向对应记录存储地址的指针,所以结点内的元素又被称作关键字(key),通过key包含的指针就可以找到数据库需要的数据内容。
而如果用B树作为数据库中的索引结构,相当于每一个结点都是key,然后包含一个地址指针
m个分支的结点有m个元素,非叶结点中每个元素对应子结点的最大值 ,所以本层的非叶结点也是指向下一层结点的索引。
B+树的本质其实是一套多层索引结构,通过层层索引指向叶子结点然后指向数据库的地址。(目的是为了加速查找速度)
以上来自于B站某up主,侵删