Data structures B&x2B上的最小/最大记录数;树?

Data structures B&x2B上的最小/最大记录数;树?,data-structures,b-tree,Data Structures,B Tree,我正在研究B+树()的最佳和最坏情况,但我不知道如何使用这个公式和我掌握的信息。 假设我有一棵树B,它有1000条记录,那么B级的最大数量是多少? 我可以在每页上有任意多个/小的键。我也可以有尽可能多/少的页面。 有什么想法吗? (如果你想知道,这不是一个家庭作业问题,但它肯定会帮助我理解hw的一些内容。)这取决于树的算术性。您必须定义此值。如果您说每个节点可以有4个子节点,那么您有1000条记录,那么高度是 最佳情况日志4(1000)=5 最坏情况日志{4/2}(1000)=10 算术数为m,

我正在研究B+树()的最佳和最坏情况,但我不知道如何使用这个公式和我掌握的信息。 假设我有一棵树B,它有1000条记录,那么B级的最大数量是多少? 我可以在每页上有任意多个/小的键。我也可以有尽可能多/少的页面。 有什么想法吗?
(如果你想知道,这不是一个家庭作业问题,但它肯定会帮助我理解hw的一些内容。)

这取决于树的算术性。您必须定义此值。如果您说每个节点可以有4个子节点,那么您有1000条记录,那么高度是

最佳情况日志4(1000)=5

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


算术数为m,记录数为n。

这取决于树的算术数。您必须定义此值。如果您说每个节点可以有4个子节点,那么您有1000条记录,那么高度是

最佳情况日志4(1000)=5

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


算术数是m,记录数是n。

我手头没有数学,但是

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

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

但是对于B+树,通常它们的扇出要大得多

需要考虑的一个因素是磁盘上节点的大小

例如,如果页面大小为4K,并且(比如)有4000字节的可用空间(不包括任何其他指针或与节点相关的其他元数据),那么让我们假设指向树中任何其他节点的指针是4字节整数。如果您的B+树实际上存储了4字节的整数,那么组合大小(指针信息的4字节+键信息的4字节)=8字节。4000个可用字节/8个字节==500个可能的子级

这给了你一个500分的扇子来处理这个人为的案子

因此,使用一页索引,即根节点,或树的高度为1,您可以引用500条记录。添加另一个级别,您的级别为500*500,因此对于5014K页面,您可以引用250000行

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


但希望你能明白这一切的要点。

我手头没有数学知识,但是

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

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

但是对于B+树,通常它们的扇出要大得多

需要考虑的一个因素是磁盘上节点的大小

例如,如果页面大小为4K,并且(比如)有4000字节的可用空间(不包括任何其他指针或与节点相关的其他元数据),那么让我们假设指向树中任何其他节点的指针是4字节整数。如果您的B+树实际上存储了4字节的整数,那么组合大小(指针信息的4字节+键信息的4字节)=8字节。4000个可用字节/8个字节==500个可能的子级

这给了你一个500分的扇子来处理这个人为的案子

因此,使用一页索引,即根节点,或树的高度为1,您可以引用500条记录。添加另一个级别,您的级别为500*500,因此对于5014K页面,您可以引用250000行

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


但希望您能了解这一切是如何运作的。最好和最坏的情况取决于每个节点可以拥有的子节点的数量。对于最好的情况,我们考虑的情况下,当每个节点具有最大数目的儿童(即M为M元树),每个节点都具有M-1密钥。所以

第一级(或根)有m-1条目 第二级有m*(m-1)个条目(因为根有m个子项,每个子项有m-1个键) 第三级有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)是每个内部节点(根节点除外)可以具有的最小子节点数) 第三级有2d*(d-1)条目 ... Hth级别有2个*d^(h-2)*(d-1)条目

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


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

最佳和最坏情况取决于每个节点可以拥有的子节点的数量。对于最好的情况,我们考虑的情况下,当每个节点具有最大数目的儿童(即M为M元树),每个节点都具有M-1密钥。所以

第一级(或根)有m-1条目 第二级有m*(m-1)个条目(因为根有m个子项,每个子项有m-1个键) 第三级有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个e