如何构建/获取具有以下功能的数据结构:
使用来自任意键的枚举器的解决方案当然也足够了。请注意,标准的SortedDictionary功能是不够的,因为只能返回整个集合上的枚举器,这使得查找keyVal.next时最不需要N次操作。
自我实现的平衡二叉搜索树(红黑树)是否可以安装node.next()功能?这样做有什么好的参考?任何编码时间较少的解决方案?
答案 0 :(得分:0)
我曾经有类似的要求,但找不到合适的东西。所以我实现了一个AVL树。这里提出了一些建议来考虑性能:
通过遵循这些规则,我能够实现AVL树。即使对于非常大的数据集,它也非常有效。我愿意分享,但它需要一些修改,因为它不存储值(非常容易)并且不依赖于IComparable但是依赖于固定键类型的int。
答案 1 :(得分:0)
PowerCollections中的OrderedDictionary提供了“从密钥开始或在密钥开始之前获取迭代器”功能,该功能需要O(log N)时间来返回第一个值。这样就可以非常快速地扫描5000个项目集中间的1,000个项目(使用SortedDictionary需要猜测从开始或结束开始,这两个项目都是同样糟糕的选择,并且需要迭代器约2500万件)。 OrderedDictionary可以只迭代1,000个项目。
OrderedDictionary中存在一个问题,因为它在使用32位进程迭代5000万个项目集时使用yield会导致O(n ^ 2)性能和内存不足情况。有一个非常简单的解决方法,我稍后会记录。