B +树上的最小/最大记录数?

时间:2011-09-26 23:50:04

标签: data-structures b-tree

我正在寻找最好的& B +树的最坏情况(http://en.wikipedia.org/wiki/B-tree#Best_case_and_worst_case_heights),但我不知道如何使用这个公式和我的信息。 假设我有一棵树B,有1000条记录,B的最大(和最大)数量是多少? 我可以在每个页面上拥有尽可能多的/小键。我也可以拥有尽可能多的/少量的页面。 有任何想法吗? (如果你想知道,这不是一个功课问题,但它肯定会帮助我理解一些东西。)

3 个答案:

答案 0 :(得分:3)

我没有数学方便,但是......

基本上,树深度的主要因素是树中每个节点的“扇出”。

通常,在简单的B-Tree中,扇出为2个,2个节点作为树中每个节点的子节点。

但是对于B + Tree,他们通常会有更大的扇形。

要发挥作用的一个因素是磁盘上节点的大小。

例如,如果您有4K页面大小,例如4000字节的可用空间(不包括任何其他指针或与节点相关的其他元数据),并且可以说指向任何其他节点的指针树是一个4字节的整数。如果你的B + Tree实际上存储了4个字节的整数,那么组合大小(4个字节的指针信息+ 4个字节的密钥信息)= 8个字节。 4000个空闲字节/ 8个字节== 500个可能的孩子。

对于这个人为的案例,这给你一个500分的粉丝。

因此,使用一页索引(即根节点)或树的高度为1,您可以引用500条记录。添加另一个级别,你就是500 * 500,所以对于501 4K页面,你可以引用250,000行。

显然,密钥大小越大,或者节点的页面大小越小,树的扇出范围就越小。如果在每个节点中允许使用可变长度键,那么扇出可以很容易地改变。

但希望你能看到这一切如何运作的要点。

答案 1 :(得分:1)

这取决于树的精神。您必须定义此值。如果你说每个节点可以有4个孩子然后你有1000个记录,那么高度是

最佳案例log_4(1000)= 5

最坏情况log_ {4/2}(1000)= 10

arity是m,记录数是n。

答案 2 :(得分:1)

最好和最坏的情况取决于没有。每个节点都可以拥有的孩子。对于最好的情况,我们考虑这种情况,当每个节点具有最大子节点数(即m-ary树的m)时,每个节点具有m-1个密钥。所以,

第1级(或根)有m-1个条目 第二级有m *(m-1)个条目(因为根有m个孩子,每个m-1个键) 第3级有m ^ 2 *(m-1)个条目 .... Hth水平具有m ^(h-1)*(m-1)

因此,如果H是树的高度,则条目的总数等于n = m ^ H-1 这相当于H = log_m(n + 1)

因此,在你的情况下,如果你有n = 1000条记录,每个节点有m个孩子(m应该是奇数),那么最佳案例高度将等于log_m(1000 + 1)

同样,对于最坏的情况:

1级(根)至少有1个条目(最少2个孩子) 第二级至少有2 *(d-1)个条目(其中d = ceil(m / 2)是每个内部节点(根除外)可以拥有的最小子节点数) 第3级有2d *(d-1)个条目 ... Hth级别具有2 * d ^(h-2)*(d-1)个条目

因此,如果H是树的高度,则条目总数等于n = 2 * d ^ H-1,相当于H = log_d((n + 1)/ 2 + 1)< / p>

因此,在你的情况下,如果你有n = 1000条记录,每个节点有m个子节点(m应该是奇数),那么最坏情况下的高度将等于log_d((1000 + 1)/ 2 + 1)