【问题标题】:balanced tree-like data structure that resizes to prime sizes平衡的树状数据结构,可调整为素数大小
【发布时间】:2011-06-06 01:32:10
【问题描述】:

与此相关:stack overflow question,

我发现 .Net 字典调整到下一个素数大小至少是当前大小的两倍,我想知道是否有任何平衡的树状数据结构可以调整到素数大小(类似于 B-可能是树或二叉树)。

.Net 字典背后的树状数据结构是什么?

谢谢。

【问题讨论】:

    标签: .net algorithm dictionary hash tree


    【解决方案1】:

    Dictionary 使用hash table 算法,将数据存储在一个数组中,该数组根据质数调整/重新调整大小。

    .NET SortedDictionary 使用 Red-Black tree 结构来维护键/值对。由于红黑树不是存储在固定数组中,而是作为具有左/右子节点的节点上的序列,因此实际上没有任何调整大小的概念,因为节点被添加到树中,树被旋转到保持平衡。

    【讨论】:

    • Dictionary != SortedDictionary。我怀疑SortedDictionary 调整为素数。
    • @marcog,我不相信我说过这些话?我说 Dictionary 使用 Hashtable,Sorted 字典使用 Red-Black 树,并且树 not 存储在数组中,并且存在 not 调整大小的概念。
    • 不为你不使用的节点分配内存是明智之举......这是真的
    • 不是现在你编辑了你的答案。请不要躲在编辑后面。
    • @marcog,我向你保证我不是那么幼稚,我只编辑了答案以在哈希表和链接上添加信息。我相信你错过了最初的答案。
    【解决方案2】:

    .Net 的字典是作为 hastables 实现的,它根本不是树状数据结构。问题you link to 解释了为什么哈希表最好调整为素数。

    至于树状结构,我无法想象将大小调整为素数的目的。这没有多大意义。不过,真正有意义的是,将平衡树结构调整为完整树的大小,对于二叉树来说,它是 2n-1。

    【讨论】:

    • 因为你最终可能不得不调整到巨大的数字并且保持额外的节点内存效率低,而保持树不平衡会导致非线性搜索时间,甚至更糟
    • C++ 的 std::map 也是作为 hastabled 实现的,但为了快速搜索、添加和删除目的而保存在红黑树中
    • @costy 调整大小可能有意义,但选择素数大小没有任何优势。 std::map 实现为红黑树,而不是哈希表。
    • @marcog,std::map 通常被实现为红黑树而不是 AVL 树。
    • 我在网上看到了这个 L9 讲座,其中一个为 VS2010 维护 STL 的人说 std::map 是用红黑树实现的,他还谈到了另一个使用std::map 的红黑树,但我忘了是哪一个
    猜你喜欢
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多