我正在寻找C#中Red-Black Tree的实现,具有以下功能:
T
进行排序。T
,但它会接受字段类型对其进行排序。谢谢。
答案 0 :(得分:12)
你们大多只是描述了SortedDictionary<T, U>
,除了下一个最低/次高价值的二元搜索,你可以自己实现,而不会有太多困难。
是否有SortedDictionary
对您不充分的具体原因?
答案 1 :(得分:2)
从C5集合库中翻录TreeSet。
答案 2 :(得分:0)
这正是PowerCollections中的OrderedDictionary。它与SortedDictionary(带有泛型的红黑树)非常相似,并且能够设置开始键/结束键并扫描该范围内的所有值。
SortedDicionary只允许公开一个GetEnumerator()函数,该函数从集合的开头开始,只允许一个MoveNext()调用,所以即使你使用LINQ也没有什么神奇的事情发生:它从头开始并运行你的表达式按顺序在每个节点上,直到找到与LINQ表达式匹配的那些节点。
OrderedDictionary有一个函数可以在特定键之前或之前获取枚举数,并在O(log n)中执行查找。
值得注意的是:PowerCollections OrderedDictionary中的枚举器是使用“yield”实现的,内存使用和枚举性能至少为O(n ^ 2)...您可以自己更改实现以使其实现一个传统的调查员,这两个问题都消失了。如果我能找到时间,我会将该补丁提交给Codeplex。