首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以设计一个比.NET字典更一致的性能数据结构吗?

可以设计一个比.NET字典更一致的性能数据结构吗?
EN

Stack Overflow用户
提问于 2012-03-15 07:36:04
回答 1查看 206关注 0票数 1

.NET Dictionary<TKey,TValue>的内部结构和流程是一个高度优化的设计,西蒙库珀在这个出色的博客帖子中进行了讨论。

MSDN声明Add(TKey,TValue)是O(1) --除非字典的元素计数是容量的,这就需要首先执行动态调整大小的操作,从而在这些连接处进行Add() O(n)。

随着字典的增长,调整操作的次数越来越少,因此可以说,在大n上平均,Add()接近O(1)。

库珀在这个图中证明了这一点,即n/2添加操作的总运行时间是n的函数。

但是,Add()的平均最差性能是O(n)。

我的问题是:是否有可能设计一个比.NET字典更一致的性能数据结构?

具体来说,我希望添加、删除、检索操作的平均最差性能为O(1)。

注意,性能的一致性(“大O”)是唯一相关的设计标准。内存利用率和绝对性能(包括集群和缓存性能的程度)不是相关的设计标准。

选择一个比预期需求大得多的初始容量是一种选择,但这是一个初始化步骤,我正在寻找一个数据结构设计。

EN

回答 1

Stack Overflow用户

发布于 2012-03-15 07:59:01

你是否只是试着创建一本大到足够大的字典?

泛型O(1)基本上是一个数组。通过索引访问。或者分层数组(4字节键,数组指向指向数组的数组,以节省空间)。

不管怎么说-不,对不起。

很多高性能的东西使用预先分配的数组。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9715579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档