【发布时间】:2014-02-07 21:33:16
【问题描述】:
我有一组 1,000,000 个唯一数字。这些数字在 0 到 50,000,000 之间。考虑一下,数字是随机的。我需要一个可以容纳所有这些的数据结构。数据结构应该需要尽可能少的内存。应该可以快速找到数字是否在集合中并且没有错误。
我找到了布隆过滤器的解决方案。是的,布隆过滤器有误报的可能性,但由于“只有”50,000,000 个可能的数字,我可以找到所有错误并将它们保存在 std::set 中。通过这种方法,我可以将所有数字存储在 2.3MB 的内存中。
你能找到更好的方法吗?
【问题讨论】:
-
从技术上讲,普通位向量占用更多空间,但它仍然只有 6 MiB,而且所有操作都很快,甚至可能比布隆过滤器更快。它也更容易实现(我敢说微不足道)。
-
在我的情况下,空间比速度更重要
-
std::set 应该具有显着的每个条目开销(整个节点加上每个 int 的分配器元数据);一个普通的排序数组或其他节省空间的数据结构应该节省一些空间。
标签: data-structures compression bloom-filter