Um filtro Bloom permite controlar com eficiência se vários valores já foram encontrados durante o processamento. Quando existem muitos itens de dados, um filtro Bloom pode resultar em uma economia significativa de memória em uma tabela de hash. O principal recurso de um filtro Bloom, que ele compartilha com uma tabela de hash, é que ele sempre diz "não novo" se um item não é novo, mas há uma probabilidade diferente de zero de que um item seja sinalizado como "não novo" "mesmo quando é novo.
Existe um "filtro anti-Bloom", que tem o comportamento oposto?
Em outras palavras: existe uma estrutura de dados eficiente que diz "novo" se um item é novo, mas que também pode dizer "novo" para alguns itens que não são novos?
Manter todos os itens vistos anteriormente (por exemplo, em uma lista vinculada classificada) satisfaz o primeiro requisito, mas pode consumir muita memória. Espero que também seja desnecessário, dado o segundo requisito relaxado.
Para aqueles que preferem um tratamento mais formal, escreva se o filtro Bloom considerar que é novo, caso contrário, e escreva se realmente for novo caso contrário.
Então ; ; ; , para alguns .
Estou perguntando: existe uma estrutura de dados eficiente, implementando uma função com algum , de modo que ; ; ; ?
Editar: parece que essa pergunta já foi feita no StackExchange, pois /programming/635728 e /cstheory/6596 com várias respostas de "não podem ser done "through" pode ser feito, com algum custo "to" é trivial, revertendo os valores de ". Ainda não está claro para mim qual é a resposta "certa". O que está claro é que um esquema de cache de LRU de algum tipo (como o sugerido por Ilmari Karonen) funciona bastante bem, é fácil de implementar e resultou em uma redução de 50% no tempo necessário para executar meu código.