我正在实现BloomFilter,必须通过添加[0,N]元素然后计算过滤器是否包含(n,oo)元素来计算误报的数量。我在计算正确的误报数时遇到问题。每次在我的循环中,containscontains()都会告诉我我的过滤器包含(n,oo)中的一个元素,我将其添加到误报中。
但是例如,当我有一个包含16个元素的过滤器时,我得到10个误报,而误报的比率为0。
任何帮助,将不胜感激
for (int numNotInFilter =size+1; numNotInFilter<2*size; numNotInFilter++)
{
if (myBloom.possiblyContains((const uint8_t*)(&numNotInFilter), sizeof(int)))
{
numOfFalsePositives+=1.0;
}
}
double RateOfFalsePositives = (numOfFalsePositives) / ((2 * size) - 1);
最佳答案
过去我在处理bloom filters时曾使用过该库。有一个示例计算遇到的误报:
https://github.com/ArashPartow/bloom/blob/master/bloom_filter_example02.cpp
从我可以看出示例中发生的情况来看,误报概率的发生率不仅取决于遇到的误报的数量,而且还取决于Bloom过滤器大小。
关于c++ - 布隆过滤器误报,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43599442/