📅  最后修改于: 2020-10-15 01:04:36             🧑  作者: Mango
B +树是B树的扩展,它允许有效的插入,删除和搜索操作。
在B树中,键和记录都可以存储在内部节点和叶节点中。而在B +树中,记录(数据)只能存储在叶节点上,而内部节点只能存储键值。
B +树的叶节点以单链接列表的形式链接在一起,从而使搜索查询更加有效。
B +树用于存储无法存储在主存储器中的大量数据。由于总是限制主存储器的大小,因此B +树的内部节点(访问记录的键)存储在主存储器中,而叶节点存储在辅助存储器中。
B +树的内部节点通常称为索引节点。下图显示了3级的B +树。
SN | B Tree | B+ Tree |
---|---|---|
1 | Search keys can not be repeatedly stored. | Redundant search keys can be present. |
2 | Data can be stored in leaf nodes as well as internal nodes | Data can only be stored on the leaf nodes. |
3 | Searching for some data is a slower process since data can be found on internal nodes as well as on the leaf nodes. | Searching is comparatively faster as data can only be found on the leaf nodes. |
4 | Deletion of internal nodes are so complicated and time consuming. | Deletion will never be a complexed process since element will always be deleted from the leaf nodes. |
5 | Leaf nodes can not be linked together. | Leaf nodes are linked together to make the search operations more efficient. |
步骤1:将新节点插入为叶节点
步骤2:如果叶子没有所需的空间,请分割节点并将中间节点复制到下一个索引节点。
步骤3:如果索引节点没有所需的空间,请分割该节点并将中间元素复制到下一个索引页。
将值195插入下图所示的5阶B +树中。
在190之后,将195插入到120的右子树中。将其插入所需的位置。
该节点包含的元素数量大于最大数量(即4),因此将其拆分并将中间节点放置到父节点上。
现在,索引节点包含6个子节点和5个键,这违反了B +树的属性,因此我们需要对其进行拆分,如下所示。
步骤1:从叶子中删除密钥和数据。
步骤2:如果叶节点包含的元素数量少于最小数量,则向下合并该节点及其同级元素,并删除它们之间的键。
步骤3:如果索引节点包含的元素少于最小数量,则将该节点与同级元素合并,然后向下移动它们之间的键。
从下图所示的B +树中删除密钥200。
在195之后,在190的右子树中显示200。删除它。
通过使用195、190、154和129合并两个节点。
现在,元素120是节点中存在的违反B +树属性的单个元素。因此,我们需要使用60、78、108和120对其进行合并。
现在,B +树的高度将减少1。