C#标准库中的B树类?

C#标准库中的B树类?,c#,tree,C#,Tree,C#(.NET或Mono)基类库中的哪个类直接实现B树,或者可以快速重写/继承以实现B树?我看到了类,但似乎无法从树中找到任何类 必须有一个基树类,它可以被重写以生成特定的树实现(如B树、红黑树或二叉树等,通过指定树不变条件)。让程序员重新设计基本数据结构(树在CompSci中非常基本)是没有意义的,尤其是在面向对象的语言中;所以我很确定我只是没找对 编辑: 我没有使用哈希表,也不认为它与树有关。我只是将其用作“BCL中的另一个数据结构类”的示例 对于那些好奇用例背景的人。它用于O(log(N)

C#(.NET或Mono)基类库中的哪个类直接实现B树,或者可以快速重写/继承以实现B树?我看到了类,但似乎无法从
树中找到任何类

必须有一个基树类,它可以被重写以生成特定的树实现(如B树、红黑树或二叉树等,通过指定树不变条件)。让程序员重新设计基本数据结构(树在CompSci中非常基本)是没有意义的,尤其是在面向对象的语言中;所以我很确定我只是没找对

编辑:

  • 我没有使用哈希表,也不认为它与树有关。我只是将其用作“BCL中的另一个数据结构类”的示例
  • 对于那些好奇用例背景的人。它用于O(log(N))搜索内存中的关联集。想象一下为该关联集创建索引
  • NET中没有B树的(公共)实现

    没有公开提供基于树结构的部分实现的泛型树类


    您需要从头开始编写类似的内容,或者使用第三方实现而不是.NET实现。

    不幸的是.NET没有为树提供任何库

    但是你可以在线获得一些关于B树的帮助

    (一)


    2) 我知道我来晚了,但我在BPlusTree上取得了巨大成功。作者们用它做了一件了不起的工作

    有一个很有希望的实现。也是

    代码使用StoreAPI来存储和管理数据的键/值对。 内部存储实施使用增强的现代化B树实施,虚拟化RAM和磁盘存储

    与传统B-树相比,此B-树有几个关键增强

    具体实施包括:

    • 节点负载优化将其保持在75%-98%的全平均负载 内部和叶节点的。传统的B-树只能实现大约 半满(50%)平均负载。这将转换为更为压缩或更高的级别 更密集的数据存储使IT部门免于昂贵的存储硬件
    • 在特定情况下,叶节点的高度允许不完全平衡,以利于以零/最小成本删除 交换。此外,由于删除导致的高度差异也会变得更大 由于节点负载优化功能,在插入过程中修复 上面讨论过
    • 等等。。。在时间允许的情况下,还有更多的增强功能有待记录/引用

    您可能想看看我在GitHub中对B和B+树的通用C#实现


    哈希表
    不使用基于树的结构。它使用哈希表。您也不应该在遗留代码之外使用它;您应该使用通用的
    词典
    SortedDictionary
    ,不同于
    字典
    ,它在内部使用基于树的结构,就像
    SortedSet
    一样,尽管它们都没有在外部公开所述的树结构。更深层的问题是,您需要这样一个特定的集合做什么?系统集合具有足够的通用性和足够的效率,可用于大多数目的(特别是在抛出不可变集合的情况下)。如果您的需求非常具体,以至于这些集合不够,那么您最好从书籍或论文中实现一个。树只是教育中的基础,在现代处理器上它们的性能太差,不值得考虑@我不会这么说;它确实取决于上下文。看看,比如说
    表达式
    ,以及最近用它所做的一切。表情都是树。数据库也(至少就我所知)依赖于树(非常有趣的是,特别是B-树)来处理索引,因为它们都是高效的,并且非常适合部分存储在内存中,部分存储在磁盘上,当内存中的数据过多时,这是关键。虽然我同意它们的使用趋向于相当专业化,但它们不仅仅是学术性的。@Hans Passant:SQL Server数据库非常有效地使用B*-树。B-树不是二叉树。这是一个N元搜索树。你说得对。我看错了。我已经用其他有用的链接更新了答案。不幸的是,这个链接已不再被维护,而且这个链接似乎也没有完全起作用。