我知道我可以使用Dictionary
并在O(1)时间中检索任意元素。
我知道我可以在O(1)时间中获得 SortedDictionary
中的下一个最高(或最低)元素。但是,如果我想在TKey
中删除的第一个值(基于IComparable
的SortedDictionary
)怎么办?
我可以使用 .First()
方法来检索最小的 key 吗?它的复杂性是什么?它会在O(1),O(log n)或O(n)的时间运行吗?SortedDictionary
是否为此正确的数据结构?
注意:用例是穷人的优先队列或有序队列。不允许使用开放源代码(必须是从头开始的代码,或者已经在.NET 3.5框架中)。
最佳答案
SortedList和SortedDictionary在内部以二进制搜索树的形式实现,理想情况下可以为Min提供O(log n)性能(需要遍历树,但不枚举整个列表)。但是,使用LINQ执行该Min可能会枚举整个列表。
我认为Skip List是更好的替代数据结构。