根据Knuth的定义, B树的阶数m (最大值 每个节点的子节点数)是满足该节点的树 以下属性:
(1)每个节点最多有m个孩子。
(2)每个节点(根除外)至少有⌈m2⌉个孩子。
(3)如果root不是叶节点,则它至少有两个子节点。
(4)具有k个子节点的非叶子节点包含k-1个密钥。
(5)所有叶子出现在同一水平,并携带信息。
来源:Wikipedia
B-Trees的一些可视化看起来像这样:
从这个可视化中,我认为每个节点都有一个数组数据结构(或至少类似的东西)。
其他人看起来像这样:
这看起来像一个类似列表的数据结构。
所以我的问题是:
B树使用哪种数据结构?
我的算法类中的用法示例是数据库和文件系统。有谁知道SQLite如何实现B树节点?还是ext3?或任何其他(众所周知的)现实世界的例子?
答案 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,用于索引数据库。