Сжатие без потерь
Сжатие данных без потерь (англ. lossless data compression) — класс алгоритмов сжатия данных (видео, аудио, графики, документов, представленных в цифровом виде, программ на языках программирования и в машинных кодах и многих других видов данных), при использовании которых закодированные данные однозначно могут быть восстановлены с точностью до бита, пикселя, вокселя и т.д. При этом оригинальные данные полностью восстанавливаются из сжатого состояния. Этот тип сжатия принципиально отличается от сжатия данных с потерями. Для каждого из типов цифровой информации, как правило, существуют свои оптимальные алгоритмы сжатия без потерь.
Сжатие данных без потерь используется во многих приложениях. Например, оно используется во всех файловых архиваторах. Оно также используется как компонент в сжатии с потерями.
Сжатие без потерь используется, когда важна идентичность сжатых данных оригиналу. Обычный пример — исполняемые файлы и исходный код. Некоторые графические файловые форматы (например PNG) используют только сжатие без потерь, тогда как другие (TIFF, FLIF или GIF) могут использовать сжатие как с потерями, так и без потерь.
Сжатие и комбинаторика
[править | править код]Легко доказывается теорема.
Для любого N > 0 нет алгоритма сжатия без потерь, который:
- Любой файл длиной не более N байт или оставляет той же длины, или уменьшает.
- Уменьшает некоторый файл длиной не более N хотя бы на один байт.
Доказательство. Не ограничивая общности, можно предположить, что уменьшился файл A длины ровно N. Обозначим алфавит как . Рассмотрим множество . В этом множестве исходных файлов, в то время как сжатых не более чем . Поэтому функция декомпрессии неоднозначна, противоречие. Теорема доказана.
Впрочем, данная теорема нисколько не бросает тень на сжатие без потерь. Дело в том, что любой алгоритм сжатия можно модифицировать так, чтобы он увеличивал размер не более чем на 1 бит: если алгоритм уменьшил файл, пишем «1», потом сжатую последовательность, если увеличил — пишем «0», затем исходную.
Так что несжимаемые фрагменты не приведут к бесконтрольному «раздуванию» архива. «Реальных» же файлов длины N намного меньше, чем (говорят, что данные имеют низкую информационную энтропию) — например, маловероятно, чтобы буквосочетание «щы» встретилось в осмысленном тексте, а в оцифрованном звуке уровень не может за один семпл прыгнуть от 0 до 100 %. К тому же за счёт специализации алгоритмов на некоторый тип данных (текст, графику, звук и т. д.) удаётся добиться высокой степени сжатия: так, применяющиеся в архиваторах универсальные алгоритмы сжимают звук примерно на треть (в 1,5 раза), в то время как FLAC — в 2,5 раза. Большинство специализированных алгоритмов малопригодны для файлов «чужих» типов: например, звуковые данные плохо сжимаются алгоритмом, рассчитанным на тексты.
Метод сжатия без потерь
[править | править код]В общих чертах смысл сжатия без потерь таков: в исходных данных находят какую-либо закономерность и с учётом этой закономерности генерируют вторую последовательность, которая полностью описывает исходную. Например, для кодирования двоичных последовательностей, в которых много нулей и мало единиц, мы можем использовать такую замену:
00 → 0 01 → 10 10 → 110 11 → 111
В таком случае шестнадцать битов
00 01 00 00 11 10 00 00
будут преобразованы в тринадцать битов
0 10 0 0 111 110 0 0
Такая подстановка является префиксным кодом, то есть обладает такой особенностью: если мы запишем сжатую строку без пробелов, мы всё равно сможем расставить в ней пробелы — а значит, восстановить исходную последовательность. Наиболее известным префиксным кодом является код Хаффмана.
Большинство алгоритмов сжатия без потерь работают в две стадии: на первой генерируется статистическая модель для входящих данных, вторая отображает входящие данные в битовом представлении, используя модель для получения «вероятностных» (то есть часто встречаемых) данных, которые используются чаще, чем «невероятностные».
Статистические модели алгоритмов для текста (или текстовых бинарных данных, таких как исполняемые файлы) включают:
- Преобразование Барроуза — Уилера (блочно-сортирующая пре-обработка, которая делает сжатие более эффективным)
- LZ77 и LZ78 (используется Deflate)
- LZW
Алгоритмы кодирования через генерирование битовых последовательностей:
- Алгоритм Хаффмана (также используется Deflate)
- Арифметическое кодирование
Методы сжатия без потерь
[править | править код]Список примеров в этой статье не основывается на авторитетных источниках, посвящённых непосредственно предмету статьи. |
Полный список смотрите в Категория:Сжатие данных
Многоцелевые
[править | править код]- Кодирование длин серий — простая схема, дающая хорошее сжатие данных, которые содержат много повторяющихся значений
- LZW — используется в gif и во многих других.
- Deflate — используется в gzip, усовершенствованной версии zip и как часть процесса сжатия PNG.
- LZMA — используется в 7-zip.
Сжатие аудио
[править | править код]- Apple Lossless — ALAC (Apple Lossless Audio Codec)
- Audio Lossless Coding — также известен как MPEG-4 ALS
- Direct Stream Transfer — DST
- Dolby TrueHD
- DTS-HD Master Audio
- Free Lossless Audio Codec — FLAC
- Meridian Lossless Packing — MLP
- Monkey's Audio — Monkey’s Audio APE
- OptimFROG
- RealPlayer — RealAudio Lossless
- Shorten — SHN
- TAK — (T)om’s verlustfreier (A)udio (K)ompressor (нем.)
- TTA — True Audio Lossless
- WavPack — WavPack lossless
- WMA Lossless — Windows Media Lossless
Сжатие графики
[править | править код]- ABO — Adaptive Binary Optimization
- AVIF — AV1 Image File Format (сжатие с/без потерь)
- BTPC
- CALIC
- CREW
- CTW
- DPCM
- GIF — (без потерь только для изображений, содержащих не более 256 цветов)
- JBIG2 — (с потерями или без ч/б изображений)
- Lossless JPEG — (расширение стандарта сжатия JPEG, обеспечивающее сжатие без потерь)
- JPEG-LS — (стандарт сжатия без потерь/почти без потерь)
- JPEG 2000 — (в режиме сжатия без потерь)
- LOCO-I
- MRP
- PGF — Progressive Graphics File (сжатие с/без потерь)
- PNG — Portable Network Graphics
- PWC
- TIFF — (исключая режимы сжатия с потерями[1])
- TMW
- Truevision TGA
- HD Photo — (включая метод сжатия без потерь)
- FLIF — Free Lossless Image Format
- JXL[2] - JPEG XL (сжатие с/без потерь) кодек с самым высоким сжатием без потерь.
Сжатие видео
[править | править код]- Animation codec
- CamStudio Video Codec
- CorePNG
- FFV1
- Huffyuv — ограничен YUY2 и RGB, не совместим с ffvhuff, оригинальный не обновлялся с 2002 года
- FFvhuff — улучшенный по сжатию huffyuv, поддерживает ещё YV12, обратно совместим с исходным кодеком
- Lagarith
- LCL
- MSU Lossless Video Codec
- Qbit Lossless Codec
- SheerVideo
- TSCC — TechSmith Screen Capture Codec
- Сжатие с использованием вейвлет
- Motion JPEG 2000
Сжатие текстов
[править | править код]- PPM — архиватор HA (автор Harry Hirvola), использующий алгоритм PPM, известен высокой степенью сжатия на текстовых файлах; по этому параметру он превосходил первые версии появившегося несколько лет спустя RAR. Поэтому популярные в конце 90-х годов компакт-диски наподобие «Библиотека в кармане» использовали именно HA.
Примеры алгоритмов
[править | править код]- Семейство алгоритмов Лемпеля-Зива
- RLE (Run-length encoding — Кодирование длин серий)
Примеры форматов и их реализаций
[править | править код]- универсальные — Zip, 7-Zip, RAR, GZip, PAQ и др.
- звук — FLAC (Free Lossless Audio Codec), Monkey's Audio (APE), TTA (True Audio), TTE, LA (LosslessAudio), RealAudio Lossless, WavPack и др.
- изображения — PNG, AVIF и др.
- видео — Huffyuv.
См. также
[править | править код]Примечания
[править | править код]- ↑ Спецификация TIFF v6 (англ.). Дата обращения: 18 декабря 2010. Архивировано из оригинала 3 июля 2012 года.
- ↑ JPEG XL
Ссылки
[править | править код]В статье не хватает ссылок на источники (см. рекомендации по поиску). |