我有一个信息检索应用程序,它创建了10万位数量级的位数组。阵列中“置位”位的数量差别很大,从所有清除到所有设置。目前,我正在使用一个简单的位阵列(java.util.BitSet
),因此我的每个位阵列都需要几兆字节。什么是位阵列的一些替代方案?
我的计划是看第一个位的基数,然后决定剩下的数据结构。显然有些数据结构对于非常稀疏的位数组更好,而另外一些数据结构对大约一半的位进行设置(当设置了大多数位时,我可以使用否定将其视为稀疏零集)。
- 什么结构可能在每个极端都很好?
- 中间有没有?
这里有一些约束或提示:
- 的位被设置为仅一次,并在索引顺序。
- 我需要100%的准确性,所以像布卢姆过滤器的东西不够好。
- 集合建立后,我需要能够有效地迭代“set”位。
- 这些位是随机分布的,所以运行长度为–的编码算法不可能比简单的位索引列表好得多。
- 我试图优化内存利用率,但速度仍然带有一些的重量。
对开源Java实现有帮助,但并非绝对必要。我对基本面更感兴趣。
美丽的解决方案。它可能甚至会很快,因为今天的内存负载如此昂贵。 – 2008-10-05 15:16:15