lzbench results

Compression ratio vs. speed

Single-threaded
Speed on the chart
Pareto frontier

All results

Frontier

Algorithms

The Algorithm column is the modelling stage, then the entropy coder if there is one, e.g. LZ77 + Huffman.
Modelling stage
LZ77
Lempel–Ziv 1977: repeated data becomes references (offset, length) to earlier data
LZP
LZ with prediction: the match position is predicted from a hash of the preceding bytes, so only lengths are coded
ROLZ
Reduced-offset LZ: offsets pick one of a few earlier positions that followed the same context
field LZ
OpenZL's LZ for fixed-width numeric fields
BWT
Burrows–Wheeler transform: sorts a block by context so that similar data clusters together
ST
Sort transform: a faster BWT variant that sorts by a limited context (bsc -m3 to -m8)
PPM
Prediction by partial matching: predicts each byte from the longest matching earlier context
CM
Context mixing: combines the predictions of many models (PAQ-like); as an entropy stage, codes the output of a transform this way
dictionary
Words found in a hash-indexed dictionary are replaced by short codes (density, skim)
grammar
Builds a grammar of repeated strings (glza)
copy
No compression: memcpy, the memory-bandwidth reference
Entropy coder
Huffman
Prefix code whose length per symbol follows its frequency
prefix code
A fixed set of code lengths assigned by frequency (gipfeli)
FSE
Finite State Entropy: tabled ANS, used by zstd and lzfse; zstd codes literals with Huffman (FSE/Huffman)
ANS, tANS
Asymmetric numeral systems, and its tabled form: close to arithmetic coding at Huffman-like speed
range
Range coding: arithmetic coding with integers, as in LZMA
arithmetic
Arithmetic coding, including binary adaptive coders (e.g. kanzi FPAQ, lzham's flags)
QLFC
Quantized local frequency coding, bsc's entropy coder for BWT output

A result is on the Pareto frontier when no other result is both faster and has a better (lower) ratio. There is one frontier for compression speed (C) and one for decompression speed (D); memcpy is shown as the memory-bandwidth reference and left out of both. Ratio is the compressed size as a percentage of the -byte , so lower is better. Groups are lzbench's own aliases: LZ (LZ codecs without an entropy coder), LZ+ENTROPY (LZ followed by Huffman, FSE/ANS or range coding) and SYMMETRIC (BWT, PPM and other codecs with similar compression and decompression speed). The data comes from lzbench's doc/results directory; lzbench_json.py there converts lzbench's output for this page.