面經筆記 B樹 B 樹

2021-08-03 14:17:42 字數 1623 閱讀 3818

參考:

b樹/多叉平衡查詢樹:

背景:

b樹是為磁碟設計的多路平衡搜尋樹。乙個b樹節點通常和乙個完整的磁碟頁一樣大,每次查詢的結點深度(根節點其實永久儲存在主存中)即為i/o操作的次數。由於其分支因子大,故其優勢是降低磁碟i/o操作次數

二叉樹的儲存能力有限,當元素過多時,樹的深度過大,退化為節點內部線性查詢,查詢效率低下。

為了降低樹的深度,採用多叉樹,多叉平衡查詢樹應運而生,即b樹(b-tree樹即b樹,b即balanced,平衡的意思)。

b樹的各種操作能使b樹保持較低的高度,從而達到有效避免磁碟過於頻繁的查詢訪問操作,從而有效提高查詢效率)。

減少io操作是效率提公升的關鍵。

m階b樹:

[*]為向上取整

b樹插入操作:
b樹的插入在葉結點,當結點空間滿了,則**為兩個相鄰結點,中間關鍵字上移到父節點中。

若父節點也滿了,同樣**並上移,

直至根節點,若根節點也滿了,則中間元素上移到新的根結點中,樹的深度增加一層

b樹刪除操作:

先刪除:

然後調整平衡性:

若某節點元素小於[m/2]-1,則:

- 若相鄰兄弟元素大於[m/2]-1,從相鄰兄弟借乙個元素

- 若相鄰兄弟元素小於等於[m/2]-1,則合併兩結點

b+樹:

b+樹將所有衛星資料都存放在葉結點中,內部結點只存放關鍵字和孩子指標,因此最大化了內部結點的分支因子。且所有的葉子結點和相連的節點使用鍊錶相連,便於範圍查詢和遍歷。

有n棵子樹的結點中含有n個關鍵字; (而b樹是n棵子樹有n-1個關鍵字)

所有的葉子結點中包含了全部關鍵字的資訊,及指向含有這些關鍵字記錄的指標,且葉子結點本身依關鍵字的大小自小而大的順序鏈結。(而b樹的葉子節點並沒有包括全部需要查詢的資訊)

所有的非終端結點可以看成是索引部分,結點中僅含有其子樹根結點中最大(或最小)關鍵字。 (而b 樹的非終節點也包含需要查詢的有效資訊)

b+ 樹的優點在於

由於b+樹在內部節點上不好含資料資訊,因此在記憶體頁中能夠存放更多的索引資訊,查詢所需的io次數減少

資料存放的更加緊密,具有更好的空間區域性性。因此訪問葉子幾點上關聯的資料也具有更好的快取命中率。

b+樹的葉子結點都是相鏈的,因此對整棵樹的遍歷只需要一次線性遍歷葉子結點即可。而且由於資料順序排列並且相連,所以支援範圍查詢和搜尋。而b樹則需要進行每一層的遞迴遍歷。相鄰的元素可能在記憶體中不相鄰,所以快取命中性沒有b+樹好。

B樹,B 樹,B 樹,B 樹

小彰的部落格 b樹 即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點...

B樹 B 樹 B 樹 B 樹

b 樹即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left 和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點關鍵字小,就...

B樹 B 樹 B 樹 B 樹

b樹 即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點關鍵字小,就進...