1. 程式人生 > >淺談資料結構中的樹(B/B+/B-/B*)

淺談資料結構中的樹(B/B+/B-/B*)

一、B樹(二叉搜尋樹)

1、所有非葉子節點至多擁有兩個兒子。

2、所有節點儲存一個關鍵字。

3、左孩子小於父節點,右孩子大於父節點。


二、B-樹(多路搜尋樹)

1、定義任意多個非葉子節點最多隻有M個孩子

2、根節點的兒子數【2,M】

3、除根節點之外的非葉子節點的孩子數【M/2,M】

4,每個節點至少存放M/2-1(向上取整),和至多M-1個關鍵字(至少2個)

5、非葉子節點的關鍵字個數=所指向的孩子數-1;

6、非葉子節點的關鍵字K[i]<K[i+1]

7、非葉子節點的指標P[1]/P[2]...指向的關鍵字小於K[i]的子樹,P[m]指向的關鍵字大於K[m-1]

8、所有葉子節點位於同一層


B-樹的搜尋從根節點開始,對節點內的關鍵字有序序列進行二分查詢,命中則返回,否則查詢關鍵字的兒子節點,直到兒子節點為空,或者為葉子節點。

B-樹的特性:

1、關鍵字集合分佈在整棵樹中

2、任何一個關鍵字出現且只出現在一個節點中

3、搜尋有可能在非葉子節點結束

4、其搜尋效能等價於在關鍵字集合中做了一次二分查詢

5、自動層次控制,B-樹的效能總是等價於二分查詢;但是由於M/2的限值,再插入節點時如果節點已滿,需要將節點       分裂為兩個各佔M/2的節點,再刪除節點時,需要將兩個不足M/2的節點合併。

三、B+樹(多路搜尋樹)

1、定義與B-樹相同除了

2、非葉子節點的指標數與關鍵字數量相同

3、非葉子節點的子樹指標P[i]指向關鍵字屬於[P[i],P[i+1]]的子樹(B-樹是開區間的)

4、為所有葉子節點增加一個鏈指標

5、所有關鍵字都在葉子節點出現


B+樹只有達到葉子節點才命中,也等價於在關鍵字全集做一次二分查詢。

特點:

1、所有關鍵字都出現在葉子節點的連結串列中,且來拿表中的關鍵字恰好是有序的

2、不可能在非葉子節點命中

3、非葉子節點相當於是葉子節點的索引,葉子節點相當於是儲存關鍵字的資料層。

4、更適合檔案索引系統

四、B*樹

是B+樹的變體,在B+樹的非根和非葉子節點增加指向的兄弟的指標。


B*樹定義了非葉子節點的關鍵字個數至少為(2/3)M

B+樹的分裂:當一個節點滿時分配一個新節點,將原節點1/2的資料複製到新節點,最後在父節點中增加新結點的指標。B+樹的分裂隻影響源節點和父節點,不會影響兄弟節點,所以不需要指向兄弟的指標。

B*樹的分裂:當一個節點滿時,如果兄弟節點未滿,把他的一部分資料移到兄弟節點,再在原節點中插入關鍵字,最後在父節點中修改兄弟節點的關鍵字。如果兄弟節點滿了,則在原節點和兄弟節點中間插入新節點,並且各複製1/3資料到兄弟節點,最後在父節點增加新節點的指標。(將節點最低利用了從二分之一提高到三分之二)

五、紅黑樹

          是一種平衡二叉查詢樹

      1、性質

         (1)節點是紅色或者黑色

         (2)根節點是黑色

         (3)每個葉節點都是黑色

         (4)每個紅色節點的子節點都是黑色

         (5)任意葉節點路徑上的黑色節點相等