首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >B-Tree中有没有批量加载的算法?

B-Tree中有没有批量加载的算法?
EN

Stack Overflow用户
提问于 2013-04-14 14:16:04
回答 1查看 2.7K关注 0票数 7

我知道b+tree中有批量加载。我只想知道在B-Tree中有没有批量加载的算法。例如,给定一个数据数组,创建B-Tree的最佳方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-14 15:04:37

实际上答案是肯定的。

B+树和普通B树之间的主要区别是,前者的值实际上存储在叶子中,而在后者中,您将在每个节点中找到值。因此,B+树允许您以几乎连续的方式存储数据,每个叶包含整个排序数据的一个连续切片。对于B树则不是这样:内部节点将包含多个元素,但它们不是连续的wrt。整个排序后的数据集。

此属性对于批量加载是必不可少的:该过程通过将已排序的数据集切割成将形成B+树的叶子的数组来对其进行操作。因此,对于B-树来说,它看起来不能工作。

如果我们能以将内部节点元素组合在一起的方式对数据进行排序,那么问题就解决了。为了做到这一点,必须事先知道元素将如何分组。事实证明,这是可能的。

让我们调用o (order)节点中的子节点的最小数量(这与B树顺序的原始定义一致)。我们认为根节点位于树的最高阶段,而叶子位于最低阶段(阶段0)。对于一棵平衡良好的树,所有的叶子确实会处于同一阶段。

树的级k对由级k-1中的至少o个元素隔开的元素进行分组。在初始排序之后,我们必须从已排序的数组(构成阶段0 )中提取元素,并将它们分组到不同的数组中以构建阶段1,然后对该数组再次执行此操作,以用于阶段2的新数组,并重复此过程,直到最新的数组中的元素少于o个,该数组将成为根阶段。从那时起,可以直接从stage集构建树:

  • 将每个阶段拆分为o元素数组,
  • 构建索引数组以将节点链接到子节点
  • 将每个节点构建为一对相应的索引数组*值数组

生成的树不一定是平衡的。这取决于数据集中的条目数和o。不过,应该可以调整构建阶段时使用的间隔,以获得更好的分布式树。

总而言之,批量加载B-tree所需的工作比B+-tree更繁琐,但这是可能的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15996319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档