Data structures B树中的最大和最小键数

Data structures B树中的最大和最小键数,data-structures,tree,b-tree,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为顺序,因

顺序为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个键


我在这里所做的正确吗?

这实际上取决于您如何定义订单。根据Knuth的说法,b-树的顺序是最大的子数,这意味着最大的答案是129。如果order的定义是非根节点的最小键数,那么max的答案是未知的


使用定义,最小值的计算是正确的,但最大值的计算是错误的,因为每个节点(包括叶子)都包含m-1键。这也与Cormen中B-树的定义一致。如果n是16512,每个n存储127个键,那么答案肯定不是16511

根据维基百科,如果一个节点有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

节点可以包含的关键点数量有上下限。这些边界用称为B-树最小度的固定整数t>=2表示

  • 除根节点外的每个节点必须至少具有t-1密钥。 除根节点外的每个内部节点至少有t个子节点。 如果树是非空的,则根必须至少有一个键

  • 每个节点最多可以包含2t-1个键。 因此,内部节点最多可以有2t个子节点。 如果一个节点正好包含2t-1密钥,我们就说它已满

高度3的最大键数=(2t-1)+(2t-1)*2t+(2t-1)*2t*2t
高度3的最小键数=(t-1)+(t-1)*t+(t-1)*t*t

以下是C代码,用于计算给定级别数和节点可以拥有的最大子节点数的任意B树的最大键数

        /// <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;
        }
//
///给定树中的级别数,计算树可以容纳的最大键数。
/// 
///是树中的级别数。
///是树中节点可以拥有的最大子节点数。
///具有级别的树可以容纳的最大键数。
public int-ComputeMaxKeyCount(int-levelCount,int-MaxBranchingDegree)
{
int maxKeys=0;
对于(int l=0;l
这不是一棵只有2米高的树吗?我将高度为0的树视为一个节点(根)。这是完全错误的计算,并且接受的答案也指向错误的方向。问题是关于键的最小和最大数量,但您正在计算B树的节点数,然后计算可以存储在具有x个子节点的节点中的键的最小/最大数量。这难道不可能用h=高度和t=B树的度表示为公式: