   a bloom filter is a space-efficient probabilistic data structure, conceived by burton howard bloom in 1970, that is used to test whether an element is a member of a set. false positive matches are possible, but false negatives are not, thus a bloom filter has a 100% recall rate. in other words, a query returns either "possibly in set" or "definitely not in set". elements can be added to the set, but not removed (though this can be addressed with a "counting" filter). the more elements that are added to the set, the larger the probability of false positives. bloom proposed the technique for applications where the amount of source data would require an impracticably large hash area in memory if "conventional" error-free hashing techniques were applied. he gave the example of a hyphenation algorithm for a dictionary of 500,000 words, out of which 90% follow simple hyphenation rules, but the remaining 10% require expensive disk accesses to retrieve specific hyphenation patterns. with sufficient core memory, an error-free hash could be used to eliminate all unnecessary disk accesses; on the other hand, with limited core memory, bloom's technique uses a smaller hash area but still eliminates most unnecessary accesses. for example, a hash area only 15% of the size needed by an ideal error-free hash still eliminates 85% of the disk accesses (). more generally, fewer than 10 bits per element are required for a 1% false positive probability, independent of the size or number of elements in the set (). ==algorithm description== thumb|360px|an example of a bloom filter, representing the set { , ,  }. the colored arrows show the positions in the bit array that each set element is mapped to. the element  is not in the set { , ,  }, because it hashes to one bit-array position containing 0. for this figure, &nbsp;= 18 and &nbsp;= 3. an empty bloom filter is a bit array of  bits, all set to 0. there must also be  different hash functions defined, each of which maps or hashes some set element to one of the  array positions with a uniform random distribution. to add an element, feed it to each of the  hash functions to get  array positions. set the bits at all these positions to 1. to query for an element (test whether it is in the set), feed it to each of the  hash functions to get  array positions. if any of the bits at these positions are 0, the 
Hashing Lossy_compression_algorithms Probabilistic_data_structures