天天看點

b樹與b+樹的差別_<面經>B樹、B樹、B+樹、B*樹

B樹為二叉搜尋樹;

1.所有非葉子結點至多擁有兩個兒子(Left和Right);

2.所有結點存儲一個關鍵字;

3.非葉子結點的左指針指向小于其關鍵字的子樹,右指針指向大于其關鍵字的子樹;

B-tree:

b樹與b+樹的差別_<面經>B樹、B樹、B+樹、B*樹

一棵m階的B樹(B-tree)滿足下列條件:

1.樹中每個結點至多有m個孩子;

2.除根結點和葉子結點外,其它每個結點至少有m/2個孩子;

3.若根結點不是葉子結點,則至少有2個孩子;

4.所有葉子結點(外部節點)都出現在同一層,葉子結點不包含任何關鍵字資訊;

5.所有非終端結點中包含下列資訊資料 ( n, A0 , K1 , A1 , K2 , A2 , … , Kn , An ),其中:Ki (i=1,…,n)為關鍵字,且Ki < Ki+1 , Ai (i=0,…,n)為指向子樹根結點的指針, n為關鍵字的個數

6.非葉子結點的指針:P[1], P[2], …, P[M];其中P[1]指向關鍵字小于K[1]的子樹,P[M]指向關鍵字大于K[M-1]的子樹,其它P[i]指向關鍵字屬于(K[i-1], K[i])的子樹;

B+樹

b樹與b+樹的差別_&amp;lt;面經&amp;gt;B樹、B樹、B+樹、B*樹

B+樹可以看作是B樹的一種變形,在實作檔案索引結構方面比B樹使用得更普遍。

一棵 m 階B+樹可以定義如下:

1.樹中每個非葉結點最多有 m 棵子樹;

2.根結點 (非葉結點) 至少有 2 棵子樹。除根結點外, 其它的非葉結點至少有 ém/2ù 棵子樹;有 n 棵子樹的非葉結點有 n-1 個關鍵碼。

3.所有葉結點都處于同一層次上,包含了全部關鍵碼及指向相應資料對象存放位址的指針,且葉結點本身按關鍵碼從小到大順序連結;

4.每個葉結點中的子樹棵數 n 可以多于 m,可以少于 m,視關鍵碼位元組數及對象位址指針位元組數而定。

5.若設結點可容納最大關鍵碼數為 m1,則指向對象的位址指針也有 m1 個。

6.結點中的子樹棵數 n 應滿足 n 屬于[m1/2, m1]

7.若根結點同時又是葉結點,則結點格式同葉結點。

8.所有的非葉結點可以看成是索引部分,結點中關鍵碼 Ki 與指向子樹的指針 Pi 構成對子樹 (即下一層索引塊) 的索引項 ( Ki, Pi ),Ki 是子樹中最小的關鍵碼。

9.特别地,子樹指針 P0 所指子樹上所有關鍵碼均小于 K1。結點格式同B樹。

10.葉結點中存放的是對實際資料對象的索引。

11.在B+樹中有兩個頭指針:一個指向B+樹的根結點,一個指向關鍵碼最小的葉結點。

B+Tree與B-Tree差別

1.其定義基本與B-樹同,除了:

2.非葉子結點的子樹指針與關鍵字個數相同;

3.非葉子結點的子樹指針P[i],指向關鍵字值屬于[K[i], K[i+1])的子樹(B-樹是開區間);

4.為所有葉子結點增加一個鍊指針;

5.所有關鍵字都在葉子結點出現;B+Tree隻有達到葉子結點才命中(B-Tree可以在非葉子結點命中)

B+Tree的特性

1.所有關鍵字都出現在葉子結點的連結清單中(稠密索引),且連結清單中的關鍵字恰好是有序的;

2.不可能在非葉子結點命中;

3.非葉子結點相當于是葉子結點的索引(稀疏索引),葉子結點相當于是存儲(關鍵字)資料的資料層;

4.更适合檔案索引系統

B*Tree

b樹與b+樹的差別_&amp;lt;面經&amp;gt;B樹、B樹、B+樹、B*樹

B*Tree是B+樹的變體,在B+Tree的非根和非葉子結點再增加指向兄弟的指針;B*樹配置設定新結點的機率比B+樹要低,空間使用率更高;

總結

B-樹:多路搜尋樹,每個結點存儲M/2到M個關鍵字,非葉子結點存儲指向關鍵字範圍的子結點;所有關鍵字在整顆樹中出現,且隻出現一次,非葉子結點可以命中;

B+樹:在B-樹基礎上,為葉子結點增加連結清單指針,所有關鍵字都在葉子結點中出現,非葉子結點作為葉子結點的索引;B+樹總是到葉子結點才命中;

B*樹:在B+樹基礎上,為非葉子結點也增加連結清單指針,将結點的最低使用率從1/2提高到2/3;