Fingerprint Filters Are Optimal
William Kuszmaul, Jingxun Liang, Renfei Zhou
TL;DR
This work establishes a tight information-theoretic lower bound for dynamic filters, proving that any such data structure with universe $U$, capacity $n$, and false-positive rate $\varepsilon = o(1)$ must use at least $n \log \varepsilon^{-1} + n \log e - o(n)$ bits of space, independent of operation time. The authors develop a multi-layer proof: a warmup under history-independence and monotonicity using a two-filter (F and G) communication protocol, then an extension to history-dependent and non-monotone settings via obfuscation sequences and a reconstructible-set framework. The core technical contribution is showing that, no matter how an implementation evolves under dynamic updates, the information-theoretic cost cannot beat the $n \log \varepsilon^{-1} + n \log e$ overhead. The results imply that practical dynamic fingerprints carry a fundamental space overhead of about $1.44n$ bits beyond the vanilla $n \log \varepsilon^{-1}$ term, confirming the optimality of fingerprint-based dynamic filters in a broad sense and guiding future research on tight bounds for special regimes and related retrieval problems.
Abstract
Dynamic filters are data structures supporting approximate membership queries to a dynamic set $S$ of $n$ keys, allowing a small false-positive error rate $\varepsilon$, under insertions and deletions to the set $S$. Essentially all known constructions for dynamic filters use a technique known as fingerprinting. This technique, which was first introduced by Carter et al. in 1978, inherently requires $$\log \binom{n \varepsilon^{-1}}{n} = n \log \varepsilon^{-1} + n \log e - o(n)$$ bits of space when $\varepsilon = o(1)$. Whether or not this bound is optimal for all dynamic filters (rather than just for fingerprint filters) has remained for decades as one of the central open questions in the area. We resolve this question by proving a sharp lower bound of $n \log \varepsilon^{-1} + n \log e - o(n)$ bits for $\varepsilon = o(1)$, regardless of operation time.
