如何创建一个布隆过滤器,以便在O(n)时间复杂度和时间上从整数流中删除重复元素。 O(1)空间复杂度? 如果可能的话,如果有人能指出我正确的方向,我将不胜感激?
答案 0 :(得分:4)
我很确定它只是:
对于每个元素:
现在有两个问题:
我不相信这些问题中的任何一个都可以通过约束来避免 - 两者都是使用(仅)布隆过滤器的组成部分。
如果我们不是处理流,而是处理列表,我们可以通过记录由bloom过滤器拾取的所有元素来排除误报,并再次通过列表检查我们的候选列表而不是确保它们是实际重复的。这仍然是O(n)时间,但显然不是O(1)空间。
答案 1 :(得分:1)
Google Guava提供了bloom过滤器实现。
请注意,布隆过滤器本身是不够的。如果布隆过滤器声称某个数字不在其中,那么它就不在其中。但如果它声称这个数字已经存在,那么它就有可能出错。所以你需要在那里有另一个数据结构,并使用bloomfilter来减少该数据结构中的查找次数。