c# - 如何在 O(1) 或 O(log n) 时间内获取集合中具有最小键的元素?

标签 c# .net data-structures big-o

我知道我可以使用 Dictionary 并在 O(1) 时间内检索任意元素。

我知道我可以获得 SortedDictionary 中的下一个最高(或最低)元素在 O(1) 时间内。但是,如果我想删除 SortedDictionary 中的 first 值(基于 TKeyIComparable)怎么办?

我可以使用 .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/

相关文章:

.net - WPF ComboBox 和 IsTabStop 行为

c# - 为什么不让一切都变成 'virtual' 呢?

c# - 如何在 UWP 应用程序中播放 .mp3(或其他)文件?

c# - 字典与数据库(Mysql)

c# - 如何处理触发事件中重叠的 Console.Writeline()?

.net - 在 IIS 服务器上的 PUT API 调用期间未触发 Application_BeginRequest

java - 链表添加一个元素到列表的末尾

java - 为什么 HashMap 不能是静态的..?

java - 具有 O(logN) 插入的排序数据结构,提供插入点索引

c# - 工厂的正确实现