码迷,mamicode.com
首页 > 其他好文 > 详细

B树 B+树 B*树 结构和区别

时间:2017-09-17 19:00:39      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:nbsp   节点   strong   查找   检索   alt   第一个   数据   技术   

B树可以分成很多种,
B-树(通常也只称为B树)是一种多路搜索树(并不是二叉的)
 
  1.定义任意非叶子结点最多只有M个儿子;且M>2;
  2.根结点的儿子数为2到M个;
  3.除根结点以外的非叶子结点的儿子数为M/2到M个;
  4.每个结点存放至少M/2-1(取上整 5/2=2)和至多M-1个关键字;(至少2个关键字,关键字就是节点中存储的几个数据,用来进行检索)
  5.非叶子结点的关键字个数=指向儿子的指针个数-1;
  6.非叶子结点的关键字:K[1], K[2], …, K[M-1];且K[i] < K[i+1];
  7.非叶子结点的指针:P[1], P[2], …, P[M];其中P[1]指向关键字小于K[1]的
子树,P[M]指向关键字大于K[M-1]的子树,其它P[i]指向关键字属于(K[i-1], K[i])的子树;(图中显示,这也是和B+树的区别)
  8.所有叶子结点位于同一层;
  如:(M=3)
          技术分享

 

 
 
重点说一下B+树
有的B+树,在关键字存储上结构不同,比如,直接存储和子节点个数相同的关键字,每个关键字和子节点第一个数据相同
例如下图中,但是之后的这种是更流行的方式。
技术分享

技术分享

技术分享

 

 
 
B+树的插入:
从根节点进行遍历,直到找到合适的位置进行插入。
技术分享

技术分享

技术分享

技术分享

技术分享

技术分享

技术分享

 

两者的区别:
 
 技术分享
面试题

技术分享

 技术分享

 

B*树的分裂:当一个结点满时,如果它的下一个兄弟结点未满,那么将一部分数据移到兄弟结点中,再在原结点插入关键字,最后修改父结点中兄弟结点的关键字(因为兄弟结点的关键字范围改变了);如果兄弟也满了,则在原结点与兄弟结点之间增加新结点,并各复制1/3的数据到新结点,最后在父结点增加新结点的指针。

所以,B*树分配新结点的概率比B+树要低,空间使用率更高;
 
应用

B-树主要应用在文件系统

 
为了将大型数据库文件存储在硬盘上 以减少访问硬盘次数为目的 在此提出了一种平衡多路查找树——B-树结构 由其性能分析可知它的检索效率是相当高的 为了提高 B-树性能’还有很多种B-树的变型,力图对B-树进行改进
 
 
 
 
 
 

B树 B+树 B*树 结构和区别

标签:nbsp   节点   strong   查找   检索   alt   第一个   数据   技术   

原文地址:http://www.cnblogs.com/anzhi/p/7536370.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!