之前已经问过这个问题,但当时没有答案,所以我决定再问一次。
我需要在C(而不是C ++)中高效实现Bloom过滤器。如果没有这样的东西,我不介意实施一个,如果给出一些好的参考,这样就不会占用太多的时间。
我想以比例(1:20k)使用此数据结构进行插入和测试,因此主要是测试密集型。要测试的数据是64位整数。
答案 0 :(得分:17)
我这里有一个独立的普通C库,可能有用: https://github.com/jvirkki/libbloom
答案 1 :(得分:4)
不要做太多的自我推销,但是我为Geany editor/IDE编写了一个过滤掉重复文本行的插件,它使用了Bloom过滤器。
实现在C中,您可以找到它right here on GitHub。它是GPL v3,因此根据您的确切需求,您可能会或可能无法使用它。
关于我的实施的一些注意事项:
BloomContains
使用的bloom_filter_new()
回调函数指针)。只需通过NULL
即可获得“纯”过滤器。它没有经过严格的性能调整,但应该没问题。当然,我很感激您在测试后可能会得到任何反馈!
答案 2 :(得分:1)
Chromium在C ++中有一个
答案 3 :(得分:0)
我知道这是一个老问题,但作为参考,这里有一些github搜索结果。
在github上搜索'bloomfilter'会产生大量的结果(对于C):
https://github.com/search?q=extension%3Ac+bloomfilter&type=Code&ref=searchresults
仅适用于 REFERENCE 。
答案 4 :(得分:0)
该项目中提供了几种Bloom过滤器实现和替代算法:https://github.com/FastFilter/fastfilter_cpp
包括常规Bloom过滤器,block Bloom过滤器,布谷鸟过滤器,Golomb编码集等。它是C ++,但是主要算法很容易移植到C。