B-Tree节点使用哪种数据结构?

时间:2012-07-27 08:56:27

标签: sqlite b-tree ext3

  

根据Knuth的定义, B树的阶数m (最大值   每个节点的子节点数)是满足该节点的树   以下属性:

     

(1)每个节点最多有m个孩子。

     

(2)每个节点(根除外)至少有⌈m2⌉个孩子。

     

(3)如果root不是叶节点,则它至少有两个子节点。

     

(4)具有k个子节点的非叶子节点包含k-1个密钥。

     

(5)所有叶子出现在同一水平,并携带信息。

来源:Wikipedia

B-Trees的一些可视化看起来像这样:

enter image description here

从这个可视化中,我认为每个节点都有一个数组数据结构(或至少类似的东西)。

其他人看起来像这样: enter image description here

这看起来像一个类似列表的数据结构。

所以我的问题是:

B树使用哪种数据结构?

我的算法类中的用法示例是数据库和文件系统。有谁知道SQLite如何实现B树节点?还是ext3?或任何其他(众所周知的)现实世界的例子?

1 个答案:

答案 0 :(得分:0)

B-Tree本身就是数据结构(也是索引结构)。 这是一个伪代码示例(没有必要的方法和一些需要的定义,这是一个很好的excersize!):

节点的主体:

class BNode
{
    int keys[];
    BNode children[];

    public BNode() {}

    public BNode() {}

    public int getValue(int key) {}

    public BNode getChildren(int key) {}
}

B树的身体:

class BTree
{
    BNode root;

    BTree()
    {
        root = new BNode(null);
    }

    BNode search(int key) {}

    void insert(int key) {}

    void delete(int key) {}
}

在现实世界中:

PostgreSQL的

Here is the B-Tree implementation,用于索引数据库。