參考:
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樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點關鍵字小,就進...