我正在实现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/

10-10 06:19