我有很多排序整数列表,所有这些整数都少于3600项。我想尽可能地将它们保存在内存中,所以我正在寻找节省空间的数据结构。
最常见的操作是插入,成员资格测试和范围查询。
整数将大多在1到100亿的范围内,但理论上可能存在一些整数将会低得多的极端情况。
我一直在寻找那些相当不错的跳过列表,但我觉得可能会有更高效的结构。
答案 0 :(得分:2)
这实际上取决于访问模式和查找与修改的比例。当查找比修改(在你的情况下,显然是插入)更常见时,这很常见,你实际上可以使用排序数组,这将为你提供最佳的内存效率。
如果插入实际上更常见,排序的数组可能不会这样做,您将不得不求助于更复杂的数据结构。 B树听起来像是一个可能的候选者,因为它们将许多节点打包在一起,因此不会像AVL,跳过列表或红黑树那样遭受链接开销。
我认为研究基数树也同样有趣,特别是如果你的列表中恰好有很多连续的整数,因为这些范围会被基数树“压缩”。
值得注意的是,布隆过滤器可以帮助进一步优化您的会员查询。从某种意义上说,它们是用于成员资格查询的最节省空间的数据结构,但是在概率上,您只能将它们与其他一些确定性数据结构结合使用,除非您被允许返回错误答案:-)。