[英]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.