寫在開頭:B-樹,就是B樹。因B樹的英文名稱為B-tree ,B-樹因此而來,有人會誤以為B-樹是一種樹,而B樹又是另外一種樹。實際上,B-tree就是指的B樹。
而且B-樹不可以讀成B減樹。。。
一:預備知識:
磁盤I/O:是指磁盤的輸入和輸出(Input和Output的縮寫)。
二叉查找樹(Binary Sort Tree),簡稱BST,其查找的時間復雜度O(log2N)與樹的深度相關,那么降低樹的深度自然會提高查找效率。數據庫索引一般使用B樹存儲,其索引存在磁盤中,利用索引查詢時,對於數據量大的索引不可能一次全部加載,只是一次次加載磁盤頁,在B樹中,每個節點的大小為一個磁盤的頁。在大量數據中實現索引查詢時 ,樹節點存儲的元素數量是十分有限的,如果元素數量非常多的話,查找就退化成節點內部的線性查找了,二叉查找樹結構會因樹的深度過大而造成磁盤I/O讀寫過於頻繁,進而導致查詢效率低下,磁盤查找存取的次數往往由樹的高度所決定,為了減少樹的深度 我們采用多叉樹結構
我們通過 減少樹的結構盡量減少樹的高度, 減少磁盤查找存取的次數 我們就想到了多路查找樹。 許多數據庫系統都一般使用B樹或者B樹的各種變形結構。一棵含n個結點的B樹的高度為O(lgn)。
B 樹又叫平衡多路查找樹。它的每一個節點最多包含k個孩子,k便稱為B樹的階。k的大小取決於磁盤頁的大小。
1.樹中每個結點含有最多含有k個孩子,即k滿足:ceil(k/2)<=k<=k (ceil(x)是一個取上限的函數);
2.除根結點和葉子結點外,其它每個結點至少有[ceil(m / 2)]個孩子
3..根節點至少有兩個孩子
4..所有葉子結點都出現在同一層
5..每個節點中元素從小到大排列
6..中間的節點有k-1個元素和k個孩子
當單一節點元素很多時,B樹在查詢時次數不比二叉查找樹小,
二:插入:
若要插入4,,自頂向下查找4的節點位置,4應該插在3,5之間,2,6和3,5都是兩元素節點,無法增加根節點可以升級為兩元素結點,4,9.
以下節點為符合規則也要改變,維持多路平衡。
三:刪除
例如,我們要刪除11,但是12不可只有一個孩子,我們找出12,13,15中的中位數13作為父節點,12下移成為左孩子。
四:應用:
用於部分數據庫索引,文件系統等