[英]Deleting key from a B+ Tree
我的教授正在講授有關B +樹刪除的知識,我感到非常困惑。 據他說,從B +樹中刪除任何密鑰:
1- First navigate to the leaf *L* where it belongs.
2- If the *L* is at least half full if you can simply delete it.
3- If it contains d-1 elements then you need to redistribute and merge.
如果您看到下圖,在這里我想從B +樹中刪除19和20。
從B +樹中刪除19和20之后。
題:
我很困惑,為什么在這里根本需要重新分配和合並? 如果您只是簡單地從葉節點中刪除19和20,而不進行任何分配,那么它應該工作正常嗎? 為什么在這里進行重新分配? 誰能解釋?
是因為24的左指針指向20而不是19。這就是為什么20而不是19需要重新分配的原因。
B +樹是一個自平衡搜索樹。
自平衡樹需要保持最大樹深度,以與它擁有的元素數量的對數成比例。
B +這樣做,在插入和重新分配時進行拆分和添加層,在刪除時刪除節點。
好的,我了解這個問題。
B +樹的屬性。
所有葉子的深度應相同,並且每個葉子節點中的最小元素應等於樹的深度。 請參閱以下示例:
所有葉子的深度相同,這里d = 2。
d
到2*d
鍵之間應該存在。 d + 1
到2*d + 1
子指針之間應該有。 在下面給出的B +樹中,每個節點都有2
和2*2
數據條目,可能的根除外。 每個節點最少有2個密鑰。
只有B +樹的根只能少於d個鍵,這是我們唯一的例外。
在我的問題中,當您刪除19
,B + Tree的屬性沒有受到侵犯,但是當您刪除20
,節點中包含的元素總數小於d。 因此,必須執行重新分配和合並,以便不違反B +樹的屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.