我知道我可以使用 Dictionary
并在 O(1) 时间内检索任意元素。
我知道我可以获得 SortedDictionary
中的下一个最高(或最低)元素在 O(1) 时间内。但是,如果我想删除 SortedDictionary
中的 first 值(基于 TKey
的 IComparable
)怎么办?
我可以使用 .First()
吗?检索最小 key 的方法?它的复杂性是什么?它会在 O(1)、O(log n) 还是 O(n) 时间内运行?
SortedDictionary
是正确的数据结构吗?
注意:用例有点像穷人的优先级队列或有序队列。不允许为此开放源代码(必须是从头开始编写代码,或者已经在 .NET 3.5 框架中)。
最佳答案
SortedList 和 SortedDictionary 在内部实现为二叉搜索树,理想情况下可以为您提供 Min 的 O(log n) 性能(需要遍历树,但不枚举整个列表)。但是,使用 LINQ 执行该 Min 可能会枚举整个列表。
我会考虑 Skip List作为更好的替代数据结构。
关于c# - 如何在 O(1) 或 O(log n) 时间内获取集合中具有最小键的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6131827/