Un filtre Bloom permet de suivre efficacement si différentes valeurs ont déjà été rencontrées lors du traitement. Lorsqu'il existe de nombreux éléments de données, un filtre Bloom peut entraîner une économie de mémoire significative sur une table de hachage. La principale caractéristique d'un filtre Bloom, qu'il partage avec une table de hachage, est qu'il dit toujours "pas nouveau" si un élément n'est pas nouveau, mais il y a une probabilité non nulle qu'un élément soit marqué comme "pas nouveau" "même quand c'est nouveau.
Existe-t-il un "filtre anti-Bloom", qui a le comportement inverse?
En d'autres termes: existe-t-il une structure de données efficace qui dit "nouveau" si un article est nouveau, mais qui pourrait également dire "nouveau" pour certains articles qui ne sont pas nouveaux?
Garder tous les éléments précédemment vus (par exemple, dans une liste chaînée triée) satisfait la première exigence mais peut utiliser beaucoup de mémoire. J'espère que cela est également inutile, compte tenu de la deuxième condition assouplie.
Pour ceux qui préfèrent un traitement plus formel, écrivez si le filtre Bloom pense que est nouveau, sinon, et écrivez si est vraiment nouveau et sinon.n ( x ) = 1 x n ( x ) = 0
Alors ; ; ; , pour quelque .
Je demande: existe-t-il une structure de données efficace, implémentant une fonction avec quelque 0 < β < 1 , telle que P r [ b ′ ( x ) = 0 | n ( x ) = 0 ] = β ; P r [ b ′ ( x ) = 0 | n ( x ) = 1 ] = 0 ; P r ; ?
Edit: Il semble que cette question ait été posée auparavant sur StackExchange, car /programming/635728 et /cstheory/6596 avec une gamme de réponses de "ne peut pas être fait "à travers" peut être fait, à un certain coût "à" c'est trivial à faire, en inversant les valeurs de ". Il n'est pas encore clair pour moi quelle est la "bonne" réponse. Ce qui est clair, c'est qu'un schéma de mise en cache LRU d'une certaine sorte (comme celui suggéré par Ilmari Karonen) fonctionne plutôt bien, est facile à mettre en œuvre et a entraîné une réduction de 50% du temps nécessaire à l'exécution de mon code.