algorithm - 用于维护已排序的 <5k 整数列表的内存效率最高的数据结构是什么?

标签 algorithm list sorting data-structures tree

我有很多排序整数列表,每个列表都少于 3600 个项目。我想尽可能多地将它们保存在内存中,因此我正在寻找一种节省空间的数据结构。

最常见的操作是插入、成员资格测试和范围查询。

整数将主要在 1 到 100 亿的范围内,尽管理论上可能存在一些整数会低得多的极端情况。

我一直在研究跳过列表,它非常好,但我觉得那里可能有更高效的结构。

最佳答案

这实际上取决于访问模式和查找相对于修改的比例。当查找比修改(在您的情况下,显然是插入)更常见时,这很常见,您实际上可以摆脱排序数组,这将为您提供最佳的内存效率。

如果插入实际上更常见,那么排序数组可能就不行了,您将不得不求助于更复杂的数据结构。 B 树听起来像是一个可能的候选者,因为它们将许多节点打包在一起,因此不会像 AVL、跳过列表或红黑树那样受到链接开销的影响。

我认为研究基数树同样会很有趣,特别是如果您的列表中恰好有很多连续的整数,因为这样的范围会被基数树“压缩”。

值得注意的是,布隆过滤器可以帮助进一步优化您的成员(member)查询。在某种程度上,它们是成员资格查询最节省空间的数据结构,但由于是概率性的,您只能将它们与其他一些确定性数据结构结合使用,除非您当然可以返回不正确的答案 :-)。

关于algorithm - 用于维护已排序的 <5k 整数列表的内存效率最高的数据结构是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18272857/

相关文章:

python - 按键对字典进行排序,然后对与每个键相关的值列表进行排序并输出到 CSV 文件?

mysql - angularJS过滤器 "orderBy"无法对3位以上的数字进行排序

algorithm - 维恩图绘制算法

sql-server - 在位置索引中查找二元组

python - 如何使用列表理解从列表中返回元组和计数

c - 在 C 中使用 typedef 时是否使用指向结构的指针

algorithm - 在有根树中查找一定距离内的节点数

arrays - 是否可以反转具有恒定额外空间的数组?

Python Pandas - 通过列表删除多列

Scala 按未知数量的字段排序