首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有O(1)查找时间的数据结构,允许重复查找

具有O(1)查找时间的数据结构,允许重复查找
EN

Stack Overflow用户
提问于 2012-11-29 18:13:50
回答 4查看 2.7K关注 0票数 7

我的目标是创建一个实现IList<T>接口的数据结构,通过牺牲内存来实现O(1)元素查找时间。

背景,如您所知,所有基于数组的IList<T>实现(如List<T> )都有O(n)元素查找时间。这意味着像int IndexOf(T element)bool Contains(T element)这样的操作在底层数组中迭代,直到找到匹配的数组。

众所周知的想法是使用列表和哈希表的组合作为底层数据结构。值保存在列表中。哈希表将把索引保持为值,将列表的值保留为键。因此,可以使用哈希表执行查找。

这正是KeyedCollection<TKey, TItem> 见MSDN的实现方式。

到目前为止我尝试过的

代码语言:javascript
复制
internal class MyList<T> : KeyedCollection<T, T>
{
    protected override T GetKeyForItem(T item)
    {
        return item;
    }
}

到目前为止,除了一个问题外,这是可行的。这个数据结构并不完全模仿List<T>所期望的行为。关键是List<T>允许复制,而MyList不允许复制。

问题

是否已经准备好使用数据结构,或者您是否可以推荐一种实现IList<T>的优雅方法,以便:

  1. 查找操作有O(1)时间。
  2. 所有其他操作的O()性能与List<T>相同。
  3. 内存可能会受到哈希表开销(constantA + constantB * n字节)的影响。
  4. 必须允许副本
  5. 允许空是可选的(可以将它们装箱到空对象中)
EN

Stack Overflow用户

发布于 2012-11-29 18:25:15

哈希表应包含每个键的索引列表。我想这就是你所需要的,不是吗?

票数 1
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13632070

复制
相关文章

相似问题

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