本文假设
- 你已经了解什么是B+树
正文
对于B+树而言,有一个重要的指标是B+树的阶数(order)。设B+树的阶数为M,则对于B+树而言,要满足以下条件:
- 除根结点外的每个结点最多有M个子节点,至少ceil(M/2)个子结点。(ceil表示向上取整)
- 每个结点可以包含最多(M-1)个键,至少ceil(M/2)-1个键。
- 根结点至少有两个子结点,和至少一个键。
- 如果某个结点有超过M-1个键,则该结点在插入数据的过程中溢出了。
这些条件可以不用都记住,在接下来的过程中会有更深入的理解。其实关键点在于,要理解在插入数据的过程中,如果溢出了要怎么处理。如果没有溢出,办法很简单,可以类比二叉树的插入方式,找到合适的位置,把数据加进去就可以了。对于溢出的情况,处理方式是对当前结点进行分裂。
溢出的第一种情况:在叶子结点溢出
要将当前叶子结点一分为二。第一个分裂出来的结点要储存ceil((m-1)/2)个键。第二个结点储存剩余的所有键。
溢出的第二种情况:在非叶子结点溢出
依旧要将当前非叶子结点一分为二。第一个结点储存ceil(m/2)-1个键。将剩余键中的最小的键储存到父结点,其余键储存到第二个结点中去。由于涉及到对于父结点的数据插入操作,因为可能导致父结点数据溢出,该操作是要递归地进行处理的。
标签:储存,结点,ceil,插入,个键,溢出 来源: https://www.cnblogs.com/HeYanjie/p/16120236.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。