【发布时间】:2010-09-07 08:35:48
【问题描述】:
我有一个信息检索应用程序,它可以创建大约 10 万位的位数组。数组中“设置”位的数量变化很大,从全部清除到全部设置。目前,我使用的是直截了当的位数组 (java.util.BitSet),所以我的每个位数组都需要几兆字节。
我的计划是查看前 N 位的基数,然后决定其余部分使用什么数据结构。显然,一些数据结构更适合非常稀疏的位数组,而另一些数据结构在设置了大约一半的位时更好(当设置了大多数位时,我可以使用否定将其视为稀疏的零集)。
- 哪些结构在每个极端情况下都可能是好的?
- 中间有吗?
这里有一些限制或提示:
- 这些位仅设置一次,并按索引顺序。
- 我需要 100% 的准确度,所以像布隆过滤器这样的东西还不够好。
- 构建集合后,我需要能够高效地迭代“集合”位。
- 位是随机分布的,因此游程编码算法可能不会比位索引的简单列表好多少。
- 我正在尝试优化内存利用率,但速度仍然有一些的分量。
具有开源 Java 实现的东西是有帮助的,但不是绝对必要的。我对基础知识更感兴趣。
【问题讨论】:
标签: data-structures information-retrieval