Un filtro Bloom permite realizar un seguimiento eficiente de si ya se han encontrado varios valores durante el procesamiento. Cuando hay muchos elementos de datos, un filtro Bloom puede generar un ahorro significativo de memoria en una tabla hash. La característica principal de un filtro Bloom, que comparte con una tabla hash, es que siempre dice "no nuevo" si un elemento no es nuevo, pero hay una probabilidad distinta de cero de que un elemento se marque como "no nuevo" "incluso cuando es nuevo.
¿Existe un "filtro anti-Bloom" que tenga el comportamiento opuesto?
En otras palabras: ¿existe una estructura de datos eficiente que diga "nuevo" si un elemento es nuevo, pero que también podría decir "nuevo" para algunos elementos que no son nuevos?
Mantener todos los elementos vistos anteriormente (por ejemplo, en una lista vinculada ordenada) satisface el primer requisito pero puede usar mucha memoria. Espero que también sea innecesario, dado el segundo requisito relajado.
Para aquellos que prefieren un tratamiento más formal, escriba si el filtro Bloom cree que es nuevo, contrario, y escriba si realmente es nuevo contrario.
Entonces ; ; ; , para algunos .
Estoy preguntando: ¿existe una estructura de datos eficiente, implementando una función con algún , tal que ; ; ; ?P r [ b ′ ( x ) = 1 | n ( x ) = 1 ] = 1
Editar: Parece que esta pregunta se ha hecho antes en StackExchange, ya que /programming/635728 y /cstheory/6596 con un rango de respuestas de "no se puede hecho "a través" se puede hacer, a algún costo "a" es trivial, invirtiendo los valores de ". Todavía no me queda claro cuál es la respuesta "correcta". Lo que está claro es que un esquema de almacenamiento en caché LRU de algún tipo (como el sugerido por Ilmari Karonen) funciona bastante bien, es fácil de implementar y resultó en una reducción del 50% en el tiempo necesario para ejecutar mi código.