B樹與B+樹最簡知識總結與對比

B樹:平衡的多路搜索樹

B樹中全部節點的孩子節點數的最大值稱爲B樹的階,一般用m表示,m約束了每一個節點子樹的最大數量(定義),也約束了子樹的最少數量(m/2向上取整)。定義以下node

  • 每一個節點至多有m棵子樹(m-1個關鍵字)。
  • 除根節點外全部非葉節點至少有m/2(向上取整)棵子樹.
  • 全部的葉子節點都出如今同一層,且不攜帶信息,絕對平衡。
  • 全部非葉節點的結構爲n,P0,K1,P1,K2,...,Kn,Pn.其中Ki爲關鍵字,Pi爲指向子樹根節點的指針。且Ki-1<Pi-1(表示所指向子樹的全部節點的關鍵字)<KiB樹的每一個節點既存儲數據又存儲所用

B樹特色

B樹的根節點能夠常駐內存,其他節點所有存放在磁盤上!
B樹每次讀入的節點能夠包含不少關鍵字(上限由m決定),與外存的批量訪問的特色相對應。
B樹更加關注常係數的優化。常係數的單位爲萬或者10萬。

當m取256時,相比平衡BST的高度,BST在最壞狀況下樹高(IO次數)下降其1/7,最好狀況下樹高下降1/8性能

B樹查找

與BST很相似,只是每一個節點都是多個關鍵字的有序表。B樹的查找包含兩個基本操操做:1.在B樹中找節點(磁盤IO操做);2.在節點內找關鍵字(在內存中)優化

B樹插入:上溢而後分裂。

B數的插入(定位+插入),因插入是使得節點的關鍵字數量增長,當個數在[m/2-2,m-1](b樹定義)時,必須對節點進行分裂,分裂的過程等價於在父節點中插入一個關鍵碼,因此,分裂過程可能一直進行到根節點。B樹長高的惟一方式:根節點出發生了上溢操做,此時分裂後,根的子樹僅爲2.ui

B樹的刪除:下溢而後合併。

當直接刪除後知足B樹定義,則ok,不然,而後看兄弟夠借,爲了保證有序性,具體是經過三角借債的方式完成,最後纔是合併。指針

B+樹:範圍查詢+查詢性能穩定

定義

  • 全部的關鍵碼都出如今葉子節點上B+樹內部節點只存儲索引
  • 全部的非葉節點的關鍵碼是下一層相應節點中最大關鍵碼(最小關鍵碼)的拷貝
  • 節點的子樹個數與關鍵字個數相同。
  • 葉子節點之間經過鏈表串聯在一塊兒

區別

  • B+中內結點只做索引使用, 去掉了其中指向data record的指針, 使得每一個結點中可以存放更多的key, 所以能有更大的出度. 這有什麼用? 這樣就意味着存放一樣多的key, 樹的層高能進一步被壓縮, 使得檢索的時間更短.、
  • Because B trees contain data with each key, frequently accessed nodes can lie closer to the root, and therefore can be accessed more quickly.

https://stackoverflow.com/questions/870218/what-are-the-differences-between-b-trees-and-b-treescode

相關文章
相關標籤/搜索