  We give the first optimal bounds for returning the $\ell_1$-heavy hitters in
a data stream of insertions, together with their approximate frequencies,
closing a long line of work on this problem. For a stream of $m$ items in $\{1,
2, \dots, n\}$ and parameters $0 < \epsilon < \phi \leq 1$, let $f_i$ denote
the frequency of item $i$, i.e., the number of times item $i$ occurs in the
stream. With arbitrarily large constant probability, our algorithm returns all
items $i$ for which $f_i \geq \phi m$, returns no items $j$ for which $f_j \leq
(\phi -\epsilon)m$, and returns approximations $\tilde{f}_i$ with $|\tilde{f}_i
- f_i| \leq \epsilon m$ for each item $i$ that it returns. Our algorithm uses
$O(\epsilon^{-1} \log\phi^{-1} + \phi^{-1} \log n + \log \log m)$ bits of
space, processes each stream update in $O(1)$ worst-case time, and can report
its output in time linear in the output size. We also prove a lower bound,
which implies that our algorithm is optimal up to a constant factor in its
space complexity. A modification of our algorithm can be used to estimate the
maximum frequency up to an additive $\epsilon m$ error in the above amount of
space, resolving Question 3 in the IITK 2006 Workshop on Algorithms for Data
Streams for the case of $\ell_1$-heavy hitters. We also introduce several
variants of the heavy hitters and maximum frequency problems, inspired by rank
aggregation and voting schemes, and show how our techniques can be applied in
such settings. Unlike the traditional heavy hitters problem, some of these
variants look at comparisons between items rather than numerical values to
determine the frequency of an item.
