B树和B+树

1、B树

  (也有被称作 B- 树,B-树和B树是同一个东西,统称B树)。

  B树本质是一种多路平衡查找树,目的在于提高磁盘的效率,二叉树的查找效率已经很高了,但是如果存储大量信息,这个二叉树的深度就会很高,这些不同深度的信息在硬盘上存储的会很分散,在不同的道上,所以降低了查找效率,而B树可以改善这一问题。

2、B树的阶数 m 是人为规定的,指的是为每个结点开辟了多少存储空间。m阶B树结点关键字字数最多为m-1。

  

  B树实际的样子应该画成这样:

3、B树的性质:

   A、每个结点最多有m个分支(子树),求最少的分支数要看该结点是否是根结点。

    是根结点但不是叶子结点:至少有两个分支

    非根非叶结点至少有:至少有⌈m/2⌉个分支

  B、有n+1个分支的结点有 n个关键字,他们按递增的顺序排列,m是阶数。

    根结点:2 ≤ n+1

    非根结点:⌈m/2⌉ ≤ n+1

  C、结点内各关键字互不相等。

  D、叶结点处于同一层,可以用空指针表示失败到达的位置。

  E、计算所有结点数时,要把最下面的白色分支也就是叶子结点算进去。

   F、Pi 所指向的结点关键字小于Keyi+1大于Keyi

  G、B树的操作

    查找:

                       

     插入: 

                        

     删除: 

                       

   H、假设含n个关键字的m阶B-树的最大深度为 h ,可知第h层为叶子结点,那么当m阶B-树的深度为(h+1),可知第h+1层为叶子结点,第h+1层的叶子结点数为n+1

    可以推导出:

                

     时间复杂度:

    

      重点推导:为什么当前树有n个关键字时第h+1层的叶子结点数为n+1?

          设第 i 层的总关键字数Si,结点数为mi

          则第h+1层结点数为:mh+1=sh+mh

          第h层为: mh=sh-1+mh-1    

          ......

          第2层为:m2=s1+m1

          已知 m1=1

          综合的 mh+1=sh+sh-1+...+s1+1

              sh+sh-1+...+s1=N

              mh+1=N+1

4、B+树

   a、B树中,n个关键字结点有n+1个分支

    B+树中,n个关键字结点有n个分支

  b、关键字字数n的取值范围为:

    在B+树中:

    其他结点(除了根结点):⌈m/2⌉≤n≤m

                         根结点的取值范围: 2≤n≤m

    在B树中:

    其他结点(除了根结点):⌈m/2⌉-1≤n≤m-1  

       根结点的取值范围:1≤n≤m-1

  c、在B+树中的叶子结点包含信息而且包含了全部关键字,叶子结点引出的指针指向记录。

  d、B+树中所有非叶子结点只起到索引的作用,即结点中每个索引项只含有对应子树最大关键字和指向该子树的指针,不含有该关键字对应记录的存储地址。

     B树中,每个关键字对应一个记录的存储地址。

  e、在B+树上有一个指针指向关键字最小的叶子结点,所有叶子结点连接成一个线性链表,而B树没有。

原文地址:https://www.cnblogs.com/oaoa/p/13758218.html