有没有办法评估B +树所需的叶子数量?

问题描述 投票:0回答:1

如果我有t = #tuples(或#records)并且我可以利用的唯一其他信息是我的B + -tree的扇出F,有没有办法获得树需要多少叶子(树叶的#blocks) ?假设树必须平衡,从而尽可能地保留最多的信息。

示例:t = 40K,F = 40 ==> depth = log_40(40K)= 3,#leaves = ???

algorithm data-structures tree b-tree
1个回答
1
投票

B+ tree中,实际记录是从叶子中引用的。另一方面,内部节点不直接引用记录,而是定义键值的范围,以便遍历树到最终具有感兴趣记录的键值的叶子(块)。

B +树的另一个特性是内部节点的子节点数不仅具有上限(即扇出F),而且还具有下限:F / 2。 (我忽略了根被免除这个下限规则)。该1/2系数是填充因子(0.5)。

叶块数(L)由记录数(t)和扇出(F)限制,但不受树(非)平衡的方式限制。在最好的,最小的情况下,我们有:

min(L)=⌈t/F⌉

在最糟糕的情况下,我们有:

max(L)=⌈2t/F⌉

如果你有不同的填充因子(c> = 0.5),那么最坏的情况是:

max(L)=⌈t/cF⌉

请注意,增加填充因子会减少已用空间,但会在插入记录时增加时间开销。当填充因子接近1时,空间使用率保持在最低限度,但更新速度很慢。

© www.soinside.com 2019 - 2024. All rights reserved.