Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从O(n)中的整数流中删除重复项的Bloom筛选器_Java_Algorithm - Fatal编程技术网

Java 从O(n)中的整数流中删除重复项的Bloom筛选器

Java 从O(n)中的整数流中删除重复项的Bloom筛选器,java,algorithm,Java,Algorithm,如何创建一个bloom过滤器来从O(n)时间复杂度和O(1)空间复杂度的整数流中删除重复元素? 如果可能的话,如果有人能给我指出正确的方向,我将不胜感激。我很肯定这只是: 对于每个元素: 检查bloom过滤器中是否存在,如果存在,则可能是重复 将其插入布卢姆过滤器 现在有两个问题: 有可能出现误报 它不是真正的O(1)空间(但有些人可能会说是),因为大小需要在某种程度上取决于(唯一)元素的数量,否则,错误率将随着元素数量的增加而显著增加 考虑到这些限制条件,我认为这两个问题都无法避免——

如何创建一个bloom过滤器来从O(n)时间复杂度和O(1)空间复杂度的整数流中删除重复元素?
如果可能的话,如果有人能给我指出正确的方向,我将不胜感激。

我很肯定这只是:

对于每个元素:

  • 检查bloom过滤器中是否存在,如果存在,则可能是重复
  • 将其插入布卢姆过滤器
现在有两个问题:

  • 有可能出现误报
  • 它不是真正的O(1)空间(但有些人可能会说是),因为大小需要在某种程度上取决于(唯一)元素的数量,否则,错误率将随着元素数量的增加而显著增加
考虑到这些限制条件,我认为这两个问题都无法避免——这两个问题都是使用(仅)bloom过滤器不可分割的一部分


如果我们处理的不是流,而是列表,那么我们可以通过记录bloom过滤器拾取的所有元素来消除误报,并再次检查列表,而不是检查候选列表,以确保它们是实际的重复项。这仍然是O(n)时间,但显然不是O(1)空间。

谷歌番石榴提供了bloom过滤器实现

请注意,布卢姆过滤器本身是不够的。如果bloom filter声称某个数字不在其中,那么它就不在其中。但是如果它声称这个数字已经在里面了,那么它就有可能是错的。因此,您需要有另一个数据结构来确保,并使用bloomfilter减少该数据结构中的查找次数。

这可能有助于您: