SortedDictionary是红黑树吗?

时间:2013-02-16 11:39:16

标签: c# .net binary-tree sorteddictionary

我在互联网上看到了几个有关此内容的引用,但没有官方文档?谁能告诉我在哪里可以获得有关此信息?

5 个答案:

答案 0 :(得分:25)

这不应该被记录,因为它是实现细节

例如,SortedDictionary有多个实现:有微软,有Mono实现。

事实上,Mono实现在其当前版本(2.10.9)中使用了红黑树。当前的.NET版本也是如此(您可以通过反编译代码来解决这个问题,例如使用 Reflector ildasm.exe MonoDevelop中的内置IL查看器)。

但是,从there are actually more efficient implementations B trees开始,这可能将来会发生变化。

所以,再说一遍:这个信息没用,它是一个实现细节, 会很有可能发生变化。

答案 1 :(得分:7)

这是 MSDN 页面的官方文档;

  

SortedDictionary泛型类是一个二元搜索树,带有O(log   n)检索,其中n是字典中元素的数量


  

SortedDictionery是红黑树吗?

,我对red-black tree并不太熟悉,但我只是用[{3}}(免费)反编译SortedDictionary课程,但是红色-black tree的删除算法和SortedDictionary的Remove()方法的代码看起来并不相似。所以,我的钱是

SortedDictionary始终对其键进行排序。它允许您避免自己对键进行排序。它的查找性能比Dictionary慢。如果在内存中需要排序的查找表,它具有优势。

enter image description here

Dictionary lookup time:       Close to O(1)
SortedDictionary lookup time: O(log n) 

dotPeek 查看更多详情。

答案 2 :(得分:5)

文档确实似乎保证从BST检索O(log n)。如果他们报告“平均”与可能的树相对应,那么即使是非平衡的实现也可以声称。即使它是一个更糟糕的情况保证,这与BST一起还不足以说明它是否实施为红黑树而不采用反编译。它也可以是AVL,展开或其他一些平衡种类。

我掏出了小偷。在4.0.0.0系统程序集上。 OrderedDictionary使用Treeset,它是SortedSet的子类。这似乎可能是一棵红黑树。然而,这并不是类似于Web上的许多示例的典型示例,这些示例在插入或删除之后实现平衡。实现主要是迭代的,并且插入似乎在向下而不是在插入之后修复颜色(自上而下 - 这种方法有几篇论文)。类似的东西与删除有关,但没有时间来验证它。当然不是直接可比的东西。

至少,我的猜测是应该有类似的运行时特性。当它到达插入/删除点时,它没有多少,因为它是在完成的过程中完成的。

答案 3 :(得分:2)

从其MSDN页面:

  

SortedDictionary泛型类是一个带有O(log n)检索的二叉搜索树,其中n是字典中元素的数量

答案 4 :(得分:1)

你可以反编译它(例如使用Reflector)......但是因为这是一个“实现细节”我不会依赖它,它可以随时更改任何更改。

不确定这样的实现细节有多相关,但是如果你真的需要一个RedBlack树那么明确地实现它......其他任何东西都是“技术债务”/“等待发生的灾难”恕我直言。