MS-數據結構-B-Tree&B+Tree

  1. B-Tree
    讀作B樹(不是B減樹),是一種自平衡的樹,能夠保持數據有序,這種數據結構能保證查找數據、順序訪問、插入刪除元素,都能在對數時間內完成。

    • 定義(引用自算法導論)
      一棵B樹T具有以下的性質:
      1. 每個節點x,

        • 有n個關鍵字
        • 每個關鍵詞按照非降序排列,x.key1<=x.key2<=x.key3<=...<=x.keyn
      2. 每個內部節點(非葉節點),有n+1個指向孩子節點的指針

      3. 每個內部節點的關鍵字,對孩子節點的關鍵字范圍加以分割

        k1 <= x.key1 <= k2 <= x.key2 <= ... <= x.keyn <= kn+1
        其中ki為孩子節點的關鍵字,x.keyi為內部節點的關鍵字

        節點(2,6)將孩子節點劃分范圍 1<2<(3,5)<6<8

      4. 每個葉子節點有相同的深度,即樹的高度

      5. 每個節點包含的關鍵字的個數:

        • 除了根節點以外的每個內部節點,至少有t-1個關鍵字,有t個孩子
        • 如果樹非空,根節點至少有一個關鍵字
        • 每個節點至多有2t-1個關鍵字,因此至多有2t個孩子
        • t為B-樹的最小度數,t>=2
          (t=2的B樹是最簡單的B樹,每個內部節點可以有2個、3個、4個孩子,即2-3-4樹
  2. B+Tree
    B+樹和B-樹有一些共同點,也有一些新的特征

    • 定義

      1. B+樹的中間節點不保存關鍵字,只用來索引,所有數據(關鍵字)都保存在葉子節點上。
      2. 葉子節點包含了所有的關鍵字,且葉子節點上的關鍵字按照非降序排列。
      3. 所有父節點的元素都同時存在于子節點,且在子節點中是最大(或最小)元素。
      4. 有n個元素(等同于關鍵字,但不是關鍵字)的內部節點,有n個孩子節點(B-Tree有n+1個孩子)


        B+樹,葉子節點按非降序鏈接
      • 特征
        1. 根節點的最大元素也是整棵B+樹的最大元素。
        2. 每個葉子節點都含有指向下一個葉子節點的指針,形成一個有序鏈表。
        3. B+樹只有葉子節點含有衛星數據,B-樹中每個節點都含有衛星數據。
          因為內部節點沒有衛星數據,相同大小的磁盤頁可以容納更多的節點元素,因此B+樹比B-樹更加的“矮胖”,因此磁盤IO次數會更少
        4. 聚簇索引(Clustered Index)中,葉子節點直接含有衛星數據,而非聚簇索引(NonClustered Index),葉子節點含有指向衛星數據的指針。
    • B+樹查找過程

      查找3, 第一次磁盤IO

      第二次磁盤IO

      第三次磁盤IO
      • 總結
        1. 因為內部節點含有衛星數據,B-樹的查找效率不穩定,最好的情況直接查找更節點就找到了,最壞情況要找到葉子節點才可以。
          B+樹每次查找都需要查到葉子節點,是穩定的。
        2. 范圍查詢,B+樹只要遍歷葉子節點就可以了,而B-樹需要復雜的中序遍歷
        3. 因為更“矮胖”,B+樹需要更少的磁盤IO次數。
  3. 為什么用B+樹存儲索引

    問題引入:使用B+樹做索引,查找效率大概是log(n),而hash做索引,效率是o(1),為什么不用hash做索引呢?

    :文件系統或者數據庫的索引一般存在硬盤上,如果數據量特別大的話,不能夠一次性全部加載到內存中。

    假設內存每次只能加載2個數,我們把數據組成一個3路B-樹,這樣每個節點最多含有2個元素,查找的時候,每次只加載1個節點就行了。

    之所以用B+樹,就像上邊介紹B+樹的時候說的,在范圍查找時非常方便,而B-樹需要使用中序遍歷,進行跨層訪問。


    3路B-樹,每個節點最多含有2個元素
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 一些概念 數據結構就是研究數據的邏輯結構和物理結構以及它們之間相互關系,并對這種結構定義相應的運算,而且確保經過這...
    Winterfell_Z閱讀 5,932評論 0 13
  • B樹的定義 一棵m階的B樹滿足下列條件: 樹中每個結點至多有m個孩子。 除根結點和葉子結點外,其它每個結點至少有m...
    文檔隨手記閱讀 13,336評論 0 25
  • 原文鏈接 B樹 1.前言: 動態查找樹主要有:二叉查找樹(Binary Search Tree),平衡二叉查找樹(...
    非典型程序員閱讀 1,183評論 0 3
  • 本文轉載自博客,因為題主寫的已經很詳細了。 寫在前面的一點,面試專用(m階指的是每個節點最多有m個子樹)。 一個m...
    放開那個BUG閱讀 1,197評論 0 5
  • 請幫我筑一個黑暗的小屋 也把我用水泥砌在里面 沒有門 也沒有窗 請擺放好我舊時的小書桌 不要修補 那斷了的桌板 請...
    孤鴻雁閱讀 326評論 0 0