學習B樹與B+樹,B*樹.

參考地址:,,,這裏
B樹即B-樹.B表平衡的意思.B樹必須中序遍歷,B+樹,則葉子掃一遍即可.B+樹支持區間查詢.
*號,要放在反引號裏面
定義:
有個階數,即最大子節點數m. 關鍵字,從小到大排列.每個節點,存儲鍵和值. 葉子節點,位於同一層. 每個關鍵字的左子樹的關鍵字都小於自己,而右子樹的關鍵字都大於自己.這一條所有的樹都應該這樣,爲了二分法快速查找. 根節點子節點數爲[2,m].其餘爲[m/2,m]節點數 節點,至少有(m-1)/2個關鍵字,至多m-1個.根節點至少1個關鍵字(2個子節點).注意這是關鍵字.m是最大子節點數. 注意區別關鍵字與子節點數.關鍵字=子節點數-1.
B樹插入:
如果,關鍵字<m-1,則插入,爲m-1,則插入後分裂.分成兩個子樹加上自己. 即2*(m-1)/2+1. 多叉樹與二叉樹的優勢是樹高小.因而查詢快. B+樹從葉子節點,一掃就完了. 成功查詢,B樹好.B樹比B+樹矮.B+樹,始終都要走從根到節點的距離. 而B樹,則有可能從在中間,因爲非葉子節點也含值.而B+樹非葉子節點不含值. B+樹,對於平均頻率查詢,倒是比較好. B樹,對頻率會變的查詢,是可以的.內存中B+樹無優勢,但磁盤中,優勢就出來了. B-樹,就是B樹.沒有什麼B-(減)樹.B樹就是B-樹.-是單詞連接符.不是減號. B*樹,就是至少有2/3*m個節點.[2m/3,m].B*樹空間利用率更高.分裂更少. B樹與二叉樹的區別是B樹一個節點可存儲多個關鍵字.在此比較.

其實,整個B樹與B+樹,B*樹,所有二叉樹,所有樹,都是在實數上的.
他們的調整就是調整附近位置.再滿足他們自己的限定條件.他們的位置無論如何調整,始終都是垂直不變的. 看起來調整了,不過是上下級的變化.他們的根本位置是不變的.因爲他們都是實數上數值.根本就沒變.

區間查詢(數據庫有用):查詢5~10這個區間.B+樹左邊一個點,右邊一個點,一把索.B樹成功查詢方便,因爲節點短.
B+樹的子節點(葉位置)都是連在一起的.所以可以一把索.相當於每個葉子的值都是手拉手的在實數上排列着的.
B樹B+樹的上層,其實因爲經常查找,所以,都在內存緩衝着的.
B*樹,在非根與非葉子節點處,再加上指向兄弟的指針.這樣,兄弟也鏈接上了.即非葉子節點也相互手拉手了.
B*樹,非葉子節點,>2m/3.
B+的+就是葉子結點是連着的.
B+樹分裂:
分配新結點,複製原結點一半數據過去,父結點增加新結點指針,隻影響父,新結點,不影響兄弟結點
B*數分裂:
先看兄弟結點,如未滿,則一部分至兄弟結點,調整兄弟節點,再調整自己節點. 如滿了,在原結點與兄弟結點中加新結點,各複製1/3數據過去,在父節點中增加新節點指針.
需要兄弟結點,所以,要有兄弟結點的鏈接指針,因而*就是葉子節點加上兄弟結點的意思.
也有基於頻率B樹.
二叉樹比二分查找的優點是:改變結構時,只需要常數開銷.,即方便增刪.
平衡算法,保持插入後,樹仍然是平衡的.
B樹的節點與關鍵字的關係是:節點 關鍵字 節點 關鍵字 節點...的關係.
子節點,可能爲空.即無內容的節點.
B樹性能等價於二分查找.節點滿時分裂成2個子節點,刪結點時,不足時,要合併節點.
B+樹,和另外一個節點,滿足2/3時,分節點,不足時,合併結點.
B+樹.從根部的節點的關鍵字,最終都壓扁下放到葉子節點.,B+樹就是非葉子結點,只起一個判定作用.葉子節點一層纔是所有數據,從頭到尾裝滿了實數線.更適用於文件索引.
B*樹,B樹再加上兄弟節點的指針,主要是爲了更節省空間

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章