可以存储在128级和3级B树中的最大和最小键数是多少?
最大限度,这就是我的所作所为: 您有一个根节点。根节点可以拥有的最大子节点是m(顺序),因此是128.并且这128个子节点中的每一个都有128个子节点,因此总共有1 + 128 + 16384 = 16512个节点。根据维基百科,n个节点的B树可以存储n-1个密钥,因此最多可以留下16511个密钥。
分钟: 你有一个单独的根节点,它可以拥有的最小子节点数是2,这两个孩子可以拥有的最小子节数是m / 2,其中m是顺序,每个64个孩子。这给我们留下了1 + 2 + 64 + 64 = 131个孩子和131-1 = 130个键。
我在这里所做的是正确的吗?
答案 0 :(得分:5)
根据维基百科,如果节点有n个子节点,则该节点最多可以有n-1个密钥。 因此,
root [127keys]
128 childnodes [each having 127 keys]
128*128 childnodes [each having 127 keys]
127+128*127+128*128*127 = total no of maximum allowed keys
答案 1 :(得分:4)
节点可以包含的键数有下限和上限。这些界限用固定整数t> = 2表示,称为B树的最小程度。
除root之外的每个节点必须至少有t-1个密钥。 除根之外的每个内部节点至少有t个子节点。 如果树是非空的,则根必须至少有一个密钥。
每个节点最多可包含2t - 1个密钥。 因此,内部节点最多可以有2个子节点。 我们说如果节点包含正好2t - 1个键,则节点已满。
高度最大键3 =(2t-1)+(2t-1)* 2t +(2t-1)* 2t * 2t
高度密钥最小3 =(t-1)+(t-1)* t +(t-1)* t * t
答案 2 :(得分:0)
这实际上取决于您如何定义订单。根据Knuth的说法,b树的顺序是最大子节点数,这意味着最大答案是129.如果顺序的定义是非根节点的最小键数,那么答案为最大值未知。
使用this定义,您的最小值计算是正确的,但最大值不是,因为每个节点(包括叶子)都包含m-1个键。这也与Cormen中B-Tree的定义一致。如果n是16512,并且每个n存储127个密钥,答案绝对不是16511.
答案 3 :(得分:0)
这里是C#代码,用于在给定数量的级别和节点可以拥有的最大子代数量的情况下,为任何B-Tree计算最大的密钥数量。
/// <summary>
/// Given number of levels in the tree, computes the maximum number of keys the tree can hold.
/// </summary>
/// <param name="levelCount">Is the number of levels in the tree. </param>
/// <param name="MaxBranchingDegree ">Is the maximum number of children a node in the tree can have. </param>
/// <returns>Maximum number of keys a tree with <paramref name="levelCount"> levels can hold. </returns>
public int ComputeMaxKeyCount(int levelCount, int MaxBranchingDegree )
{
int maxKeys = 0;
for (int l = 0; l < levelCount; l++)
{
maxKeys += (MaxBranchingDegree - 1) * (int)Math.Pow(MaxBranchingDegree, l);
}
return maxKeys;
}