加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 08:04:35 所属栏目:百科 来源:网络整理
导读:我知道我可以使用Dictionary并在O(1)时间内检索任意元素. 我知道我可以在O(1)时间内获得 SortedDictionary 中的下一个最高(或最低)元素.但是如果我想在SortedDictionary中删除第一个值(基于TKey的IComparable)呢? 我可以使用 .First() 方法检索最小的密钥吗
我知道我可以使用Dictionary并在O(1)时间内检索任意元素.

我知道我可以在O(1)时间内获得SortedDictionary中的下一个最高(或最低)元素.但是如果我想在SortedDictionary中删除第一个值(基于TKey的IComparable)呢?

我可以使用.First()方法检索最小的密钥吗?它的复杂性是什么?它会在O(1),O(log n)还是O(n)时间内运行?

SortedDictionary是否是正确的数据结构?

注意:用例是穷人的优先级队列或有序队列.这不允许使用开源(必须是从头开始的代码,或者已经在.NET 3.5框架中).

解决方法

SortedList和SortedDictionary在内部实现为二叉搜索树,理想情况下可以为Min提供O(log n)性能(需要遍历树,但不能枚举整个列表).但是,使用LINQ执行Min可能会枚举整个列表.

我认为Skip List是更好的替代数据结构.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读