簡體   English   中英

分裂B +樹根

[英]splitting a B+ tree root

拆分b +樹的根節點時,我知道您采用n / 2 +1並使其成為新的根並相應地拆分所有內容。

我的問題是當n等於奇數時。 像在這種情況下, n = 5

因此,讓我們使用一個簡單的示例:

   10  20  30  40 
 /   |   |   |   \

所有的孩子都是空的。 可以說我要加50。

看起來像

       30
      /  \
(10,20)   (40,50) 

要么

           40
          /  \
 (10,20,30)  (50)

還是不同的?

如果拆分包含節點n鍵-包括導致分裂進入關鍵-然后(n - 1) / 2鍵進入一個新的孩子, n - 1 - (n - 1) / 2轉到其他,一個鍵升至父級(作為分隔鍵)。 向上的鍵不一定與引起拆分的鍵相同。 如果分隔符無處可去,則您將擁有一個新的根,分隔符將是其唯一的單獨占用者(最低占用要求不適用於根節點)。

當然,如果看一下取出新分隔符后剩下的其余部分,這些公式看起來會更友好: r = n - 1表示一側為r / 2 ,另一側為r - r / 2

換句話說,在正常情況下,兩個“半部”最多相差一個,如果總鍵數為偶數,則會發生這種情況,因此,當取出分隔鍵時會留下一個奇數的休止符。 左鍵或右鍵都無關緊要。

但是,這並不是一成不變的。 還有其他有效的重新分配策略,最著名的是Knuth's B * ,其中兩個完整的節點組成三個已經是2 / 3rds完整的節點,依此類推。 這也表明拆分/合並邏輯與不改變結構的重新分配措施緊密相關,即兄弟姐妹之間密鑰的捐贈和借用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM