Flutter 表單
B樹
並不是心裡有b數的b數,而是一種多路平衡查詢樹。
維基百科對於B的解釋
魯道夫·拜爾(Rudolf Bayer)和 艾華·M·麥克雷(Ed M. McCreight)於1972年在波音研究實驗室(Boeing Research Labs)工作時發明了B 樹,但是他們沒有解釋B 代表什麼意義(如果有的話)。道格拉斯·科默爾(Douglas Comer)解釋說: 兩位作者從來都沒解釋過B樹的原始意義。正如我們所見,“balanced”, “broad” 或 “bushy” 可能適合。其他人建議字母“B”代表 Boeing。源自於他的贊助,不過,看起來把B樹當作“Bayer”樹更合適些
(Donald Knuth) 在他1980年5月發表的題為“CS144C classroom lecture about disk storage and B-trees”的論文中推測了B樹的名字取義,提出“B”可能意味Boeing 或者Bayer 的名字。
一棵m階B樹或為空樹,或為滿足如下特性的m叉樹:
(1)樹中每個節點最多有m棵子樹(即節點最多含有m-1個關鍵字)
(2)若根節點不是終端節點,則至少有兩棵子樹(即最少有2個位元組點)
(3)除了根節點外的所有非葉子節點至少有 m / 2 向上取整棵子樹(即除了根節點以外的所有非葉子節點至少有m / 2 向上取整後-1個關鍵字)
(4)非葉子節點結構如下:
n P0 K1 P1 K2 ... Pn Kn
Ki (i = 1, 2, 3,...,n) 為n個關鍵字,所有Ki < Kj (i < j)
Pi (i = 0, 1, 2, ..., n)為n+1個指向子節點的指標,Pi 所指向子樹的所有節點值 均 大於 Ki, 均小於Pj (i < j)所指向的所有子樹節點值
(5)所有的葉子節點都出現在同一層上(最後一層),並且不帶任何資訊
如圖是一棵3階B樹(葉子節點沒有畫出來)
一棵有n個關鍵字,m階,高度為h的B樹,其高度範圍是多少?
LOGm(n+1) <= h <= LOG「m/2] ((n+1) / 2) + 1