【问题标题】:What is the structure of a node for this B-Tree specification?这个 B-Tree 规范的节点结构是什么?
【发布时间】:2016-01-24 07:11:18
【问题描述】:

我正在尝试创建具有以下属性的 B 树:

每个节点 x 都包含以下属性:

  1. x.n 是节点 x 中存在的键的数量
  2. x.key1,x.key2,.....x.keyx.n 是节点中存在的键
  3. x.c1,x.c2,..........x.cx.n,x.cx.n+1 是指向子节点的指针
  4. x.leaf 是一个布尔变量,显示节点是否为叶节点

基于此规范,我将如何实现节点的结构:

struct  Node{
    ...?
}          

【问题讨论】:

    标签: structure nodes b-tree


    【解决方案1】:

    绘制时的概念结构是这样的。

            a      b      c      d
          /     |      |      |     \
         la     bab    bbc    bcd   gd
    
         la  = less than a
         bab = between a and b
         bbc = between b and c
         bcd = between c and d
         gd  = greater than d
    

    指针多于元素的地方。

    所以 N 阶的 b-tree 最多有 N 个孩子。所以使用BTREE_ORDER作为这个值,并确保BTREE_ORDER大于1。

    结构最有效地完成

    struct Node{
        size_t numNodes;
        KEY_TYPE Key[BTREE_ORDER -1];
        struct Node * Children[BTREE_ORDER];
    }
    

    所以它有空间用于BTREE_ORDER-1 键和BTREE_ORDER 子节点。排列由代码决定,并且是

    Children[0] Key[0] Children[1] Key[1] .... Key[numNodes - 2] Children[ numNodes - 1]
    

    【讨论】:

    • 假设 b-tree 的阶数为 t=2。它在特定节点中最多可以包含 2t-1(这里是 2*2 -1=3)个键。但是我们假设最大数组长度是 Key[BTREE_ORDER],这里是 2。 .有没有其他方法可以做同样的事情,或者我们可以假设数组长度是最大值,即。 2t-1
    • 抱歉,我的订单弄错了 - 使用 BTREE_ORDER-1 和 BTREE_ORDER
    猜你喜欢
    • 2015-10-19
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多