Warning
Do not run on untrusted input. The author assume no responsibility for any data loss or corruption.
Algorithm v1: Order-4 Context Modeler + rANS Entropy Coder (.fv1)
# Usage:
v1.exe file_to_compress
v1.exe file_to_decompress.fv1Algorithm v2: Full-Block BWT + Adaptive Context-Mixing Range Coder (.fv2)
# Usage:
v2.exe file_to_compress
v2.exe file_to_decompress.fv2Both implementations support compiling into a self-extracting executable:
odin run v1 -define:SFX=shakespeare.txt| Algorithm / Level | Compressed Size (bytes) | Compression Time (s) | Decompression Time (s) |
|---|---|---|---|
fv2 |
20,789,653 | 145.736 s | 15.023 s |
xz / LZMA2 (-9) |
24,865,244 | 79.018 s | 1.067 s |
xz / LZMA2 (-6) |
26,375,764 | 55.579 s | 1.140 s |
zstd (-19) |
26,936,936 | 53.059 s | 0.148 s |
brotli (-q11) |
27,045,057 | 172.364 s | 0.243 s |
bzip2 (-9) |
29,008,758 | 5.415 s | 2.489 s |
zstd (-15) |
29,430,901 | 23.089 s | 0.135 s |
brotli (-q9) |
29,473,899 | 10.515 s | 0.238 s |
fv1 |
29,813,950 | 15.089 s | 18.929 s |
brotli (-q5) |
31,792,290 | 1.852 s | 0.243 s |
zstd (-7) |
31,981,436 | 1.518 s | 0.140 s |
bzip2 (-1) |
33,259,568 | 5.488 s | 2.178 s |
xz / LZMA2 (-1) |
33,276,380 | 4.921 s | 1.366 s |
zstd (-3) |
35,419,425 | 0.580 s | 0.138 s |
zlib (Deflate -9) |
36,493,234 | 3.005 s | 0.181 s |
gzip (-9) |
36,493,246 | 3.133 s | 0.192 s |
zlib (Deflate -6) |
36,877,083 | 1.481 s | 0.193 s |
gzip (-6) |
36,877,095 | 1.587 s | 0.199 s |
brotli (-q1) |
39,123,256 | 0.451 s | 0.330 s |
zstd (-1) |
40,662,735 | 0.350 s | 0.115 s |
lz4 (HC -12) |
41,927,831 | 5.316 s | 0.059 s |
zlib (Deflate -1) |
52,705,901 | 0.459 s | 0.222 s |
gzip (-1) |
52,705,913 | 0.487 s | 0.235 s |
lz4 (default) |
57,277,262 | 0.214 s | 0.057 s |
- Large Text Compression Benchmark (LTCB)
- Data Compression Explained
- Understanding the New Entropy Coder Family: Asymmetric Numeral Systems
- Burrows–Wheeler Transform (Wikipedia)
- Suffix Array Construction (CP-Algorithms)
- 3Blue1Brown: "But what is cross-entropy? | Compression is Intelligence Part 2"
- libsais (GitHub)
- bzip3 (GitHub)