<p>You might find the following analogy helpful:</p>
<blockquote>
<p>Bloom filter is to <em>set</em> as Bloomier filter is to <em>map</em>.</p>
</blockquote>
<p>A Bloom filter can be thought of as a way of storing a compressed version of a set of items in significantly less space than the original set would normally take. The tradeoff involved is that you might have some false positives - items that aren't actually in the set but which the Bloom filter says are in the set.</p>
<p>A <em><strong>Bloomier</strong></em> filter can be thought of as a way of storing a compressed version of a map (or associative array, or dictionary, depending on what terminology you're using). That is, it stores a compressed representation of an association from keys to values. The advantage of the Bloomier filter is that it uses significantly less space than what would normally be required to store the map. The drawback is that the Bloomier filter can have false positives - if you look something up that isn't in the map, the Bloomier filter might accidentally report that it's there and give back a nonsense associated value. (This is a bit different from what you described in your question. In your question, you characterized a Bloomier filter as a Bloom filter that can also hand back the items stored in the filter.)</p>
<p>So to directly answer your question, yes, you absolutely could use a hash table instead of a Bloomier filter. However, doing so would use considerably more space. In most cases, we don't care about that space, but there are applications where space is at a premium and reducing storage would be valuable. As an example, check out the paper <a href="https://arxiv.org/abs/1711.04686" rel="nofollow noreferrer"><em>Weightless: Lossy Weight Encoding For Deep Neural Network Compression</em></a>, which uses Bloomier filters to reduce the storage space needed to store large neural networks without too much of a decrease in the quality of the network.</p>
<p>As for how a Bloomier filter works, it's based on a technique that's closely related to that of the <a href="https://stackoverflow.com/questions/67527507/what-is-an-xor-filter">XOR filter</a>, and the linked question gives a rough overview of the key techniques.</p>
What is the purpose of a Bloomier filter?
<p>This question is about the <em><strong>Bloomier</strong></em> filter, which is not the same as a standard Bloom filter.</p>
<p>I'm learning about the Bloomier filter and I don't see the advantage of using one. As far as I'm concerned, a Bloomier filter is a generalization of a Bloom filter. It can return the specific items themselves.</p>
<p>However, you could accomplish this by simply using hash tables and they seems faster and more space-efficient.</p>
<p>Given this, what's the purpose of a Bloomier filter?</p>