Сжатие без потерь

Сжатие без потерь

Сжатие данных без потерь (англ. Lossless data compression) — метод сжатия данных: видео, аудио, графики, документов представленных в цифровом виде, при использовании которого закодированные данные могут быть восстановлены с точностью до бита. При этом оригинальные данные полностью восстанавливаются из сжатого состояния. Этот тип сжатия принципиально отличается от сжатия данных с потерями. Для каждого из типов цифровой информации, как правило, существуют свои оптимальные алгоритмы сжатия без потерь.

Сжатие данных без потерь используется во многих приложениях. Например, оно используется во всех файловых архиваторах. Оно также используется как компонент в сжатии с потерями.

Сжатие без потерь используется, когда важна идентичность сжатых данных оригиналу. Обычный пример — исполняемые файлы и исходный код. Некоторые графические файловые форматы, такие как PNG, используют только сжатие без потерь; тогда как другие (TIFF, MNG) или GIF могут использовать сжатие как с потерями, так и без.

Содержание

Сжатие и комбинаторика

Легко доказывается теорема.

Для любого N > 0 нет алгоритма сжатия без потерь, который:

  1. Любой файл длиной не более N байт или оставляет той же длины, или уменьшает.
  2. Существует файл длиной не более N, который уменьшается хотя бы на один байт.

Доказательство. Не ограничивая общности, можно предположить, что уменьшился файл A длины ровно N. Обозначим алфавит как \Sigma. Рассмотрим множество \Sigma^0 \cup \Sigma^1 \cup \ldots \cup \Sigma^{N-1} \cup \{ A \}. В этом множестве 256^0 + 256^1 + \ldots + 256^{N-1} + 1 исходных файлов, в то время как сжатых не более чем 256^0 + 256^1 + \ldots + 256^{N-1}. Поэтому функция декомпрессии неоднозначна, противоречие. Теорема доказана.

Впрочем, данная теорема нисколько не бросает тень на сжатие без потерь. Дело в том, что любой алгоритм сжатия можно модифицировать так, чтобы он увеличивал размер не более чем на 1 бит: если алгоритм уменьшил файл, пишем «1», потом сжатую последовательность, если увеличил — пишем «0», затем исходную. Пример того, как это реализуется на псевдо-C++, показан ниже:

bin_data_t __compess(bin_data_t input) // bin_data_t - тип данных, означающий произвольную последовательность бит переменной длины
{
     bin_data_t output = arch(input); // функция bin_data_t arch(bin_data_t input) реализует некий алгоритм сжатия данных
     if (output.size()<input.size()) // если алгоритм уменьшил размер данных, функция bin_data_t::size() возвращает размер данных
     {
          output.add_begin(1); // функция bin_data_t::add_begin(bool __bit__) добавляет бит, равный __bit__ в начало последовательности
          return output; // возвращаем сжатую последовательность с добавленной «1»
     }
     else // иначе (если алгоритм увеличил или не изменил размер данных)
     {
          input.add_begin(0); // добавляем «0» к исходной последовательности
          return input; // возвращаем исходный файл с добавленным «0»
     }
}

Так что несжимаемые фрагменты не приведут к бесконтрольному «раздуванию» архива. «Реальных» же файлов длины N намного меньше, чем 256^{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

Такая подстановка является префиксным кодом, то есть обладает такой особенностью: если мы запишем сжатую строку без пробелов, мы всё равно сможем расставить в ней пробелы — а значит, восстановить исходную последовательность. Наиболее известным префиксным кодом является код Хаффмана.

Большинство алгоритмов сжатия без потерь работают в две стадии: на первой генерируется статистическая модель для входящих данных, вторая отображает входящие данные в битовом представлении, используя модель для получения «вероятностных» (то есть часто встречаемых) данных, которые используются чаще, чем «невероятностные».

Статистические модели алгоритмов для текста (или текстовых бинарных данных, таких как исполняемые файлы) включают:

Алгоритмы кодирования через генерирование битовых последовательностей:

Методы сжатия без потерь

Полный список смотрите в Категория:Сжатие данных

Многоцелевые

  • Кодирование длин серий — простая схема, дающая хорошее сжатие данных, которые содержат много повторяющихся значений
  • LZW — используется в gif и во многих других.
  • Deflate — используется в gzip, усовершенствованной версии zip и как часть процесса сжатия PNG.
  • LZMA — используется в 7-zip.

Сжатие аудио

Сжатие графики

  • ABO — Adaptive Binary Optimization
  • 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
  • HD Photo — (включая метод сжатия без потерь)

Сжатие видео

Сжатие текстов

  • PPM — архиватор HA (автор Harry Hirvola), использующий алгоритм PPM, известен высокой степенью сжатия на текстовых файлах; по этому параметру он превосходил первые версии появившегося несколько лет спустя RAR. Поэтому популярные в конце 90-х годов компакт-диски наподобие «Библиотека в кармане» использовали именно HA.

Примеры алгоритмов

  • Семейство алгоритмов Лемпеля-Зива
  • RLE (Run-length encoding — Кодирование длин серий)

Примеры форматов и их реализаций

См. также

Примечания

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Нужно сделать НИР?

Полезное


Смотреть что такое "Сжатие без потерь" в других словарях:

  • сжатие без потерь — Метод обратимого сжатия, при котором обеспечивается декомпрессия и точное восстановление исходного сигнала теоретически без снижения качества или потери какой либо части информации. В основе большинства современных методов сжатия информации без… …   Справочник технического переводчика

  • Сжатие без потерь (математика) — Звук является простой волной, а цифровой сигнал является представлением этой волны. Это достигается запоминанием амплитуды аналогового сигнала множество раз в течение одной секунды. Например, в обыкновенном CD сигнал запоминается 44100 раз за… …   Википедия

  • Сжатие звука без потерь — В Википедии …   Википедия

  • Сжатие видео — (англ. Video compression)  уменьшение количества данных, используемых для представления видеопотока. Сжатие видео позволяет эффективно уменьшать поток, необходимый для передачи видео по каналам радиовещания, уменьшать пространство,… …   Википедия

  • Сжатие изображений — Сжатие изображений  применение алгоритмов сжатия данных к изображениям, хранящимся в цифровом виде. В результате сжатия уменьшается размер изображения, из за чего уменьшается время передачи изображения по сети и экономится пространство для… …   Википедия

  • Сжатие информации — Сжатие информации, компрессия, Шаблон:Англ. data compression  алгоритмическое преобразование данных (кодирование), при котором за счет уменьшения их избыточности уменьшается их обьём. Содержание 1 Принципы сжатия информации …   Википедия

  • адаптивное сжатие информации без потерь — — [Л.Г.Суменко. Англо русский словарь по информационным технологиям. М.: ГП ЦНИИС, 2003.] Тематики информационные технологии в целом EN adaptive lossless data compressionALDC …   Справочник технического переводчика

  • Сжатие аудиоданных — В Википедии …   Википедия

  • Сжатие данных — Возможно, эта статья содержит оригинальное исследование. Добавьте ссылки на источники, в противном случае она может быть выставлена на удаление. Дополнительные сведения могут быть на странице обсуждения. (26 мая 2012) …   Википедия

  • Сжатие данных с потерями — У этого термина существуют и другие значения, см. Сжатие. Сжатие данных с потерями  метод сжатия (компрессии) данных, при использовании которого распакованные данные отличаются от исходных, но степень отличия не является существенной с точки …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»