簡體   English   中英

布隆過濾器從O(n)中的整數流中刪除重復項

[英]Bloom filter to remove duplicates from a stream of integers in O(n)

如何創建布隆過濾器以從O(n)時間復雜度和O(1)空間復雜度的整數流中刪除重復元素? 如果可能的話,如果有人能指出正確的方向,我將不勝感激。

我相當確定這只是:

對於每個元素:

  • 檢查它是否在bloom篩選器中存在,如果存在,則可能是重復項
  • 將其插入布隆過濾器

現在有兩個問題:

  • 有誤報的可能性
  • 這並不是真正的O(1)空間(但有人可能會說是),因為大小需要一定程度地取決於(唯一)元素的數量,否則,錯誤率會隨着我們增加元素數量而顯着增加。

考慮到約束,我不認為可以避免這些問題中的任何一個-兩者都是使用(僅)bloom過濾器的組成部分。

如果我們不是處理流,而是處理列表,則可以通過記錄bloom過濾器拾取的所有元素來消除誤報,然后再次遍歷該列表以檢查我們的候選列表,以確保它們沒有是實際的重復項。 這仍然是O(n)時間,但顯然不是O(1)空間。

Google Guava提供了布隆過濾器實現。

請注意,光暈過濾器本身是不夠的。 如果Bloom filter聲稱其中沒有數字,則該數字中也沒有數字。 但是,如果它聲稱該數字已經存在,則有可能是錯誤的。 因此,您需要確定另一個數據結構,並使用Bloomfilter減少該數據結構中的查找次數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM