B树中的最大和最小键数

时间:2011-04-05 19:42:40

标签: data-structures tree b-tree

可以存储在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个键。

我在这里所做的是正确的吗?

4 个答案:

答案 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;
        }