Một Bloom lọc làm cho nó có thể để giữ một cách hiệu quả theo dõi cho dù giá trị khác nhau đã được gặp trong chế biến. Khi có nhiều mục dữ liệu thì bộ lọc Bloom có thể giúp tiết kiệm bộ nhớ đáng kể qua bảng băm. Tính năng chính của bộ lọc Bloom, được chia sẻ với bảng băm, là nó luôn luôn nói "không mới" nếu một mục không mới, nhưng có một xác suất khác không là một mục sẽ được gắn cờ là "không mới "Ngay cả khi nó còn mới.
Có "bộ lọc chống Bloom", có hành vi ngược lại không?
Nói cách khác: có một cấu trúc dữ liệu hiệu quả nói "mới" nếu một mục là mới, nhưng cũng có thể nói "mới" cho một số mục không phải là mới?
Giữ tất cả các mục đã thấy trước đó (ví dụ, trong danh sách được liên kết được sắp xếp) đáp ứng yêu cầu đầu tiên nhưng có thể sử dụng nhiều bộ nhớ. Tôi hy vọng nó cũng không cần thiết, đưa ra yêu cầu thứ hai thoải mái.
Đối với những người thích điều trị chính thức hơn, hãy viết nếu bộ lọc Bloom nghĩ là mới, nếu không và viết nếu thực sự mới và nếu không.
Khi đó ; P r [ b ( x ) = 0 | n ( x ) = 1 ] = α ; P r [ b ( x ) = 1 | n ( x ) = 0 ] = 0; , với một số 0 < α < 1 .
Tôi đang hỏi: có tồn tại cấu trúc dữ liệu hiệu quả không, thực hiện hàm với một số 0 < β < 1 , sao cho P r [ b ′ ( x ) = 0 | n ( x ) = 0 ] = β ; P r [ b ′ ( x ) = 0 | n ( x ) = 1 ] = 0 ; P r ; P r [ b ′ ( x ) = 1 | n ( x ) = 1 ] = 1 ?
Chỉnh sửa: Có vẻ như câu hỏi này đã được hỏi trước đây trên StackExchange, vì /programming/635728 và /cstheory/6596 với một loạt các câu trả lời từ "không thể thực hiện "thông qua" có thể được thực hiện, với một số chi phí "thành" việc đó là không quan trọng, bằng cách đảo ngược các giá trị của ". Vẫn chưa rõ câu trả lời "đúng" là gì. Có gì là rõ ràng là một chương trình LRU bộ nhớ đệm của một số loại (ví dụ như một đề nghị của Ilmari Karonen) hoạt động khá tốt, rất dễ dàng để thực hiện, và kết quả là giảm 50% trong thời gian thực hiện để chạy mã của tôi.