Java中Btree或B+tree的现有实现[关闭]

Posted

技术标签:

【中文标题】Java中Btree或B+tree的现有实现[关闭]【英文标题】:Existing implementation of Btree or B+tree in Java [closed] 【发布时间】:2011-02-04 04:52:59 【问题描述】:

我正在做一个需要 btree 或 b+tree 数据结构的项目。有谁知道 btree 或 b+tree 的现有实现(带有插入、删除、搜索算法)?它应该接受字符串作为输入并形成这些字符串的 btree 或 b+tree。

【问题讨论】:

@rohit:我已经对您的问题进行了一些编辑,以使其成为“关闭而不是真正的问题”的不太明显的候选者。如果您不喜欢我的更改,请随时恢复它们。 您能否详细说明您将使用该数据结构的目的是什么? 【参考方案1】:

由于缺乏您需要解决的问题的详细信息,我将允许自己提出一个可能解决您的问题的替代解决方案:改用红/黑树。

可以将红/黑树视为 b 树,如 Wikipedia 中所述:

红黑树在结构上类似于 4 阶 B 树,其中每个节点可以包含 1 到 3 个值和(相应地)2 到 4 个子指针。在这样的 B 树中,每个节点将只包含一个与红黑树的黑色节点中的值匹配的值,在同一节点中它之前和/或之后有一个可选值,两者都匹配红黑树的一个等价的红色节点。红黑树 [...]

Java 有两个内置类TreeMap 和TreeSet,提供红/黑树。这些都不会将字符串作为输入并从中生成一棵树,但您也许可以“围绕”其中一个类实现类似的东西。

【讨论】:

【参考方案2】:

我必须自己实现并开源code。

【讨论】:

尚未对其进行测试,但拆分方法是我在每次插入和删除时都在寻找的方法。只有 2 个元素,这几乎会一直发生。问题:你会洗牌***元素吗?假设您有 1 -5000 的数据(为了发表此评论而为 5000),并且您的第一个元素为 300,将其设置为接近 2500 是否有意义? 顺便说一句.. +1 为您的答案。 @TejaswiRana 我已经用 5000 个元素 (1-5000) 进行了测试,根最终得到了 2048 的值。默认实现是 2-3 树,但这只是为了测试目的。可以在构造函数中传入树的顺序(minKeySize)。【参考方案3】:

你可以试试 Electric 的 BTree (author page here)。

【讨论】:

【参考方案4】:

jdbm 有一个非常可靠的 b+tree 实现。还有h+tree,这是一个有趣的相关数据结构。

【讨论】:

从那以后出现了JDBM3和JDBM4 which was renamed to MapDB。 @PeterLamberg 是的 - MapDB 正在成为一个非常好的项目。距离第一个稳定版本还有几周的时间,但它看起来非常好。请注意,MapDB 没有使用 b+tree b/c 的并发要求——我相信他们使用的是某种链接树。 这是我的基于磁盘的 B+-tree 实现。 github.com/myui/btree4j

以上是关于Java中Btree或B+tree的现有实现[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

BTree和B+Tree详解

MySQL与Btree

Mysql(11)—BTREE索引的数据结构以及具体实现原理深入解析

MySQL——B+ Tree 原理

MySQL——B+ Tree 原理

BTree vs B+Tree 节点操作流程图解