Sebuah Bloom Filter memungkinkan untuk efisien melacak apakah berbagai nilai telah ditemui selama pengolahan. Ketika ada banyak item data maka filter Bloom dapat menghasilkan penghematan memori yang signifikan di atas tabel hash. Fitur utama dari filter Bloom, yang dibagikan dengan tabel hash, adalah selalu mengatakan "bukan baru" jika suatu item bukan barang baru, tetapi ada probabilitas bukan nol bahwa suatu barang akan ditandai sebagai "bukan barang baru" "Bahkan ketika itu baru.
Apakah ada "filter anti-Bloom", yang memiliki perilaku sebaliknya?
Dengan kata lain: apakah ada struktur data yang efisien yang mengatakan "baru" jika suatu barang baru, tetapi yang juga bisa mengatakan "baru" untuk beberapa item yang bukan barang baru?
Menyimpan semua item yang terlihat sebelumnya (misalnya, dalam daftar tertaut yang disortir) memenuhi persyaratan pertama tetapi mungkin menggunakan banyak memori. Saya berharap itu juga tidak perlu, mengingat persyaratan kedua yang santai.
Bagi mereka yang lebih menyukai perlakuan yang lebih formal, tulis jika filter Bloom menganggap adalah baru, b (x) = 0 sebaliknya, dan tulis n (x) = 1 jika x benar-benar baru dan n (x) ) = 0 sebaliknya.
Kemudian ; ; ; , untuk beberapa .
Saya bertanya: apakah ada struktur data yang efisien, menerapkan fungsi dengan beberapa , sehingga ; ; ; ?
Sunting: Sepertinya pertanyaan ini telah ditanyakan sebelumnya di StackExchange, seperti /programming/635728 dan /cstheory/6596 dengan serangkaian jawaban dari "tidak bisa dilakukan "melalui" dapat dilakukan, dengan biaya "ke" itu sepele untuk dilakukan, dengan membalikkan nilai-nilai ". Belum jelas bagi saya apa jawaban "benar" itu. Apa yang jelas adalah bahwa skema LRU caching dari beberapa macam (seperti yang disarankan oleh Ilmari Karonen) bekerja cukup baik, mudah untuk menerapkan, dan menghasilkan pengurangan 50% dalam waktu yang dibutuhkan untuk menjalankan kode saya.