Рассматриваются методы сжатия данных, их классификация и основные подходы к уменьшению объема информации для хранения и передачи.
Алгоритмы сжатия данных представляют собой программные методы, направленные на уменьшение объёма исходной информации путём устранения избыточности, заложенной в структуре данных или их распределении. Сжатие достигается за счёт замены повторяющихся или часто встречающихся элементов более короткими кодами, что позволяет рациональнее использовать ресурсы хранения и передачи информации [1]. Простейший пример — замена повторяющихся слов в тексте ссылками на ранее встречавшиеся фрагменты с указанием их длины [1].
Основу сжатия составляет модель источника данных, или модель избыточности, которая описывает статистические свойства входного потока. Эта модель может быть статической, фиксированной для всего объёма данных, либо адаптивной, подстраивающейся динамически в процессе обработки. Адаптивные алгоритмы наиболее универсальны благодаря способности учитывать изменяющиеся характеристики данных во время сжатия и восстановления [1].
Алгоритмы делятся на две большие категории: сжатие без потерь и сжатие с потерями. Сжатие без потерь гарантирует полное восстановление исходного сообщения после декомпрессии, что критично для текстовых файлов, программного кода и других типов данных, где любое изменение недопустимо. При этом такие алгоритмы не уменьшают количество информации в сообщении, несмотря на уменьшение длины, что возможно, если распределение вероятностей на множестве сообщений не является равномерным [1].
С другой стороны, сжатие с потерями допускает некоторую степень искажения восстановленных данных. Такой подход широко используется в мультимедийных форматах, аудио, видео, изображениях, где небольшие дефекты восприятия несущественны при значительном сокращении объёма. Эффективность таких методов существенно выше, чем у решений без потерь, но требует параметризации допустимой погрешности [1].
Коэффициент сжатия \(k\) определяется как отношение объёма исходных несжатых данных \(S_o\) к объёму после сжатия \(S_c\):
\[
k = \frac{S_o}{S_c}
\]
Чем выше значение \(k\), тем эффективнее алгоритм. При \(k=1\) размер не меняется, алгоритм не даёт эффекта сокращения. Если же \(k < 1\), алгоритм увеличивает размер выходных данных по сравнению с исходными, что называется «вредной» работой. Такая ситуация возможна из-за ограничений теории информации: число всех возможных сообщений длины \(n\) бит равно \(2^n\), и невозможно однозначно сопоставить все исходные сообщения более коротким кодам без потерь [1].
Для ограничения нежелательного роста размера применяется приём добавления одного дополнительного бита: если итоговый объём меньше исходного, возвращаются сжатые данные плюс бит «1», иначе исходные данные плюс бит «0». Это обеспечивает следующее неравенство:
\[
k \geqslant \frac{S_o}{S_o + 1}
\]
Таким образом обеспечивается гарантированное ограничение роста размера даже в худшем случае [1].
Избыточность проявляется по-разному: текстовые данные содержат повторяющиеся слова и фразы; цифровые изображения характеризуются корреляцией соседних пикселей; аудиосигналы обладают спектральной избыточностью. Алгоритмы используют эти свойства для построения модели источника, статистического описания частоты появления элементов или предсказания следующего символа.
Энтропийное кодирование является классическим способом устранения избыточности частотного характера: часто встречающимся значениям присваиваются короткие коды, редким — длинные. Эти методы применимы только при наличии статистической неоднородности в данных [1].
Когда данные случайны или зашифрованы (белый шум), отсутствие закономерностей делает сжатие без потерь принципиально невозможным [1].
Невозможность универсального уменьшения размера для всех сообщений накладывает практические ограничения на проектирование универсальных компрессоров без потерь. Многие современные алгоритмы используют адаптивные модели для приближения реального распределения вероятностей, что повышает эффективность.
В то же время системные требования могут быть значительными: сложные адаптивные методы требуют больше оперативной памяти, постоянной памяти под код и константы, а также процессорного времени по сравнению с простыми статическими схемами. В ряде случаев выбор между эффективностью сжатия и затратами вычислительных ресурсов диктует прикладные задачи [1].
С точки зрения практического применения мультимедиа форматов компрессия с потерями обеспечивает значительно более высокие коэффициенты сокращения по сравнению со схемами без потерь. Это достигается за счёт удаления малозаметных или «ненужных» деталей сигнала.
Параметры качества выступают управляющими величинами для таких алгоритмов: от них зависит степень допустимых артефактов при восстановлении информации. Примеры включают JPEG (для изображений), MP3 (для аудио) или H.265 (для видео). Выбор параметров зависит от сценариев использования и требований к качеству конечного продукта [1].
Алгоритмы без потерь обязательны для критически важных приложений: символические данные (программы и их исходные тексты, двоичные массивы), жизненно важные данные (медицинская измерительная аппаратура, контрольные приборы летательных и космических аппаратов), а также промежуточные данные при многоэтапной обработке графических, звуковых и видеоданных [1].
С другой стороны, мультимедиа файлы допускают использование методов с потерями без серьёзных последствий для пользователя при внимательном подборе параметров компрессии [1].
Коэффициент \(k\) остаётся базовой метрикой оценки эффективности алгоритмов и систем доставки контента. Например, видеокодеки семейства H.265 обеспечивают коэффициенты порядка 10:1 по сравнению с несжатыми данными, что существенно снижает нагрузку на каналы передачи и требования к хранению [4].
На практике выбор конкретного метода определяется балансом между скоростью обработки, степенью сохранности качества и доступными ресурсами вычислительной системы [4].
[1] https://ru.wikipedia.org/wiki/%D0%A1%D0%B6%D0%B0%D1%82%D0%B8%D0%B5...
[2] https://vk.com/wall-51126445_156882
[3] https://repetitor.1c.ru/informatics/szhatie-dannykh-v-faylakh/
[4] https://shiryaev.io/blog/compression-ratio/
[5] https://www.reddit.com/r/explainlikeimfive/comments/1q2dip7/eli5_f...
Создаётся краткое изложение…