如何在使用联合或交叉函数时获得布隆过滤器的大小?

问题描述 投票:2回答:1

我正在尝试使用bloom过滤器的联合和交集函数与python包(https://github.com/jaybaird/python-bloomfilter.git)获得布隆过滤器集的大小

我虽然在执行函数'union'或'intersection'后,我可以通过添加len()函数得到结果,但它只打印出'0'输出。

from pybloom import BloomFilter
bf1 = BloomFilter(1000)
bf2 = BloomFilter(1000)

# After adding some elements to bf1 and bf2
print(len(bf1.union(bf2)))
# expected max(len(bf1), len(bf2)) but the result was 0

找到文档页面后,我意识到len()选项在'union'函数后被禁用,其实际结果len()为0。

相反,我想以某种方式近似布隆过滤器集的大小。你有什么想法来计算它的大小吗?

python approximation bloom-filter
1个回答
2
投票

该实现仅复制BloomFilter的bitarray,即self.bitarrayself.count中的元素previous filters不计入。

所以它没有联合元素 - 但做一个bitarray or


更新:

在大多数情况下,您无需估算计数。当你打电话给precise count时,它提供了一个add元素,你可以调用len(bf3)。不幸的是,新创建的bf3并没有被称为add所以len(bf3) == 0

对于公式来近似元素的数量,

- m / k * ln(1- n / m)

你有

import math.log as ln

m = bf3.bitarray.length()
n = bf3.bitarray.count()
k = bf3.num_slices

# given m=20, n=8, approximate n elements as 5.89
© www.soinside.com 2019 - 2024. All rights reserved.