1. 程式人生 > >B樹和B+樹 紅黑樹

B樹和B+樹 紅黑樹

首先,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的衝突解決中也採用了紅黑樹的結構;