2011-05-12 67 views
5

我正在學習考試,並且出現在B-trees上。維基百科將B樹描述爲樹,其中節點具有至少d和至多2d個鍵,因此至多2d + 1個葉。例如,如果d = 1,它最多會有2個鍵和3個孩子,使它成爲2-3樹。但是,除非我錯誤,否則這不會允許例如2-3-4樹。b-trees的順序

然而,我們的材料描述了一棵樹,其中每個節點至少有t≥2個t-1個鍵和至多2t-1個鍵。這意味着節點具有奇數個鍵和偶數個子節點。例如t = 2會有1到3個鍵,最多4個孩子,使它成爲2-3-4樹。另一方面,用這種表示法不可能有2-3棵樹。

最重要的是,有一個Knuth的表示法,其中d表示節點中的最大子節點數。這個符號將允許偶數和奇數的孩子,允許2-3棵樹和2-3-4棵樹。

我知道2-3棵樹和2-3-4樹存在。

什麼是真正的符號?有沒有真正的符號?作爲額外的問題;什麼是大小爲h的樹的最大密鑰數量?在谷歌的學者對於B樹的後起之秀

回答

2

如果您仔細閱讀wiki文章,您會發現B樹有兩種主要變體(不包括結構變體如B *和B +),其中一個帶有t - >2t鍵,另一個帶有t - >2t+1鍵。

翻譯這些變體小童人數我們有一個與t+1 - >2t+1孩子,和一個與t+1 - >2t+2孩子。

所以基本上回答你的問題,雙方2-3和2-3-4樹是有效的樹,每個根據不同的變種/定義:

2-3是第一類(t+1的 - >2t+1兒童其中t = 1)

2-3-4是第二種(t+1 - >2t+2兒童其中t = 1)

這兩種變型的有效性來源於這樣的事實,這兩個分割和合並(刪除操作和從ADT插入操作)是有效的:

t - >2t

拆分。 當我們添加一個新元素並且一個節點的鍵數超過最大鍵數時會發生2t 所以我們有2t+1鍵,我們將節點分成兩個節點,並將一個元素推送給父節點,在兩個子節點中留下2t個鍵,並在每個孩子的鑰匙t。這是可以接受的,因爲節點中的最小密鑰數量確實是t

合併。 當我們刪除一個關鍵字並且一個節點包含小於最小數字t,並且它的兄弟也處於最小值時會發生。所以我們在我們的新合併節點中有t-1 + t個鍵,結果節點必須是有效的:t-1 + t = 2t-1 <= 2t。大。

所以也有t - >2t+1

拆分。 2t+2變成tt+1這是OK的。

合併。 t-1 + t = 2t-1 <= 2t+1

當然有在運行時間沒有什麼區別,只是很少理論意義略有實現差異(你可以稍微優化一些算法與第一種變體,但沒有這麼多,它會改變運行時的複雜性)。

1

搜索=>無處不在B樹,科默,1979年

這是你在數據結構的論文發現被引用最多的論文。本文詳細描述了b樹(它是如何工作的,複雜性以及它的變體...)。你應該找到你的答案。

我希望這有助於

p.s.如果您使用與教導不同的公式,請在論文中引用該論文:P