B樹和B+樹 紅黑樹
阿新 • • 發佈:2018-12-25
首先,B樹的建立就是為了優化資料庫查詢,如果採用二叉查詢樹(時間複雜度只要LogN)來進行查詢,那麼在磁碟進行I/O操作時,(資料太大需要進行分頁)每個磁碟頁對應一個節點;最壞情況:查詢次數等於輸的高度(時間複雜度LogN),
自頂向下查詢10:需要4次
那這樣的話,通過將樹變成矮樹胖樹即可;
B樹的結構:
每個節點不超過磁碟頁的大小(這裡是3階B樹,每個磁碟頁大小是3)即可;
每個節點的結構:
B+樹是B樹的變種:
優點:
1.單一節點儲存更多的元素,使得查詢的IO次數更少。(非子葉結點都存放的是索引,只有子葉結點才帶有衛星資料;而B樹的每個節點都有衛星資料,那這樣B+樹的結點會多出空間來放元素,也意味著B+樹比B樹還要矮胖);
2.所有查詢都要查詢到葉子節點,查詢效能穩定。(B樹最好的情況是根結點就是結果,最壞是子葉結點;而B+樹的資料都要在子葉結點中的衛星資料獲取)
3.所有葉子節點形成有序連結串列,便於範圍查詢。(如果想查詢一個範圍,B樹的時間複雜度要比B+樹高很多)
紅黑樹(logN):
第五點很重要,每次自平衡的時候都要依據這一點來進行調整;
TreeSet和TreeMap中都用到了紅黑樹的結構,Java8中HashMap的衝突解決中也採用了紅黑樹的結構;