【发布时间】:2017-05-07 21:59:52
【问题描述】:
我曾尝试使用布隆过滤器来执行成员资格测试。我希望对 800 亿个条目执行成员资格测试,只允许发生大约 100 次冲突,即,只有 100 个条目可以给出误报结果。
我知道这可以通过布隆过滤器来实现,但使用公式来确定每个条目所需的位数和给定允许的误报率的哈希函数数。我想我最终会使用 270 GB 的内存和 19 个哈希函数。
我还查看了 Cuckoo 过滤器,但它的内存要求不符合我的要求。我的要求如下:
- 每个元素最多使用 6 位
- 使用不超过 7-8 个哈希函数。
有人可以向我推荐一种概率数据结构,而不是上面提到的,这可以帮助实现我的要求吗?
【问题讨论】:
-
您似乎不太可能找到任何数据结构,可以让您区分 800 亿个项目,误报率为 0.00000000125,仅使用 60 GB,即使您没有对哈希函数数量的限制。我没有数学来证明这一点,但在我看来,你正在突破理论上可能的界限。
-
好的,如果我增加内存或者我的误报率上升到项目的 1%,那么布隆过滤器对于我的用例来说是一个不错的选择,或者是否有任何其他概率数据结构可以作为更好的选择?
标签: data-structures bloom-filter