【发布时间】:2011-06-06 01:32:10
【问题描述】:
与此相关:stack overflow question,
我发现 .Net 字典调整到下一个素数大小至少是当前大小的两倍,我想知道是否有任何平衡的树状数据结构可以调整到素数大小(类似于 B-可能是树或二叉树)。
.Net 字典背后的树状数据结构是什么?
谢谢。
【问题讨论】:
标签: .net algorithm dictionary hash tree
与此相关:stack overflow question,
我发现 .Net 字典调整到下一个素数大小至少是当前大小的两倍,我想知道是否有任何平衡的树状数据结构可以调整到素数大小(类似于 B-可能是树或二叉树)。
.Net 字典背后的树状数据结构是什么?
谢谢。
【问题讨论】:
标签: .net algorithm dictionary hash tree
Dictionary 使用hash table 算法,将数据存储在一个数组中,该数组根据质数调整/重新调整大小。
.NET SortedDictionary 使用 Red-Black tree 结构来维护键/值对。由于红黑树不是存储在固定数组中,而是作为具有左/右子节点的节点上的序列,因此实际上没有任何调整大小的概念,因为节点被添加到树中,树被旋转到保持平衡。
【讨论】:
Dictionary != SortedDictionary。我怀疑SortedDictionary 调整为素数。
.Net 的字典是作为 hastables 实现的,它根本不是树状数据结构。问题you link to 解释了为什么哈希表最好调整为素数。
至于树状结构,我无法想象将大小调整为素数的目的。这没有多大意义。不过,真正有意义的是,将平衡树结构调整为完整树的大小,对于二叉树来说,它是 2n-1。
【讨论】:
std::map 实现为红黑树,而不是哈希表。