【问题标题】:Storing a pair key-value in a B-Tree在 B 树中存储一对键值
【发布时间】:2014-07-13 17:30:11
【问题描述】:

我正在使用 B-Tree,但我无法理解它是如何工作的。

寻找一些例子,我找到了这个page,它解释了如何为这个结构编写代码。

问题是:

class BTreeNode {
    private
        int *keys;  // An array of keys
        int t;      // Minimum degree (defines the range for number of keys)
        BTreeNode **C; // An array of child pointers
        int n;     // Current number of keys
        bool leaf; // Is true when node is leaf. Otherwise false
    public:
        BTreeNode(int _t, bool _leaf);   // Constructor

    friend class BTree;
};

如果是我的树的节点,它存储了某个范围内的所有键,我可以在哪个部分找到我的数据? 假设我要存储一个字符串,如何获取该字符串?

我想得到类似的东西:

BTree.insert(1,'hello');
BTree.insert(2,' ');
BTree.insert(3,'world');
BTree.insert(4,'!');

然后,当我想通过其关联 ID 获取一些数据时...

BTree.getById(4);

但是,我该如何声明我的节点结构呢?

谢谢!

【问题讨论】:

  • 什么是 B 树?也许你可以扩大B?二叉树?如果是二进制,则每个节点不能有超过 2 个子节点。
  • @armanali B 树是每个节点有零个或多个子节点的树。二叉树也是一样的,每个节点的最高限制是不超过两个孩子。 B-树通常使用每个节点的一页键,子键表示子键“小于”第一个键(左模式子),“介于”每对键(内部子级)和“大于” " 比最后一个键(最右边的孩子)。因此,具有 N 个键的页面的节点可以/将有 N+1 个子节点。二叉树是一个 B 树,每个节点有一个 单个 键(一页),因此可能有“较小”或“较大”的子节点。
  • @TomiSebastiánJuárez 您可以在闲暇时解释我在该评论中所说的任何内容不是正确的。 wiki 上的描述和图形,如果有的话,确认我所说的一切。 b 树的特定顺序的细节留给实现者,但一般算法和设计保持不变。

标签: c++ treenode b-tree abstract-data-type


【解决方案1】:

好的,有两件事。

首先,请记住在引用字符串时使用双引号"。单引号指的是单个字符,你会得到错误。

其次,您链接的代码用于存储整数。是的,您可以扩展它以存储您自己的类型,但我建议您先尝试了解它对整数的作用。

一旦您理解了这一点,请将类扩展为模板,或者直接将 keytype(当前为 int)声明为键值对。

【讨论】:

    猜你喜欢
    • 2021-12-19
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    相关资源
    最近更新 更多