B樹和B+樹的區別

 

定義

B 樹能夠看做是對2-3查找樹的一種擴展,即他容許每一個節點有M-1個子節點。緩存

  • 根節點至少有兩個子節點
  • 每一個節點有M-1個key,而且以升序排列
  • 位於M-1和M key的子節點的值位於M-1 和M key對應的Value之間
  • 其它節點至少有M/2個子節點

下圖是一個M=4 階的B樹:動畫

B tree

能夠看到B樹是2-3樹的一種擴展,他容許一個節點有多於2個的元素。blog

B樹的插入及平衡化操做和2-3樹很類似,這裏就不介紹了。下面是往B樹中依次插入排序

6 10 4 14 5 11 15 3 2 12 1 7 8 8 6 3 6 21 5 15 15 6 32 23 45 65 7 8 6 5 4遞歸

的演示動畫:索引

 

B+樹是對B樹的一種變形樹,它與B樹的差別在於:內存

  • 有k個子結點的結點必然有k個關鍵碼;
  • 非葉結點僅具備索引做用,跟記錄有關的信息均存放在葉結點中。
  • 樹的全部葉結點構成一個有序鏈表,能夠按照關鍵碼排序的次序遍歷所有記錄。

以下圖,是一個B+樹:get

B Plus tree

下圖是B+樹的插入動畫:it

 

B和B+樹的區別在於,B+樹的非葉子結點只包含導航信息,不包含實際的值,全部的葉子結點和相連的節點使用鏈表相連,便於區間查找和遍歷。擴展

B+ 樹的優勢在於:

  • 因爲B+樹在內部節點上不包含數據信息,所以在內存頁中可以存放更多的key。 數據存放的更加緊密,具備更好的空間局部性。所以訪問葉子節點上關聯的數據也具備更好的緩存命中率。
  • B+樹的葉子結點都是相鏈的,所以對整棵樹的便利只須要一次線性遍歷葉子結點便可。並且因爲數據順序排列而且相連,因此便於區間查找和搜索。而B樹則須要進行每一層的遞歸遍歷。相鄰的元素可能在內存中不相鄰,因此緩存命中性沒有B+樹好。

可是B樹也有優勢,其優勢在於,因爲B樹的每個節點都包含key和value,所以常常訪問的元素可能離根節點更近,所以訪問也更迅速。下面是B 樹和B+樹的區別圖:

Different between B tree and B plus tree

相關文章
相關標籤/搜索