O(1)随机插入/删除和O(1)随机访问的数据结构是什么?

我不知道用于此问题的数据结构。 我希望结构具有:

  • 恒定时间插入或删除。
  • 通过id进行恒定时间检索。

实际系统是:

我有一堆对象,每个对象都有一个唯一的id。 我的程序需要接收id的请求并返回相关对象。

每当它收到我想要的请求时:搜索结构以查看它是否在那里。 如果是,请退货。 如果不是,请将其从磁盘加载到内存中(将其放入结构中,以便下次请求时不必使用磁盘)然后将其返回。

我正在使用C.

这是一个类似的问题,但我不确定它有多相关。

在你的情况下, 哈希表可能是一个非常好的解决方案 – 即使它存在切割时它不在O(1)中:它是一个非常有效的解决方案。

唯一适合它的结构是…… C数组。 SomeObject arr[MAX_NUM_OBJECTS]以快速有效的方式处理这个问题

为什么不把它们全部放在一个文件中,mmap文件,让操作系统处理缓存?

取决于数据和密钥的数量。 散列表适用于难以比较的大量数据(字符串,复杂数据结构等)。 对于具有整数键的较小数据集,通常可以使用简单的红黑树获得更好的性能。 这是因为好的散列函数需要时间来执行。

实际上,这些都不符合你的要求。 O(1)访问只能在完美的哈希(并且没有哈希是完美的)和数组中真正实现。 同时O(1)插入只能在队列,出队,堆栈,链表和完美哈希中进行(同样,没有哈希是完美的)。

为了给你一个更好的答案,我们真的需要知道你想要完成什么。 有关您使用数据结构的更多信息会有所帮助