Fast and Compact Prefix Codes
Travis Gagie, Gonzalo Navarro, and Yakov Nekrich
It is well known that, given a probability distribution over n characters,
in the worst case it takes Theta(n log n) bits to store a prefix code
with minimum expected codeword length. However, in this paper we first show
that, for any 0< e <1/2 with 1/e = O(polylog(n), it
takes O(n log log (1/e)) bits to store a prefix code with
expected codeword length within e of the minimum. We then show that,
for any constant c > 1, it takes O(n^(1/c) log n) bits to store a
prefix code with expected codeword length at most c times the minimum. In
both cases, our data structures allow us to encode and decode any character in
O(1) time.