二叉排序樹或平衡二叉樹(AVL樹、紅黑樹)
結點只有兩個孩子,且結點只能存儲一個元素
問題:
一個結點只存儲1個元素,在元素很多時,使得樹的深度或高度很大
出現的問題是:內存存取外存的次數非常多-使得時間效率降低
解決方法:
2-3樹
結構:
1970年 約翰·霍普克洛夫發明的多路查找樹,它一個結點具有2孩子(2結點)或3孩子(3結點)
2結點:一個元素+2個孩子(或沒有孩子)
3結點:一大一小2元素+3個孩子(或沒有孩子),3個孩子的排列順序是小、中、大
2-3樹結構圖
2-3-4樹
結點具有2孩子(2結點)或3孩子(3結點)或4個孩子(4結點)
結構:
2結點:一個元素+2個孩子(或沒有孩子)
3結點:一大一小2元素+3個孩子(或沒有孩子),3個孩子的排列順序是小、中、大
4結點:小中大3元素+4個孩子(或沒有孩子), 4個孩子的排列順序是小、中、大
B樹
Blance-Tree
一種平衡多路查找樹,其中的2-3樹和2-3-4樹是B樹的特例,結點最大的孩子數目稱爲B樹的階,
B樹的孩子數目有可以有多個
其中:
2-3樹最多有3個孩子--3階B樹
2-3-4樹最多有4個孩子--4階B樹
B樹是如何做到減少內存和外存數據交換的次數?
在處理的硬盤數據量很大,一次無法全部裝入內存--調整B樹的階數和硬盤存儲的頁面大小匹配,讓樹的根結點持久保存在內存中;例如:B樹的階爲1001,則一個結點包含1000個關鍵字,高度爲2,可以存儲10億個關鍵字,那麼在這棵樹上尋找關鍵字至多需要兩次硬盤的讀取。
B樹減少定位記錄時所經歷的中間過程,從而加快存取速度
適用於:內外存數據的交互、 讀寫相對大的數據塊的存儲系統、文件系統的查找、數據庫索引
時間複雜度:O(logn)
缺點是:B樹需要中序遍歷結點,且最壞的情況是在葉子結點找到
B+樹
在出現分支結點中的元素會被當做該分支結點位置的中序後繼者(葉子結點)再次列出
B+樹的存儲結構
和B樹的區別:
1)有n棵子樹的結點中包含n個關鍵字
2)所有葉子結點包含全部的關鍵字信息(所有的數據都在葉子結點),指向含這些關鍵字記錄的指針;其中的葉子結點本身依據關鍵字大小順序連接
3)所有的分支結點可看出索引,結點中僅含有子樹中最大或最小的關鍵字
2)點的詳細解析:
所有的數據都在葉子結點,非葉子結點中存放元素(用於索引)不存放數據,因此每一層可容納更多的元素,磁盤的IO操作次數相比B樹少;
B+樹的所有葉子結點使用鏈表連接,便於區間查找和遍歷。
適用於:文件系統的查找、數據庫索引