- PVSM.RU - https://www.pvsm.ru -
Доброго времени суток читатели и гости сайта, речь пойдет об алгоритме сжатия без потерь [1], который является совместным «ребенком». В данной статье будут приведены промежуточные результаты которых удалось добиться, в виде таблиц сравнения с популярными алгоритмами.
Основная идеология для алгоритма была составлена в нескольких характеристиках:
Скорость упаковки (сжатия) сюда изначально не была включена, но постепенно будет улучшаться как и весь алгоритм в целом. Не используются энтропийное сжатие и словарные методы.
Для чистоты и простоты проведения измерений, алгоритм интегрировали в утилиту lzbench (cсылка на GitHub [2]), так как в ней уже присутствует достаточное кол-во других алгоритмов и легко интегрировать свой.
Далее были выбраны файлы из уже готового пакета для тестирования алгоритмов с названием Silesia. Краткое описание файлов:
Имя файла | Описание | Тип | Размер, Байт |
dickens | Коллекция работ Чарльза Диккенса | txt (eng) | 10 192 446 |
mozilla | tar архив с исполняемыми файлами Mozilla 1.0 | exe | 51 220 480 |
mr | Изображение МРТ | image | 9 970 564 |
nci | База химических структур | database | 33 553 445 |
ooffice | Dll файлы из Open Office.org 1.01 | exe | 6 152 192 |
osdb | Пример базы данных MySQL формата из | database | 10 085 684 |
reymont | Текст книги | Polish, pdf | 6 627 202 |
samba | tar архив исходников | src | 21 606 400 |
sao | Звездный каталог Смитсоновской астрофизической обсерватории | bin data | 7 251 944 |
webster | Американский словарь английского языка Уэбстера | html | 41 458 703 |
xml | Коллекция xml файлов | xml | 5 345 280 |
X-ray | Рентген изображение | image | 8 474 240 |
→ Источник [3]
Список насыщен алгоритмами которые решают разные задачи, но все познается в сравнении.
Brotli — основан на современном варианте алгоритма LZ77 [4], энтропийном кодировании Хаффмана [5] и моделировании контекста 2-го порядка.
Предназначен для ускорения загрузки веб-страниц, поддерживается в браузерах Chrome, основанных на Chromium и в Firefox.
Deflate — алгоритм сжатия без потерь, использующий комбинацию алгоритмов LZ77 и Хаффмана.
Zstandard (Zstd) — алгоритм сжатия данных без потерь, разрабатываемый с 2015 Yann Collet при поддержке Facebook. Cочетает словарный алгоритм сжатия данных типа LZ77 и эффективное энтропийное кодирование типа tANS (FSE — Finite State Entropy), модификацию кода Хаффмана, реализующую нецелое количество бит для хранения символов.
LZMA — используется в архиваторе 7-Zip для создания сжатых архивов в формате 7z. Алгоритм основан на схеме сжатия данных по словарю, сходной с использованной в LZ77, и обеспечивает высокий коэффициент сжатия (обычно превышающий коэффициент, получаемый при сжатии с использованием bzip2), а также позволяет использовать словари различного размера (до 4 Гб).
Snappy — еще один алгорим сжатия без потерь от google предназначен для достижения высоких скоростей без достижения максимальных степеней сжатия.
Процессор DualCore Intel Core i3 550, 3200 MHz [6]
Память GoodRam 8119 Mb DDR3-1333 DDR3 SDRAM
ОС Ubuntu 16.10 x64
memcpy — функция которая копирует данные, взята как эталон по скорости упаковки и распаковки.
Таблицы отсортированы по коэфициенту сжатия (“% от оригинала” так выводит lzbench, не стал конвертировать) от мелкого к большему.
Имя алгоритма | Скорость упаковки | Скорость распаковки | Размер сжатого файла, Байт | % от оригинала | Имя файла, тип |
memcpy | 4029 MB/s | 4034 MB/s | 10192446 | 100.00 | dickens, txt |
csc 2016-10-13 -1 | 18 MB/s | 31 MB/s | 4020916 | 39.45 | dickens, txt |
lzlib 1.7 -0 | 7.76 MB/s | 34 MB/s | 3815335 | 37.43 | dickens, txt |
lzma 9.38 -0 | 13 MB/s | 38 MB/s | 4044850 | 39.68 | dickens, txt |
libdeflate 0.6 -1 | 85 MB/s | 435 MB/s | 4231543 | 41.52 | dickens, txt |
zstd 1.1.3 -1 | 143 MB/s | 486 MB/s | 4279273 | 41.98 | dickens, txt |
xpack 2016-06-02 -1 | 83 MB/s | 359 MB/s | 4282245 | 42.01 | dickens, txt |
brotli 0.5.2 -0 | 168 MB/s | 178 MB/s | 4401269 | 43.18 | dickens, txt |
zlib 1.2.8 -1 | 50 MB/s | 195 MB/s | 4585618 | 44.99 | dickens, txt |
broo 1.0 | 6.03 MB/s | 265 MB/s | 4750936 | 46.61 | dickens, txt |
gipfeli 2016-07-13 | 178 MB/s | 254 MB/s | 4955632 | 48.62 | dickens, txt |
yalz77 2015-09-19 -1 | 62 MB/s | 304 MB/s | 5634109 | 55.28 | dickens, txt |
quicklz 1.5.0 -1 | 250 MB/s | 326 MB/s | 5831353 | 57.21 | dickens, txt |
lzsse2 2016-05-14 -0 | 18 MB/s | 1481 MB/s | 5865705 | 57.55 | dickens, txt |
yappy 2014-03-22 -0 | 91 MB/s | 1122 MB/s | 6141853 | 60.26 | dickens, txt |
snappy 1.1.3 | 179 MB/s | 648 MB/s | 6337834 | 62.18 | dickens, txt |
lz4 1.7.5 | 264 MB/s | 1652 MB/s | 6428742 | 63.07 | dickens, txt |
lz5 2.0 -10 | 216 MB/s | 1855 MB/s | 6431869 | 63.10 | dickens, txt |
Имя алгоритма | Скорость упаковки | Скорость распаковки | Размер сжатого файла, Байт | % от оригинала | Имя файла, тип |
memcpy | 3986 MB/s | 4042 MB/s | 51220480 | 100.00 | mozilla, exe |
csc 2016-10-13 -1 | 11 MB/s | 41 MB/s | 15331191 | 29.93 | mozilla, exe |
lzma 9.38 -0 | 17 MB/s | 43 MB/s | 16425272 | 32.07 | mozilla, exe |
lzlib 1.7 -0 | 18 MB/s | 33 MB/s | 16470484 | 32.16 | mozilla, exe |
xpack 2016-06-02 -1 | 76 MB/s | 368 MB/s | 18391874 | 35.91 | mozilla, exe |
libdeflate 0.6 -1 | 92 MB/s | 396 MB/s | 19780124 | 38.62 | mozilla, exe |
zstd 1.1.3 -1 | 209 MB/s | 542 MB/s | 20120459 | 39.28 | mozilla, exe |
zlib 1.2.8 -1 | 53 MB/s | 209 MB/s | 20577226 | 40.17 | mozilla, exe |
brotli 0.5.2 -0 | 217 MB/s | 186 MB/s | 21740128 | 42.44 | mozilla, exe |
broo 1.0 | 5.11 MB/s | 350 MB/s | 23177220 | 45.25 | mozilla, exe |
gipfeli 2016-07-13 | 236 MB/s | 436 MB/s | 24380558 | 47.60 | mozilla, exe |
quicklz 1.5.0 -1 | 315 MB/s | 368 MB/s | 24756819 | 48.33 | mozilla, exe |
yalz77 2015-09-19 -1 | 49 MB/s | 436 MB/s | 25454532 | 49.70 | mozilla, exe |
lzsse2 2016-05-14 -0 | 13 MB/s | 1493 MB/s | 25826648 | 50.42 | mozilla, exe |
lz4 1.7.5 | 437 MB/s | 1876 MB/s | 26435667 | 51.61 | mozilla, exe |
snappy 1.1.3 | 303 MB/s | 1013 MB/s | 26461924 | 51.66 | mozilla, exe |
lz5 2.0 -10 | 334 MB/s | 2097 MB/s | 27016242 | 52.74 | mozilla, exe |
yappy 2014-03-22 -0 | 107 MB/s | 1749 MB/s | 27728218 | 54.14 | mozilla, exe |
Имя алгоритма | Скорость упаковки | Скорость распаковки | Размер сжатого файла, Байт | % от оригинала | Имя файла, тип |
lzlib 1.7 -0 | 20 MB/s | 34 MB/s | 3130897 | 31.40 | mr, image |
lzma 9.38 -0 | 16 MB/s | 44 MB/s | 3157626 | 31.67 | mr, image |
csc 2016-10-13 -1 | 12 MB/s | 40 MB/s | 3285805 | 32.96 | mr, image |
xpack 2016-06-02 -1 | 82 MB/s | 323 MB/s | 3526828 | 35.37 | mr, image |
libdeflate 0.6 -1 | 98 MB/s | 428 MB/s | 3750985 | 37.62 | mr, image |
zlib 1.2.8 -1 | 60 MB/s | 227 MB/s | 3828366 | 38.40 | mr, image |
zstd 1.1.3 -1 | 191 MB/s | 637 MB/s | 3829231 | 38.41 | mr, image |
brotli 0.5.2 -0 | 198 MB/s | 185 MB/s | 3975643 | 39.87 | mr, image |
gipfeli 2016-07-13 | 220 MB/s | 395 MB/s | 4702561 | 47.16 | mr, image |
broo 1.0 | 5.94 MB/s | 305 MB/s | 4741219 | 47.55 | mr, image |
quicklz 1.5.0 -1 | 410 MB/s | 363 MB/s | 4778194 | 47.92 | mr, image |
lzsse2 2016-05-14 -0 | 24 MB/s | 1523 MB/s | 5120289 | 51.35 | mr, image |
yalz77 2015-09-19 -1 | 58 MB/s | 396 MB/s | 5269368 | 52.85 | mr, image |
snappy 1.1.3 | 302 MB/s | 912 MB/s | 5419831 | 54.36 | mr, image |
lz4 1.7.5 | 422 MB/s | 2024 MB/s | 5440937 | 54.57 | mr, image |
yappy 2014-03-22 -0 | 108 MB/s | 1609 MB/s | 6454120 | 64.73 | mr, image |
lz5 2.0 -10 | 294 MB/s | 2248 MB/s | 6978486 | 69.99 | mr, image |
Имя алгоритма | Скорость упаковки | Скорость распаковки | Размер сжатого файла, Байт | % от оригинала | Имя файла, тип |
memcpy | 4042 MB/s | 4047 MB/s | 33553445 | 100.00 | nci, db |
csc 2016-10-13 -1 | 39 MB/s | 156 MB/s | 2463773 | 7.34 | nci, db |
lzma 9.38 -0 | 43 MB/s | 153 MB/s | 2777997 | 8.28 | nci, db |
lzlib 1.7 -0 | 49 MB/s | 103 MB/s | 2868761 | 8.55 | nci, db |
zstd 1.1.3 -1 | 435 MB/s | 915 MB/s | 2884530 | 8.60 | nci, db |
broo 1.0 | 8.65 MB/s | 1000 MB/s | 2981970 | 8.89 | nci, db |
xpack 2016-06-02 -1 | 180 MB/s | 807 MB/s | 3838847 | 11.44 | nci, db |
brotli 0.5.2 -0 | 539 MB/s | 575 MB/s | 3984199 | 11.87 | nci, db |
libdeflate 0.6 -1 | 180 MB/s | 1165 MB/s | 4066913 | 12.12 | nci, db |
zlib 1.2.8 -1 | 122 MB/s | 404 MB/s | 4624597 | 13.78 | nci, db |
yalz77 2015-09-19 -1 | 197 MB/s | 695 MB/s | 5050596 | 15.05 | nci, db |
gipfeli 2016-07-13 | 529 MB/s | 681 MB/s | 5063829 | 15.09 | nci, db |
lz4 1.7.5 | 765 MB/s | 2496 MB/s | 5533040 | 16.49 | nci, db |
lz5 2.0 -10 | 657 MB/s | 2644 MB/s | 5545810 | 16.53 | nci, db |
snappy 1.1.3 | 560 MB/s | 1452 MB/s | 6146844 | 18.32 | nci, db |
quicklz 1.5.0 -1 | 512 MB/s | 799 MB/s | 6160636 | 18.36 | nci, db |
lzsse2 2016-05-14 -0 | 15 MB/s | 2984 MB/s | 6339807 | 18.89 | nci, db |
yappy 2014-03-22 -0 | 179 MB/s | 1941 MB/s | 8967562 | 26.73 | nci, db |
Имя алгоритма | Скорость упаковки | Скорость распаковки | Размер сжатого файла, Байт | % от оригинала | Имя файла, тип |
memcpy | 4054 MB/s | 4102 MB/s | 6152192 | 100.00 | ooffice, exe |
csc 2016-10-13 -1 | 9.91 MB/s | 29 MB/s | 2301523 | 37.41 | ooffice, exe |
lzma 9.38 -0 | 13 MB/s | 31 MB/s | 2841578 | 46.19 | ooffice, exe |
lzlib 1.7 -0 | 14 MB/s | 24 MB/s | 2879489 | 46.80 | ooffice, exe |
xpack 2016-06-02 -1 | 60 MB/s | 342 MB/s | 3137960 | 51.01 | ooffice, exe |
libdeflate 0.6 -1 | 69 MB/s | 286 MB/s | 3187434 | 51.81 | ooffice, exe |
zlib 1.2.8 -1 | 40 MB/s | 151 MB/s | 3290532 | 53.49 | ooffice, exe |
brotli 0.5.2 -0 | 154 MB/s | 143 MB/s | 3539615 | 57.53 | ooffice, exe |
zstd 1.1.3 -1 | 166 MB/s | 487 MB/s | 3579899 | 58.19 | ooffice, exe |
broo 1.0 | 4.93 MB/s | 412 MB/s | 3757206 | 61.07 | ooffice, exe |
gipfeli 2016-07-13 | 163 MB/s | 354 MB/s | 3922276 | 63.75 | ooffice, exe |
lzsse2 2016-05-14 -0 | 15 MB/s | 1205 MB/s | 3995091 | 64.94 | ooffice, exe |
quicklz 1.5.0 -1 | 234 MB/s | 264 MB/s | 4013859 | 65.24 | ooffice, exe |
yalz77 2015-09-19 -1 | 35 MB/s | 398 MB/s | 4125570 | 67.06 | ooffice, exe |
yappy 2014-03-22 -0 | 82 MB/s | 1718 MB/s | 4235687 | 68.85 | ooffice, exe |
snappy 1.1.3 | 222 MB/s | 889 MB/s | 4271150 | 69.42 | ooffice, exe |
lz4 1.7.5 | 337 MB/s | 1671 MB/s | 4338918 | 70.53 | ooffice, exe |
lz5 2.0 -10 | 251 MB/s | 1997 MB/s | 4370070 | 71.03 | ooffice, exe |
Имя алгоритма | Скорость упаковки | Скорость распаковки | Размер сжатого файла, Байт | % от оригинала | Имя файла, тип |
memcpy | 4095 MB/s | 4073 MB/s | 10085684 | 100.00 | osdb, db |
csc 2016-10-13 -1 | 10 MB/s | 38 MB/s | 3317800 | 32.90 | osdb, db |
lzlib 1.7 -0 | 19 MB/s | 33 MB/s | 3345965 | 33.18 | osdb, db |
xpack 2016-06-02 -1 | 68 MB/s | 475 MB/s | 3752871 | 37.21 | osdb, db |
zstd 1.1.3 -1 | 194 MB/s | 585 MB/s | 3770566 | 37.39 | osdb, db |
libdeflate 0.6 -1 | 90 MB/s | 470 MB/s | 3896803 | 38.64 | osdb, db |
brotli 0.5.2 -0 | 214 MB/s | 224 MB/s | 3910502 | 38.77 | osdb, db |
lzma 9.38 -0 | 15 MB/s | 38 MB/s | 3988823 | 39.55 | osdb, db |
zlib 1.2.8 -1 | 56 MB/s | 211 MB/s | 4076391 | 40.42 | osdb, db |
broo 1.0 | 5.40 MB/s | 474 MB/s | 4147465 | 41.12 | osdb, db |
lzsse2 2016-05-14 -0 | 12 MB/s | 1724 MB/s | 4492551 | 44.54 | osdb, db |
gipfeli 2016-07-13 | 232 MB/s | 530 MB/s | 4517517 | 44.79 | osdb, db |
yalz77 2015-09-19 -1 | 51 MB/s | 596 MB/s | 4570193 | 45.31 | osdb, db |
lz4 1.7.5 | 359 MB/s | 1629 MB/s | 5256666 | 52.12 | osdb, db |
lz5 2.0 -10 | 278 MB/s | 1842 MB/s | 5286739 | 52.42 | osdb, db |
snappy 1.1.3 | 303 MB/s | 1110 MB/s | 5329321 | 52.84 | osdb, db |
quicklz 1.5.0 -1 | 277 MB/s | 330 MB/s | 5496443 | 54.50 | osdb, db |
yappy 2014-03-22 -0 | 70 MB/s | 1794 MB/s | 7515735 | 74.52 | osdb, db |
Имя алгоритма | Скорость упаковки | Скорость распаковки | Размер сжатого файла, Байт | % от оригинала | Имя файла, тип |
memcpy | 4123 MB/s | 4120 MB/s | 6627202 | 100.00 | reymont, pdf |
csc 2016-10-13 -1 | 15 MB/s | 47 MB/s | 1872324 | 28.25 | reymont, pdf |
lzma 9.38 -0 | 15 MB/s | 49 MB/s | 1921954 | 29.00 | reymont, pdf |
lzlib 1.7 -0 | 22 MB/s | 37 MB/s | 2082297 | 31.42 | reymont, pdf |
zstd 1.1.3 -1 | 157 MB/s | 486 MB/s | 2167385 | 32.70 | reymont, pdf |
libdeflate 0.6 -1 | 100 MB/s | 512 MB/s | 2206932 | 33.30 | reymont, pdf |
xpack 2016-06-02 -1 | 97 MB/s | 389 MB/s | 2279716 | 34.40 | reymont, pdf |
broo 1.0 | 5.10 MB/s | 423 MB/s | 2289019 | 34.54 | reymont, pdf |
brotli 0.5.2 -0 | 212 MB/s | 226 MB/s | 2360732 | 35.62 | reymont, pdf |
zlib 1.2.8 -1 | 59 MB/s | 213 MB/s | 2376430 | 35.86 | reymont, pdf |
gipfeli 2016-07-13 | 222 MB/s | 318 MB/s | 2644916 | 39.91 | reymont, pdf |
quicklz 1.5.0 -1 | 284 MB/s | 399 MB/s | 3003825 | 45.33 | reymont, pdf |
yalz77 2015-09-19 -1 | 76 MB/s | 347 MB/s | 3017083 | 45.53 | reymont, pdf |
lzsse2 2016-05-14 -0 | 16 MB/s | 1735 MB/s | 3039392 | 45.86 | reymont, pdf |
yappy 2014-03-22 -0 | 119 MB/s | 1252 MB/s | 3161344 | 47.70 | reymont, pdf |
lz4 1.7.5 | 303 MB/s | 1611 MB/s | 3181387 | 48.00 | reymont, pdf |
lz5 2.0 -10 | 265 MB/s | 1626 MB/s | 3184901 | 48.06 | reymont, pdf |
snappy 1.1.3 | 208 MB/s | 729 MB/s | 3233787 | 48.80 | reymont, pdf |
Имя алгоритма | Скорость упаковки | Скорость распаковки | Размер сжатого файла, Байт | % от оригинала | Имя файла, тип |
memcpy | 4048 MB/s | 4033 MB/s | 21606400 | 100.00 | samba, src |
csc 2016-10-13 -1 | 17 MB/s | 60 MB/s | 4407241 | 20.40 | samba, src |
lzlib 1.7 -0 | 26 MB/s | 46 MB/s | 5178819 | 23.97 | samba, src |
lzma 9.38 -0 | 21 MB/s | 59 MB/s | 5338935 | 24.71 | samba, src |
zstd 1.1.3 -1 | 257 MB/s | 715 MB/s | 5550637 | 25.69 | samba, src |
xpack 2016-06-02 -1 | 107 MB/s | 568 MB/s | 5669295 | 26.24 | samba, src |
libdeflate 0.6 -1 | 113 MB/s | 615 MB/s | 5922973 | 27.41 | samba, src |
brotli 0.5.2 -0 | 304 MB/s | 285 MB/s | 6084327 | 28.16 | samba, src |
broo 1.0 | 6.90 MB/s | 650 MB/s | 6186042 | 28.63 | samba, src |
zlib 1.2.8 -1 | 73 MB/s | 276 MB/s | 6329455 | 29.29 | samba, src |
gipfeli 2016-07-13 | 323 MB/s | 426 MB/s | 6810623 | 31.52 | samba, src |
yalz77 2015-09-19 -1 | 81 MB/s | 512 MB/s | 7098899 | 32.86 | samba, src |
quicklz 1.5.0 -1 | 366 MB/s | 497 MB/s | 7309452 | 33.83 | samba, src |
lzsse2 2016-05-14 -0 | 14 MB/s | 2144 MB/s | 7395737 | 34.23 | samba, src |
lz4 1.7.5 | 486 MB/s | 2035 MB/s | 7716839 | 35.72 | samba, src |
lz5 2.0 -10 | 398 MB/s | 2246 MB/s | 7927178 | 36.69 | samba, src |
snappy 1.1.3 | 353 MB/s | 1089 MB/s | 8008774 | 37.07 | samba, src |
yappy 2014-03-22 -0 | 123 MB/s | 1769 MB/s | 9183273 | 42.50 | samba, src |
Имя алгоритма | Скорость упаковки | Скорость распаковки | Размер сжатого файла, Байт | % от оригинала | Имя файла, тип |
memcpy | 4096 MB/s | 4114 MB/s | 7251944 | 100.00 | sao, bin |
lzma 9.38 -0 | 9.47 MB/s | 22 MB/s | 4923529 | 67.89 | sao, bin |
lzlib 1.7 -0 | 10 MB/s | 16 MB/s | 5005573 | 69.02 | sao, bin |
csc 2016-10-13 -1 | 5.69 MB/s | 17 MB/s | 5082846 | 70.09 | sao, bin |
xpack 2016-06-02 -1 | 47 MB/s | 312 MB/s | 5259606 | 72.53 | sao, bin |
libdeflate 0.6 -1 | 60 MB/s | 258 MB/s | 5494268 | 75.76 | sao, bin |
zlib 1.2.8 -1 | 31 MB/s | 158 MB/s | 5567774 | 76.78 | sao, bin |
brotli 0.5.2 -0 | 130 MB/s | 120 MB/s | 6019841 | 83.01 | sao, bin |
gipfeli 2016-07-13 | 146 MB/s | 422 MB/s | 6043361 | 83.33 | sao, bin |
broo 1.0 | 3.55 MB/s | 496 MB/s | 6086118 | 83.92 | sao, bin |
yappy 2014-03-22 -0 | 68 MB/s | 1709 MB/s | 6201752 | 85.52 | sao, bin |
zstd 1.1.3 -1 | 145 MB/s | 483 MB/s | 6254282 | 86.24 | sao, bin |
yalz77 2015-09-19 -1 | 26 MB/s | 576 MB/s | 6299030 | 86.86 | sao, bin |
snappy 1.1.3 | 212 MB/s | 969 MB/s | 6435266 | 88.74 | sao, bin |
quicklz 1.5.0 -1 | 229 MB/s | 222 MB/s | 6498301 | 89.61 | sao, bin |
lzsse2 2016-05-14 -0 | 15 MB/s | 941 MB/s | 6710542 | 92.53 | sao, bin |
lz4 1.7.5 | 337 MB/s | 2161 MB/s | 6790273 | 93.63 | sao, bin |
lz5 2.0 -10 | 236 MB/s | 2501 MB/s | 6792720 | 93.67 | sao, bin |
Имя алгоритма | Скорость упаковки | Скорость распаковки | Размер сжатого файла, Байт | % от оригинала | Имя файла, тип |
memcpy | 3970 MB/s | 4008 MB/s | 41458703 | 100.00 | webster, html |
csc 2016-10-13 -1 | 13 MB/s | 44 MB/s | 10360155 | 24.99 | webster, html |
lzma 9.38 -0 | 17 MB/s | 47 MB/s | 12704878 | 30.64 | webster, html |
lzlib 1.7 -0 | 22 MB/s | 38 MB/s | 12727596 | 30.70 | webster, html |
zstd 1.1.3 -1 | 169 MB/s | 531 MB/s | 13738284 | 33.14 | webster, html |
libdeflate 0.6 -1 | 99 MB/s | 524 MB/s | 13839192 | 33.38 | webster, html |
broo 1.0 | 5.42 MB/s | 266 MB/s | 13854195 | 33.42 | webster, html |
xpack 2016-06-02 -1 | 94 MB/s | 441 MB/s | 14006907 | 33.79 | webster, html |
brotli 0.5.2 -0 | 187 MB/s | 207 MB/s | 14559007 | 35.12 | webster, html |
zlib 1.2.8 -1 | 60 MB/s | 211 MB/s | 14991242 | 36.16 | webster, html |
gipfeli 2016-07-13 | 209 MB/s | 281 MB/s | 16152312 | 38.96 | webster, html |
lzsse2 2016-05-14 -0 | 14 MB/s | 1897 MB/s | 17459517 | 42.11 | webster, html |
quicklz 1.5.0 -1 | 276 MB/s | 369 MB/s | 18315816 | 44.18 | webster, html |
yalz77 2015-09-19 -1 | 62 MB/s | 315 MB/s | 18435248 | 44.47 | webster, html |
yappy 2014-03-22 -0 | 107 MB/s | 1378 MB/s | 19899610 | 48.00 | webster, html |
lz4 1.7.5 | 317 MB/s | 1593 MB/s | 20139988 | 48.58 | webster, html |
lz5 2.0 -10 | 260 MB/s | 1790 MB/s | 20153547 | 48.61 | webster, html |
snappy 1.1.3 | 214 MB/s | 765 MB/s | 20206466 | 48.74 | webster, html |
Имя алгоритма | Скорость упаковки | Скорость распаковки | Размер сжатого файла, Байт | % от оригинала | Имя файла, тип |
memcpy | 4118 MB/s | 4113 MB/s | 5345280 | 100.00 | xml |
csc 2016-10-13 -1 | 27 MB/s | 99 MB/s | 606763 | 11.35 | xml |
lzma 9.38 -0 | 34 MB/s | 108 MB/s | 691236 | 12.93 | xml |
zstd 1.1.3 -1 | 363 MB/s | 887 MB/s | 703151 | 13.15 | xml |
lzlib 1.7 -0 | 39 MB/s | 73 MB/s | 741537 | 13.87 | xml |
broo 1.0 | 7.91 MB/s | 1277 MB/s | 800526 | 14.98 | xml |
brotli 0.5.2 -0 | 409 MB/s | 451 MB/s | 905757 | 16.94 | xml |
libdeflate 0.6 -1 | 143 MB/s | 856 MB/s | 940409 | 17.59 | xml |
zlib 1.2.8 -1 | 104 MB/s | 344 MB/s | 965248 | 18.06 | xml |
xpack 2016-06-02 -1 | 137 MB/s | 634 MB/s | 1000008 | 18.71 | xml |
yalz77 2015-09-19 -1 | 157 MB/s | 666 MB/s | 1067378 | 19.97 | xml |
gipfeli 2016-07-13 | 406 MB/s | 527 MB/s | 1100536 | 20.59 | xml |
quicklz 1.5.0 -1 | 452 MB/s | 712 MB/s | 1124708 | 21.04 | xml |
lzsse2 2016-05-14 -0 | 18 MB/s | 2870 MB/s | 1201125 | 22.47 | xml |
lz4 1.7.5 | 617 MB/s | 1991 MB/s | 1227495 | 22.96 | xml |
lz5 2.0 -10 | 524 MB/s | 2231 MB/s | 1240098 | 23.20 | xml |
snappy 1.1.3 | 414 MB/s | 1196 MB/s | 1308374 | 24.48 | xml |
yappy 2014-03-22 -0 | 155 MB/s | 1915 MB/s | 1605459 | 30.04 | xml |
Имя алгоритма | Скорость упаковки | Скорость распаковки | Размер сжатого файла, Байт | % от оригинала | Имя файла, тип |
memcpy | 4023 MB/s | 4106 MB/s | 8474240 | 100.00 | x-ray, image |
csc 2016-10-13 -1 | 16 MB/s | 21 MB/s | 4049630 | 47.79 | x-ray, image |
lzlib 1.7 -0 | 9.85 MB/s | 18 MB/s | 5079274 | 59.94 | x-ray, image |
lzma 9.38 -0 | 10 MB/s | 23 MB/s | 5198894 | 61.35 | x-ray, image |
xpack 2016-06-02 -1 | 48 MB/s | 243 MB/s | 5863367 | 69.19 | x-ray, image |
libdeflate 0.6 -1 | 63 MB/s | 267 MB/s | 5999750 | 70.80 | x-ray, image |
zlib 1.2.8 -1 | 35 MB/s | 145 MB/s | 6033932 | 71.20 | x-ray, image |
brotli 0.5.2 -0 | 139 MB/s | 121 MB/s | 6600523 | 77.89 | x-ray, image |
zstd 1.1.3 -1 | 419 MB/s | 569 MB/s | 6772286 | 79.92 | x-ray, image |
lzsse2 2016-05-14 -0 | 17 MB/s | 883 MB/s | 7292876 | 86.06 | x-ray, image |
quicklz 1.5.0 -1 | 264 MB/s | 219 MB/s | 7440632 | 87.80 | x-ray, image |
gipfeli 2016-07-13 | 165 MB/s | 486 MB/s | 7641391 | 90.17 | x-ray, image |
broo 1.0 | 3.47 MB/s | 487 MB/s | 7702715 | 90.90 | x-ray, image |
yalz77 2015-09-19 -1 | 23 MB/s | 491 MB/s | 7933653 | 93.62 | x-ray, image |
snappy 1.1.3 | 446 MB/s | 1869 MB/s | 8209180 | 96.87 | x-ray, image |
yappy 2014-03-22 -0 | 59 MB/s | 3200 MB/s | 8328582 | 98.28 | x-ray, image |
lz4 1.7.5 | 852 MB/s | 3457 MB/s | 8390195 | 99.01 | x-ray, image |
lz5 2.0 -10 | 540 MB/s | 4126 MB/s | 8459685 | 99.83 | x-ray, image |
Следует заметить, что он все еще сыроват и еще есть достаточно работы для улучшения, но уже сейчас дает положительный эффект. Впереди еще часы генерирования и проверки гипотез, написание тестов и оптимизации кода.
Спасибо за внимание.
Автор: antoxa950
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/algoritmy/247008
Ссылки в тексте:
[1] сжатия без потерь: https://ru.wikipedia.org/wiki/%D0%A1%D0%B6%D0%B0%D1%82%D0%B8%D0%B5_%D0%B1%D0%B5%D0%B7_%D0%BF%D0%BE%D1%82%D0%B5%D1%80%D1%8C
[2] cсылка на GitHub: https://github.com/inikep/lzbench
[3] Источник: http://sun.aei.polsl.pl/~sdeor/index.php?page=silesia
[4] LZ77: https://ru.wikipedia.org/wiki/LZ77
[5] кодировании Хаффмана: https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%B4_%D0%A5%D0%B0%D1%84%D1%84%D0%BC%D0%B0%D0%BD%D0%B0
[6] DualCore Intel Core i3 550, 3200 MHz: http://ark.intel.com/products/48505/Intel-Core-i3-550-Processor-4M-Cache-3_20-GHz
[7] Источник: https://habrahabr.ru/post/322978/?utm_source=habrahabr&utm_medium=rss&utm_campaign=sandbox
Нажмите здесь для печати.