/
Author: Смирнов М. Ватолин Д. Ратушняк А. Юкин В.
Tags: компьютерные науки базы данных компьютерные сети компьютерные игры диалог мфи
Year: 2003
Text
Д. Ватолин, А. Ратушняк,
М. Смирнов, В. Юкин
Данная книга скачана
с сервера Ніір:/Ллллллг.сотргеззіоп.ги/,
авторами которого она и бьіла
написана. О замеченньїх ошибках
и опечатках лишите по адресу,
указанному в книге и на сайте.
М СЕ ТГ (0 А ОйО
(СЖА ІГ 0(1 3]
А А 00 00 М П
УСТРОЙСТВО АРХИВА ТОРОВ,
СЖАТИЕ ИЗОБРАЖЕНИЙ И ВИДЕО
МОСКВА "ДИАЛОГ-МИФИ" 2003
Книга написана коллективом 1ійр:/Лууууу.сотрге88Іоп.пі/
(7000+ файлов о сжатии)
УДК 681.3
ББК 32.97
В21
Ватолин Д., Ратушняк А., Смирнов М., Юкин В.
В21 Методьі сжатия данньїх. Устройство архиваторов, сжатие изо-
бражений и видео. - М.: ДИАЛОГ-МИФИ, 2003. - 384 с.
І8ВИ 5-86404-170-х
В книге описаньї основньїе классические и современньїе методи сжатия: ме-
тод Хаффмана, арифметическое кодирование, Ь277, Ь2^, РРМ, В^УТ, ЬРС
и т. д. Разбираются алгоритми, использующиеся в архиваторах 2ір, НА, СаЬАгс
(*.саЬ-файлн), КАВ, В2ІР2, КК. Отдельнмй раздел посвящен алгоритмам сжа-
тия изображений, использующимся в форматах РСХ, ТОА, СІР, ТІЕР, ССІТТ С-
3,1РЕС, 1РЕС2000. Рассмотрено фрактальное сжатие, взйвлет-сжатие и др. Из-
ложеньї принципи компрессии видеоданннх, дай обзор стандартов МРЕО,
МРЕС-2, МРЕС-4, Н.261 и Н.263.
Некоторие метода повишения сжатия на русском язике публикуются впервие.
Книга содержит большое количество примеров и упражиений и ориентирована на
студентов и преподавателей вузов. Материал книги позволяет самостоятельно не-
сколькими способами написать архиватор с характеристиками, превосходящими про-
грамми типа ркхір и ад. Ответьі на вопросьі для самоконтроля и исходнме тексти
програми можно найти на сайте ййр://сотрге85Іоп.8гарІіісоп.ги/.
Учебно-справочное издание
Ватолин Д., Ратушняк А., Смирнов М., Юкин В.
Методи сжатия даннмх. Устройство архиваторов, сжатие изображений и видео
Редактор О. А. Голубев
Корректор В. С. Кустов
Макет Н. В. Дмитриевой
Лицензия ЛР N 071568 от 25.12.97. Подписано в печать 22.09.2003
Формат 60x84/16. Бум. офс. Печать офс. Гарнитура Тайме.
Усл. печ. л. 22,32. Уч.-изд. л. 17. Тираж 3 000 зкз. Заказ 1Ш4
ЗАО “ДИАЛОГ-МИФИ", ООО “Д и М”
115409, Москва, ул. Москворечье, 31, корп. 2. Т.: 320-43-55, 320-43-77
Н(Ір://\у'л,'л'.Ьііех.пі/~сііаіов. Е-таі1: <йа1о£@Ьііех.ги
Подольская типография
142100, г. Подольск, Московская обл., ул. Кирова, 25
І8ВМ 5-86404-170-х
© Ватолин Д., Ратушняк А., Смирнов М.,
Юкин В., 2003
© Оригинал-макет, оформление обложки.
ЗАО “ДИАЛОГ-МИФИ”, 2003
КНрі/Луууху.сотрге^іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Предисловие
Основная задача, которая ставилась при написаний зтой книги, - изложить в од-
ном издании и достаточно единообразно современньїе методи сжатия данньїх. Тема
зта необьятная. Все разделм достойну отдельнмх книг, а развернутое описание ме-
тодов сжатия видеоданннх требует нескольких томов. Позтому в изложении основ-
ной упор делался на базовме идеи и концепции, используемьіе при сжатии. Нам би
хотелось, чтобм, изучив изложенньїе в книге методи, читатель мог понять принципи
работи большинства компрессоров и разобраться в методах сжатия данних по ис-
ходним текстам програми.
Многие в первую очередь зададут вопрос, где взять исходние тексти архивато-
ров? И чтобм степень сжатия била хорошая. Ото не проблема. Сейчас в любом дос-
таточно крупном городе России можно без труда приобрести компакт-диски с дист-
рибутивом Ьіпих. В составе исходнмх. текстов зтой операционной системи єсть
текст на язмке программирования Си, позволяющий работать со сжатнми дисками
файловой системи 1ЧТР8. Следовательно, можно посмотреть, как организовано сжа-
тие в операционннх системах типа УЛпсіоууз N7. Также в состав пракгически всех
дистрибутивов Ьіпих входят исходние тексти утилит сжатия дгір и Ьхір2, дающих
неплохие результати. Позтому исходние тексти обмчнмх програми сжатия, имею-
щих хорошие характеристики, ножно найти буквально на каждои лотке с СЬ-ВОМ
и на десятках тисяч сайтов с дистрибутивами Ьіпих в Интернете. Кроме того, єсть
сайти с исходнмми текстами зффективних и качественно реализованнмх архивато-
ров, которие пока менее известнм и распространенм. Напри мер, сайт проекта 7-2ір
1Шр.7/\у\у\у.7-2Ір.ог8. Примечательно, что такая ситуация складмвается не талько со
сравнительно простими универсальнмми архиваторами (10-200 Кб исходнмх тек-
стов), но и с такими сложнмми системами, как видеокодеки (400-4000 Кб текста).
Свободно доступим тексти кодеков вполне проммшленного качества, таких, как
ОрепВіуХ и Оп2 УРЗ, тексти конвертера УігіиаЮиЬ, поддерживающего несколько
форматов видео. Таким образом, у человека, имеющего доступ к Интернету и
умеющего искать (попробуйте начать с Ьйр://до8та.пеі/ЛаІаСотрге58Іоп), возникает
проблема не найти исходние тексти програми, а понять, как и почему зти програм-
уй работают. Именно в атом ми и питаємся помочь нашим читателям.
Мм старались не талько охватить все основнме подходьі, используемме при
сжатии разнмх типов данньїх, но и рассказать о современнмх специальнмх техниках
и модификациях алгоритмов, зачастую малоизвестнмх. Естественно, полнее всего
раскрмтьі теми, в области которьіх автори наиболее компетентньї. Позтому некото-
рме алгоритми рассмотренм глубоко и основательно, в то время как другие, также
достойнме, описанм конспективно или лишь упомянутм. Тем не менее главная цель
достигнута: изложение полупилось достаточно интереснмм, практическим и охва-
тмвающим ключевме методи сжатия данних различннх типов.
В тексте книги встречается большое количество русских имен. Для многих будет
неожиданностью, что очень много интересннх и зффективних компрессоров напи-
сано программистами, живущими в России и других странах СНГ. В частности, зто
КАК (автор Евгений Рошал), 7-2ір, ВІХ, БРА, 777 (Игорь Павлов), ВМР, РРМП,
РРМопзІг (Дмитрий Шкарин), ¥В8 (Вадим Юкин), АК.І, ЕК.1 (Александр Ратушняк),
РРМ1Ч (Максим Смирнов), РРМУ (Евгений Шелвин) и многие другие. Причем по
МФЮГгИИФИ
З
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.пі/
Мятодьі сжатия банних(7000+ файлов о сжатии)
даними тестирования, например, на сжатие исполняеммх файлов (ЬПр://сотрге58Іоп..
са/асІ-ехесиІзЬІе.йітІ) на 31.01.2002 в рейтинге, содержащем 154 архиватора, про-
граним наших соотечественников занимают 8 позиций в двадцатке лучших. Авто-
рам зтой книги искренне хотелось бм, чтобм наших архиваторов в таких рейтингах
становилось все больше.
Написание материалов книги и ответственность бмли распределеньї следующим
образом:
Д. Ватолинмм написан "Классический вариант алгоритма" в п. "Арифметическое
сжатие" (разд. 1, гл. 1), разд. 2 за исключением подразд. "Методи обхода плоско-
сте", разд. З, а также приложение 2;
А. Ратушняком - подрад. "Разделение мантисс и зкспонент", "Нумерующее ко-
дирование", "Векторное квантование", "Методи обхода плоскосте", гл. 2 разд. 1,
гл. 6 а также части Введення "Определения. Аббревиатурм и классификации мето-
дов сжатия", "Замечание о методах, алгоритмах и програм мах";
М. Смирновмм - гл. З и 4 разд.1, подразд. "Препроцессинг текстов" (гл. 7) и
приложение 1;
В. Юкинмм - гл. 5, "Интервальное кодирование" в подразд. "Арифметическое сжа-
тие" (гл. 1 разд. 1), подразд. "Препроцессинг нетекстовмх денних" и "Вмбор метода
сжатея" гл. 7.
Часть введення "Сравнение алгоритмов по степени сжатия" написана совместно
А. Ратушняком и М. Смирновмм.
В заключение ми хотим виразить свою благодарность Дмитрию Шкарину, Евге-
нию Шелвину, Александру Жиркову, Владимиру Вежневцу, Алексею Игнатенко: их
конструктивная критика, интереснме дополнения, замечания и советьі способство-
вали существенному улучшению качества книги. Также ми благодарнм лаборатории
компьютерной графики ВМиК МГУ и персонально Юрию Матвеевичу Баяковскому
и Евгению Викторовичу Шикину за организационную и техническую поддержку.
Ми будем признательнм читателям за их отзнвм и критические замечания, от-
правленнме непосредственно нам по злектронной почте по адресу сотрге88Іоп@
§гарііісоп.ги.
Исходнме тексти програми, ответм на контрольнме вопросм и упражнения ви
сможете получить по адресу Иир://сотрге88Іоп. егарЬісоп.ги/.
Дмитрий Ватолин, Александр Ратушняк,
Максим Смирное, Вадим Юкин
Москва - Новосибирск - Санкт-Петербург, 2002 г.
4
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
ВВЕДЕНИЕ
Обзор тем
Структура книги отвечает принятой авторами классификации методов
сжатия данньїх и определенньїм традициям, сложившимся в литературе по
сжатию.
В 1 разд. - "Методи сжатия без потерь" описана основньїе подходм,
применяющиеся при кодировании источников без памяти, источников типа
"аналоговий сигнал" и источников с памятью, а также методи предобработ-
ки типичних данньїх, обеспечивающие улучшение сжатия для распростра-
ненних алгоритмов.
В виду особой практической и теоретической важности, а также распро-
страненности универсальние методи кодирования источников с памятью
били рассмотренм в соответствующих отдельних главах: "Словарнме ме-
тоди сжатия данньїх", "Методи контекстного моделирования", "Преобразо-
вание Барроуза-Уилера". Описана не только базовие варианта алгоритмов,
но и множество специфических техник улучшения сжатия, в том числе ма-
лоизвестних. Материали зтих глав могут бьггь полезнм не только для неис-
кушенного читателя, но и для специалиста.
Ввиду актуальности и определенной новизни излагаемнх приемов била
написана гл. 7 - "Предварительная обработка данньїх".
В разд. 2 - "Методи сжатия изображений" обьяснена специфика кодиро-
вания растрових изображений, описана основнме классические и совре-
менньїе алгоритми сжатия изображений без потерь и с потерями. В част-
ности, изложени особенности сравнительно нового алгоритме ЗРЕО-2000.
В разд. З - "Метода сжатия видео" указана особенности задач компрес-
сии видеоданнах, изложени базовне идеи, лежащие в основе алгоритмов
сжатия видео, дан обзор ряда известнмх стандартов, в частности МРЕО-4.
Необьятность теми и необходимость удержання размера книги в розумних
пределах определили конспективний характер зтого раздела. Интересую-
щиеся читатели могут продолжить изучение вопросов сжатия видеоданнах,
руководствуясь изложеннами в разделе базовими принципами, в чем им
поможет предложеннай список литератури.
2ЙШЗГ(ПИ0И
5
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.пі/
Методи сжатия данньїх <7000+ файлов о сжатии)
Определения, аббревиатурьі
и классификации методо в сжатия
Базовьіе определения
Бит- зто "атом" цифровой информации: переменная, которая может
принимать ровно два различньїх значення:
"1" (единица, да, истина, существует);
"0" (нуль, нет, ложь, не существует).
Любая система, которую можно перевести в одно из двух различньїх за-
даваеммх состояний и удержать в нем в течение требуемого промежутка
времени, может бьіть использована для хранения 1 бита информации.
Емкость для хранения бита можно представлять себе как небольшой
"ящик" где-то в пространстве-времени (в микросхеме, на магнитном/опти-
ческом диске, линии связи) с двумя возможньїми состояниями: полньїй - " 1"
и пустой - "0".
Данньїе - информация в цифровом виде.
Обьем данньїх измеряется в битах, но может бьггь и рациональньїм чис-
лом, а не только цельїм.
К-битовьій злемент - совокупность К битов - имеет 2К возможньїх зна-
чений-состояний. Большинство источников цифровой информации порож-
дает злементьі одного размер'а К. А в большинстве остальньїх случаев -
злементм нескольких размеров: Кі, К2, К3... (например, 8, 16 и 32).
Байт - зто 8-битовмй злемент: совокупность 8 битов.
Входная последовательность в общем случае бесконечна, но ее злемен-
тьі обязательно пронумерована, позтому имеют смисл понятия "предьіду-
щие" и "последующие" злементм. В случае многомерньїх данньїх єсть мно-
го способов создания последовательности из входного множества.
Блок - конечная последовательность цифровой информации.
Лоток - последовательность с неизвестнмми границами: данньїе посту-
пают маленькими блоками, и нужно обрабатьівать их сразу, не накапливая.
Блок - последовательность с произвольнмм доступом, а поток - с последо-
вательньїм.
Сжатием блока назьівается такое его описание, при котором создавае-
мьій сжатьій блок содержит меньше битов, чем исходньїй, но по нему воз-
можно однозначнеє восстановление каждого бита исходного блока. Обрат-
ньій процесе, восстановление по описанню, назьівается разжатием.
Используют и такне парьі терминов: компрессия/декомпрессия, кодиро-
вание/декодирование, упаковка/распаковка.
6
ййр:/Лууууу.сошрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Вввдение
Под просто сжатием будем далее понимать сжатие без потерь (Іоззіезз
сотргеззіоп).
Сжатие с потерями (Іоззу сотргеззіоп) - зто два разньїх процесса:
1) вьіделение сохраняемой части информации с помощью модели, зави-
сящей от цели сжатия и особенностей источника и приемника ин-
формации;
2) собственно сжатие, без потерь.
При измерении физических параметров (яркость, частота, амплитуда,
сила тока и т. д.) неточности неизбежньї, позтому "округление" вполне до-
пустимо. С другой сторони, приемлемость сжатия изображения и звука со
значительними потерями обумовлена особенностями восприятия такой
информации органами чувств человека. Бели же предполагаетея компью-
терная обработка изображения или звука, то требования к потерям гораздо
более жесткие.
Конечную последовательность битов назовем кодом1, а количество би-
тов в коде - длиной кода.
Конечную последовательность злементов назовем словом, а количество
злементов в слове - длиной слова. Иногда используются синоними строка
и фраза. В общем случае слово построено из К-битовьіх злементов, а не
8-битовнх. Таким образом, код - зто слово из 1-битовнх злементов.
Например, в блоке из 14 злементов "кинчотсихиннад" одно слово дли-
ной 14 злементов, два слова длиной 13 злементов, и т. д., 13 слов длиной 2 и
14 слов длиной 1. Аналогично в блоке из семи битов "0100110" один код
длиной 7 бит, два кода длиной 6 бит, и т. д., семь кодов длиной 1 бит.
Символ - зто "атом" некоторого язика (например, букви, цифри, ноти,
символи шахматннх фигур, картонних мастей). Во многих случаях под
символом имеют в виду К-битовий злемент (обично байт), однако злемен-
ти мультимедийннх данньїх все-таки не стоит називать символами: они со-
держат количественную, а не качественную информацию.
Качественньїми можно називать даннне, содержащие злементи-
указатели на символи внутри таблиц или указатели на ветви алгоритма (и
таким образом "привязанние" к некоторой структуро: таблице, списку, ал-
горитму и т. п.). А количественньїми - множества злементов, являющиеся
записами значений каких-либо величин.
А8СІІ (Атегісап Зіапбагб Собе Гог ІпГоппаііоп ІпіегсЬапее - Американ-
ский стандартний код для обмена информацией) каждому значенню байта
1 В теории информации кодом називаєшся совокупность всех битовьіх последова-
тельностей, применяемьіх для представлених порождаемьіх источником символов. Ав-
тори сознательно пошли на использование слова "код " в обиденном значений.
7
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.пі/
Методи сжатия данньїх (7000+ файлов о сжатии)
ставит в соответствие символ. Но чтобьі построить однозначнеє соответст-
вие для всех необходимих символов из множества национальньїх алфавитов
народов мира, требуетея больше: по крайней мере 16 бит на символ (что и
обеспечивает стандарт ІІпісосІе).
Множество всех различннх символов, порождаемьіх некоторнм источ-
ником, назьіваетея алфавитом, а количество символов в атом множестве -
размером алфавита. Источники данньїх порождают только злементн, но
физические источники информации - символи или злементи.
Размер алфавита таблицьі А8СІІ равен 2*=256, а ІІпісобе- 216=65 536.
Зто две самне распространенньїе таблици символов.
Источник данньїх порождает поток либо содержит блок данних. Вероят-
ности порождения злементов определяютея состоянием источника. У источ-
ника данньїх без памяти состояние одно, у источника с памятью - множе-
ство состояний, и вероятности перехода из одного состояния в другеє зави-
сят от совокупности предмдущих и последующих (еще не реализованньїх, в
случае потока) состояний.
Можно говорить, что источник без памяти порождает "злементьі", а ис-
точник данньїх с памятью - "слова", поскольку во втором случае
учет значений соседних злементов (контекста) улучшает сжатие, т. е.
имеет смисл трактовать данние как слова;
поток данньїх внглядит как поток слов.
В первом же случае имеем дело с перестановкой злементов и рассматри-
вать данние как слова нет смисла.
Кавнчки показивают, что зто условние названия способов интерпрета-
ции входньїх данних: "слова", "злементьі", "бити".
По традиции бинарний источник без памяти називают обьічно источ-
ником Бернулли, а важнейшим частним случаем источника данньїх с па-
мятью являетея источник Маркова (N-10 порядка): состояние на і-м шаге
зависит от состояний на N предидущих шагах: М, і-2,..., і-М
Третья важнейшая применяемая при сжатии данньїх математическая мо-
дель - аналоговий сигнал:
данние считаются количественннми;
источник данньїх считается источником Маркова 1-го порядка.
Если йспользовать модель "аналоговий сигнал" с N > 1, то при малих N
зффективность сжатия неизменна или незначительно лучше, но метод су-
щественно сложнее, а при дальнейшем увеличении N зффективность резко
уменьшаетея.
Зффективность сжатия учитьівает не только степень сжатия (отноше-
ние длиньї неежатнх данньїх к длине соответствующих им сжатьіх данньїх),
8
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Введоние
но и скорости сжатия и разжатия. Часто пользуются обратной к степени
сжатия величиной - козффициентом сжатия, определяемьім как отноше-
ние длиньї сжатьіх данньїх к длине соответствующих им несжатьіх.
Еще две важньїе характеристики алгоритме сжатия - обьемьі памяти, не-
обходимьіе для сжатия и для разжатия (для хранения данньїх, создаваемьіх
и/или используеммх алгоритмом).
Названия методов
СМ (Сопіехі Мойеіііщ) - контекстное моделирование.
ОМС (Оупашіс Магкоу Сошрге$$іоп) - динамическое марковское сжа-
тие (является частньїм случаем СМ).
РРМ (РгеШсНоп Ьу Рагйаі МаісЬ) - предсказание по частинному сов-
падению (является частньїм случаем СМ).
Ь2-методьі - метода Зива - Лемпела, в том числе Ь277,1,278, Ь2Н и
Ь2№.
РВ8 (Рагаїїеі ВІоскя 8огйп§) - сортировка параллельньїх блоков.
8Т (8ог( ТгапяГогшайоп) - частичное сортирующее преобразование
(является частньїм случаем РВ8).
В\¥Т (Виггозуз-АУІіееІег ТгапяГогш) - преобразование Барроуза - Уиле-
ра (является частньїм случаем 8Т).
ВЬЕ (Кип Ьеп§іЬ Епсосііп^) - кодирование длин повторов.
НІІГЕ (НиГГшап Сосііпз) - кодирование по методу Хаффмана.
8ЕМ (8ерагаіе Ехропепія ап 4 Мапй$$а$) - разделение зкспонент и ман-
тисо (представление цельїх чисел).
ІІМС (ІІпіуегзаІ Сосііпз) - универсальное кодирование (является част-
ньїм случаем 8ЕМ).
АНІС (АгііЬтейс Сойіп^) - арифметическое кодирование.
ВС (Кап£е Со<1іп£) - интервальное кодирование (вариант арифметиче-
ского).
ОС (Окіапсе Сосішз) - кодирование расстояний.
ІГ (ІПУЄГ5ІОП Егециепсек) - "обратньїе частоти" (вариант ОС).
МТГ (Моує То ГгопІ) - "сдвиг к вершине", "перемещение стопки книг".
ЕГШС (Епигаегайуе Сойіп^) - нумерующее кодирование.
БТ (Еоигіег ТгапяГогш) - преобразование Фурье.
ОСТ (Оіясгеіе Сояіпе Тгапзґогт) - дискретное Косинусное Преобразо-
вание, ДКП (является частньїм случаем РТ).
О\УТ (Оізсгеіе УУауеІеІ Тгапяїогш) - дискретное взйвлетное преобразо-
вание, двп.
ЬРС (Ьіпеаг Ргедісіїоп Содіп§) - линейно-предсказьівающее кодирова-
ние, ЛПК (к нему относятся дельта-кодирование, АОРСМ, СЕЬР и МЕТР).
9
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.пі/
Мвтодш сжатия данньїх(7000+ файлов о сжатии)
8С (8иЬЬап<1 Сосііпз) - субполосное кодирование.
¥(} (Уесіог риапйгаііоп) - векторное квантование.
Карта групп методов сжатия
Статистические Преобразующие
Поточньїе Блочньїе"1 " Поточньїе Блочньїе
Для "слов", модель "Источник с памятью" СМ, ОМС, все РРМ СМВ2, рге- сопбіііопед РРМ2 Все Ь2, в т.ч. Ь2Н и Ь25У 8Т, в т, ч. ВАУТ
Для "злементов", модели "Источник без памяти" или "Анало- говий сигнал" Адаптив- ний НІІРР Статиче- ский НЦРР 8ЕМ, Ур, МТР, ОС, 8С, О\УТ ОСТ, ЕТ, фрак- тальньїе методи
Для "злементов" или "битов" Адаптив- ний АКІС Статиче- ский АКІС КЬЕ, ЬРС, в т.ч. дельта РВ8, е>шс
Каждая группа (ветвь, семейство) содержит множество методов. Исклю-
чением является блочно-ориентированний СМ - зто относительно мало ис-
следованная область. Авторам не известни другие практические реализа-
ции, кроме компрессоров СМ Булата Зиганшина и "рге-сопсііііопесі РРМ2"
Чарльза Блума.
Статистические методьі оперируют величинами вероятностей злементов
напрямую (или величинами относительннх частот1, что по сути то же са-
мое), а преобразующие используют статистические свойства данньїх опо-
средованно. Есть и методи сметанного типа, но их меньше.
Все поточнне методи применими и к блокам, но обратное неверно.
Блочньїе методи неприменими к потокам, поскольку не могут начать ви-
полнение, пока не задана длина блока, заполненного данними, подлежащи-
ми сжатию.
В первой строке "карти групп" - методи для источников с памятью, по-
рождаемие ими данние внгодно трактовать как слова. Однако методи для
потоков "слов" оперируют, как правило, злементами заданного размера, а не
словами, поскольку разбиение потока злементов на слова заранее в общем
случае неизвестно.
Во второй строке - методи для источников без памяти и аналогових
сигналов. Зти данние при сжатии невнгодно рассматривать как слова.
1 Относительная частота злемента X в блоке 2 - зто количество злементов
со значением X, деленное на количество всех злементов в блоке 2: геї_[гед(Х) -
=соипі(Х)/Іеп§ік(2).
10
Шір:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Введення
Не все методи для потоков й-битовьіх "злементов" применимьі к "би-
там" (только те, которьіе в третьей строке "карти").
Очевидно, что невнгодно применять методи для "злементов" - к "сло-
вам" или "битам". Менее очевидно, что невнгодно и обратное: применять
методи для потоков "слов" к данним без значимих вероятностньїх взаимо-
связей, к "злементам" или "битам".
Базовьіе стратегии сжатия
Базових стратегии сжатия три:
1. Преобразование потока ("Скользящее окно-словарь"). Описание посту-
пающих данних через уже обработанние. Сюда входят 1,2-методм для
потоков "слов", т. е. когда комбинации поступающих злементов предска-
зуеми по уже обработанним комбинациям. Преобразование по таблице,
ВЬЕ, ЬРС, ОС, МТР, Ур, 8ЕМ, БиЬЬапб Собіп§, Оізсгеіе АУауеІеі
ТгапзГопп - для потоков "злементов", т. е. когда не имеет смисла рас-
сматривать комбинации длиной два и более злемента или запоминать
зти комбинации, как в случае Ьіпеаг Ргегіісііоп Собіщ».
Никаких вероятностей, в отличие от второй стратегии, не вичисляет-
ся. В результате преобразования может бить сформировано несколько
потоков. Даже если суммарннй обьем потоков увеличивается, их струк-
тура улучшается и последующее сжатие можно осуществить проще, би-
стреє и лучпіе.
2. Статистическая стратегия.
а) Адаптивная (поточная). Внчисление вероятностей для поступаю-
щих данньїх на оснований статистики по уже обработанним данним.
Кодирование с использованием отих вьічисленних вероятностей. Семей-
ство РРМ-методов - для потоков "слов", адаптивнне варианти методов
Хаффмана и Шеннона - Фано, арифметического кодирования - для по-
токов "злементов". В отличие от первого случая, давно собранная стати-
стика имеет тот же вес, что и недавняя, если метод не борется с зтим
специально, что гораздо сложнее, чем в случае Ь2. Кроме того, считают-
ся вероятними все комбинации, даже те, которне еще не встречались в
потоке и скореє всего никогда не встретятся.
б) Блочная. Отдельно кодируется и добавляется к сжатому блоку его
статистика. Статические варианти методов Хаффмана, Шеннона - Фано
и арифметического кодирования - для потоков "злементов". Статиче-
ское СМ - для "слов".
3. Преобразование блока. Входящие данние разбиваются на блоки, кото-
рьіе затем трансформируются целиком, а в случае блока однородннх
данних лучше брать весь блок, которьій требуется сжать. Зто методи
11
Книга написана коллективом 1Шр:/Лууууу.сотрге88Іоп.ги/
Матодьі сжатия данньїх(7000+ файлов о сжатии)
сортировки блоков ("В1оск8огііп§"-методи: 8Т, ВХУТ, РВ8), а также
Роигіег Тгапзїопп, Візсгеіе Созіпе ТгапзГогт, фрактальньїе преобразова-
ния, Епитегаііуе Согііп^.
Как и при первой стратегии, в результате могут формироваться не-
сколько блоков, а не один. Опять же, даже если суммарная длина блоков
не уменьшается, йх структура значительно улучшается и последующее
сжатие происходит проще, бистреє и лучше.
Резюмируя одним предложением: метод сжатия может бьггь или стати-
стическим, или трансформирующим и обрабативать данньїе либо поточно,
либо блоками, причем
чем больше и однороднее данньїе и память1, тем зффективнее блочньїе
методи;
чем меньше и неоднороднее данньїе и память, тем зффективнее поточ-
ньіе методи;
чем сложнее источник, тем сильнеє улучшит сжатие оптимальная преоб-
разование;
чем проще источник, тем зффективнее прямолинейное статистическое
решение (математические модели "источник Бернулли" и "источник
Маркова").
Сравнение алгоритмов по степени
сжатия
Решение задачи сравнения алгоритмов по достигаемой ими степени сжа-
тия требует введення некоторого критерия, так как нельзя сравнивать про-
изводительность реализаций на каком-то абстрактном файле. Следует осто-
рожно относиться к теоретическим оденкам, так как они вичисляются с
точностью до констант. Величини втих констант на пракгике могут коле-
баться в очень больших пределах, особенно при сжатии небольших файлов.
В 1989 г. группа исследователей предложила оценивать козффициент
сжатия с помощью набора файлов, получившего название Са1§агу Сотргез-
зіоп Согриз2 (Са1§СС). Набор состоит из 14 файлов, большая часть которьіх
представляет собой тексти на английском язнке или язиках программиро-
вания. Позже к зтим 14 файлам били добавленьї еще 4 текста на английском
1 Однородной назовем память, вьіделенную одним блоком: никаких особенно-
стей при обращении к ней нет. Если память не однородна, доступ по произвольному
адресу (гапсіот ассезз) замедляется, как правило, в несколько раз.
2 Веіі Т. С., 1¥іііеп І. Н. Сіеагу, 1 О. Мосіеііп^/ог іехі сотргеззіоп НАСМ Сотриіег
Еипеу. 1989. Уоі. 24, № 4. Р. 555-591.
12
Ьіірї/Лууууу.сошргеззіоп.пі/ (7000+ файлов, 850Мб о сжатии)
Введемив
ізьіке. Тем не менее обнчно оценка производится на наборе из 14 файлов
назовем такой набор стандартним СаІ^СС), а не из 18 (назовем его полньїм
ЗаІдСС).
'а последние 10 лет Са1§СС сьіграл значительную роль в развитии мето-
дов сжатия данньїх без потерь. С одной сторони, он обеспечил исследовате-
дей и разработчиков простим критерием качества алгоритма с точки зрения
тозффициента сжатия, но, с другой сторони, его использование привело к
широкому распространению порочной практики, когда универсальннй ал-
горитм сжатия "настраивался" под файли набора на зтапе разработки и на-
стройки. В итоге прилагательное "универсальннй" можно било применять к
”акому алгоритму лишь с натяжкой. Хотя скореє всего даже "настроенний"
алгоритм будет работать достаточно хорошо в реальних условиях, посколь-
;у, несмотря на преобладание текстовой информации, в СаІдСС входят
вайли различннх типов данних.
В таблице приведено описание файлов, составляющих стандартний
'а1§СС.
Файл Размер, байт Описание
ВіЬ 111261 Библиографический список в формате ЦМІХ "геГег", А8СІІ
Воокі 768771 Художественная книга: Т.НапІу. "Раг йот Йіе тасісііпв сгоаусГ, неформатированньїй текст А8СІІ. Содержит большое количество ОСК-опечаток (не- правильно распознанньїх символов)
Воок2 610856 Техническая книга: ХУіІіеп. "Ргіпсіріез оГ сотриіег зреесЬ", формат ІЖІХ "ігой", А8СІІ
Оео 102400 Геофизические данние, 32-битовьіе числа
Медуз 377109 Набор сообщений злектронньїх конференций Цзепеї, формат А8СІІ
ОЬІІ 21504 Обьектнмй файл для ЗВМ типа ¥АХ
ОЬ)2 246814 Обьектньїй файл для ПК Арріе МасіпіозЬ
Рарегі 53161 Техническая статья: АУіМеп, Меаі, Сіеагу. "АгіїЬтеІіс со<1іп£ Гог сіаіа сотргеззіоп", формат ЦМІХ "ігой", А8СІІ
Рарег2 82199 Техническая статья: \УіПеп. "Сотриіег (іп)зесигііу", формат ЦМІХ "ігой", А8СІІ
Ріс 513216 Факсимильная двухцветная картинка, 1728x2376 то- чек, представляет собой две страницьі технической книги на французском язмке, отсканированньїе с раз- решением 200 точек на дюйм
Рго§с 39611 Программа на язьіке Си, А8С1І
РГО£І 71646 Программа на язьіке Лисп, А8СІІ
13
Книга написана коллективом йіір:/Лууууу.сошрге88Іоп.пі/
Методи сжатия данньїх(7000+ файлов о сжатии)
Файл Размер, байт ОпИСа.
Ргойр 49379 Програмна на язьіке Паскаль,
Тгапз 93695 Расшифровка терминальной сес ра "ЕМАС8", А8СП
Размер стандартного Са1§СС составляет 3,141,622 ба.,
занимает 3,251,493 байт.
Единственная кодировка текстовой информации в Саіу-
позтому все символи - 8-битовме. Нет ни одного файла с
символами или символами в другой кодировке.
Очевидно, что набор серьезно устарел. Типи входящих
отнюдь не являются типами файлов, обично подвергаеми-
временншм пользователем ПК. Позтому с учетом данного
режения о настройке некоторьіх алгоритмов под СаІдСС к г
сравнения на зтом наборе нужно относиться осторожно. Са1§СС і>_
лииіь часть правдьі.
Среди конкурентов Са1§СС отметим:
СапіегЬигу Сотргеззіоп Согриз (СапіСС), состоящнй из дву> -
стандартного набора "Зіапсіагд Зеї" (11 файлов общей длиной 2
байт) и набора больших файлов "Ьаг^е Зеї" (4 файла, 16,005,61?
предложен той же группой исследователей, что и Са1§СС, в кач
альтернативи морально устаревшему Са1§СС;
набори файлов из Агсіііує Сотрагізоп Тезі (АСТ): 3 текстових фа.
З исполнимих, 2 звукових и 8 полноцветньїх 24-битовнх изображеі...
а также вишеописаннне Са1§СС полний, СапіСС стандартний, и пі-
следний (седьмой) набор - зто демо-версия игри \Уогтз2 (159 файлог
общим размером 17 Мб);
файли из Сотргеззогз Сотрагізоп Тезі Вадима Юкина (У¥ССТ, 8 фай
лов разних типов);
набори файлов из тестов Агі ОГЬоззІезз Паіа Сотргеззіоп (АКТезі):
♦ 627 полноцветньїх изображений, 2066 Мб в 12 наборах;
♦ 1231 текстовий файл общей длиной 500 Мб в 6 наборах, в том числг
СапіСС "Еаг^е Зеї" и 663 русских текста;
♦ 5960 разнородньїх файлов, 382 Мб в 10 наборах.
Среди стандартних наборов тестових изображений наиболее известнь
четьіре: ІРЕСг Зеї, Р1ЧС Зеї, У/аіегІоо Іта^ез и Кобак Тгие Соїог 1та§ез.
Все тестовие файли хранятся на и ЕТР-серверах Интернета, то^
ниє ссилки на них - в описаннях тестов:
АСТ: йіір://сотргез8Іоп.са
АКТезі: Ьіір://§о.іо/агіезі, Ьіір://агізі.паго<1.ги
14
КНрі/Луууху.сотрге^іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Введвние
Са!§СС: ЬіГр://1іпк8.и\уаіег1оо.са/са1§агу.согри8.Ьіт1
СапіСС: Ьйр://согри8.сапіегЬигу.ас.П2
УУССТ: ЬПр:// сотрге88Іоп.§гарЬісоп.ги./уЬ8
Замечание о методах, алгоритмах
и программах
В ЧЕМ РАЗНИЦА МЕЖДУ МЕТОДОМ И АЛГОРИТМОМ?
Метод - зто совокупность действий, а алгоритм - конкретная последо-
вательность действий.
1. Алгоритм более подробен, чем метод. Иллюстрация алгоритма - блок-
схема, а иллюстрация метода - устройство, компонента которого рабо-
тают одновременно.
2. Один и тот же метод могут реализовмвать несколько алгоритмов. И чем
сложнее метод, тем больше возможно реализаций в виде алгоритмов.
3. По описанню алгоритма можно понять метод, но описание метода даст
более полное представление об идеях, реализованних в алгоритме.
4. В методе ошибок бьіть не может. Но с другой сторони, ошибочньїм мо-
жет бмть вьібор метода. На тех же данньїх может всегда давать лучший
результат другой метод, преимущество которого может казаться не оче-
видним на первьій взгляд. Ошибочньїм может бьіть и вьібор алгоритма.
5. Разньїе алгоритми, реализующие один и тот же метод, могут давать со-
вершенно разнне результати! Покажем зто на примере.
Пример, показьівающий незквивалентность алгоритмов метода
Метод содержит процедуру 2, поворачиваюіцую двумерное изображение
на заданнмй угол А и добавляющую яркость точкам изображения на вели-
чину В, зависящую от расстояния до заданной точки С: В=В(х-хо, у-уо).
"Вьіделенная" точка С может лежать как внутри, так и снаружи гранйц изо-
бражения, зто дела не меняет. При повороте она получает новме координа-
ти: х'о,у'о .
Очевидно, что возможнм два алгоритма:
сначала развернуть на заданнмй угол, затем добавить яркость;
* сначала добавить яркость, затем развернуть.
Результати работи зтих двух алгоритмов могут незначительно отличать-
ся из-за округлення результатов внчисления расстояний: П=((х-хо)2
+(у-уо)2)1/2, а Ь'=((х'-х'о)2+(у'-у'о)2)1/2, и в общем случае зти расстояния до и
после поворота О и О' не равньї.
При извлечении квадратного корня возникают иррациональнне числа,
т. е. бесконечние дроби. Позтому, какова би ни била точность арифме-
15
Книга написана коллективом Шір:/Лууууу.сошрге88Іоп.ги/
Матодьі сжатия данньїх (7000+ файлов о сжатии)
тики - 16 знаков или 1024, все равно ОиО’ придется округлять после кака?:
го-то знака, отбрасьівая остальньїе знаки. Увеличение точности приведет
лишь к уменьшению вероятности того, что после округлення О и О' буду?/
неравньї.
Если на оснований результата работьі процедури поворота с добавлени-
ем яркости вьічисляется критерий и в соответствии с его величиной вибира-
ется один из нескольких вариантов дальнейших действий, то результати ра-
боти двух алгоритмов могут отличаться уже не "совсем чуть-чуть", а кар^,
динально.
Например, критерий имеет вид Тпет,<3-То1л', где Тош - суммарная яркость
изображения до процедури 2, а Тпеж- после нее. И если в первом алгоритме
Тои/Тпо» = 0.3333 , а во втором 0.3334, то после проверки критерия випол-
нятся разние ветви алгоритма. Результат незквивалентности алгоритмов
будет хорошо заметен.
Даже если никакого критерия нет, ошибка может накапливаться посте-
пенно, на каждом шаге некоторого цикла.
Таким образом, два алгоритма, реализующих один и тот же метод, могут
иногда давать совершенно разние результати.
Реализация алгоритма - программа
Программа - зто реализация, "воплощение" алгоритма на одном из язи-
ков программирования. Таким образом, общая схема написання программи
сжатия (кодека, т. е. компрессора и декомпрессора), равно как и любой про-
грамми вообще, следующая:
1) постановка задачи;
2) вибор метода;
3) создание алгоритма;
4) написание программьі;
5) тестирование, оптимизация и настройка.
В отой книге описани именно методи, но для их иллюстрации приво-
дятся конкретне алгоритми для одного процессора, иллюстрируемие
текстами на язьіке программирования Си.
1 Даже если констант в явном виде нет (например, А/В<С/й, где А, В, С и й-
вьічисляе.мьіе величиньї), всегда єсть умножение на единицу и прибавление нуля.
16
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
РАЗДЕЛ 1
МЕТОДЬІ СЖАТИЯ БЕЗ ПОТЕРЬ
В основе всех методов сжатия лежит простая идея: если представлять
часто используемьіе злементи короткими кодами, а редко используемие -
длинньїми кодами, то для хранения блока данньїх требуется меньший обьем
памяти, чем если бьі все злементи представлялись кодами одинаковой дли-
ньі. Данньїй факт известен давно: вспомним, например, азбуку Морзе, в ко-
торой часто используемьім символам поставлень! в соответствие короткие
последовательности точек и тире, а редко встречающимся - длиннме.
Точная связь между вероятностями и кодами установлена в теореме
Шеннона о кодировании источника, которая гласит, что злемент вероят-
ность появлення которого равняется />($,), вмгоднее всего представлять -1082
р(5,) битами. Если при кодировании размер кодов всегда в точности получа-
ется равньїм -10^2 р($і) битам, то в зтом случае длина закодированной по-
следовательности будет минимальной для всех возможньїх способов коди-
рования. Если распределение вероятностей Р= {р(5,)} неизменно, и вероят-
ности появлення злементов независимьі, то мьі можем найти среднїою
длину кодов как среднее взвешенное
Я = -^Ри)1О82Р(5(). (1-1)
і
Зто значение также назьівается знтропией распределения вероятно-
стей Р или знтропией источника в заданннй момент времени.
Обьічно вероятность появлення злемента является условной, т. е. зави-
сит от какого-то собьггия. В зтом случае при кодировании очередного зле-
мента 5/ распределение вероятностей Р принимает одно из возможньїх зна-
чений Рь т. е. Р = Р^м соответственно Н = Я*. Можно сказать, что источник
находится в состоянии к, которому соответствует набор вероятностей рі^зі)
генерации всех возможньїх злементов з,. Позтому среднюю длину кодов
можно вичислить по формуле
Я = -^Я4 = (1-2)
* к.і
где Р* - вероятность того, что Р примет к-е значение, или, иначе, вероят-
ность нахождения источника в состоянии к.
Итак, если нам известно распределение вероятностей злементов, генери-
руемьіх источником, то мьі можем представить данние наиболее компакт-
ним образом, при зтом средняя длина кодов может бить вичислена по фор-
муле (1.2).
4ГИИОҐГПИ0І1
17
Книга написана коллективом 1йір:/Лууууу.сотрге88Іоп.ги/
Мвтодьісмвтия денних(7000+файлов о сжатии)
Но в подавляющем большинстве случаев истинная структура источника
нам неизвестна, позтому необходимо строить модель источника, которая
позволила бьі нам в каждой позиции входной последовательности оценить
вероятность р(^,) появлення каждого злемента 5, алфавита входной последо-
вательности. В зтом случае мьі оперируем оценкой вероятности зле-
мента Зі.
Методи сжатия могут строить модель источника адаптивно по мере об-
работки потока данньїх или использовать фиксированную модель, создан-
ную на основе априорнмх представлений о природе типових данних, тре-
бующих сжатия.
Процесе моделирования может бить либо явним, либо скрьггим. Веро-
ятности злементов могут использоваться в методе как явним, так и неявним
образом. Но всегда сжатие достигается за ечет устранения статистической
избьггочпости в представлений информации.
Ни один компрессор не может ежать любой файл. После обработки лю-
бим компрессором размер части файлов уменьшитея, а оставшейся части -
увеличитея или останется неизменним. Данний факт можно доказать исхо-
дя из неравномерности кодирования, т. е. разной длини используемих ко-
дов, но наиболее прост для понимания следующий комбинаторний аргу-
мент.
Существует 2" различньїх файлов длини п бит, где п = 0, 1,2, ... Если
размер каждого такого файла в результате обработки уменьшаетея хотя би
на 1 бит, то 2" исходннм файлам будет соответствовать самое большее 2"-1
различающихся ежатих файлов. Тогда по крайней мере одному архивному
файлу будет соответствовать несколько различающихся исходнмх, и, сле-
довательно, его декодирование без потерь информации невозможно
в принципе.
ЗЙ Вьішесказанное предполагает, что файл отображаетея в один файл и обь-
ем данньїх указьіваетея в самих данньїх. Если зто не так, то следует учитьі-
вать не только суммарний размер архивньїх файлов, но и обьем информации,
необходимой для описаних нескольких взаимосвязанньїх архивньїх файлов и/или
размера исходного файла. Общность доказательства при зтом сохраняется.
Позтому невозможен "вечньїй" архиватор, которий способен бесконеч-
ное число раз ежимать свои же архиви. "Наилучшим" архиватором является
программа копирования, поскольку в зтом случае ми можем бить всегда
уверенн в том, что обьем данних в результате обработки не увеличитея.
Регулярно появляющиеся заявлений о создании алгоритмов сжатия,
"обеспечивающих сжатие в десятки раз лучшее, чем у обьічнмх архивато-
ров", являютея либо ложнмми слухами, порожденнмми невежеством и по-
гоней за сенсацией, либо рекламой аферистов. В области сжатия без потерь,
18
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
т. е. собственно сжатия, такие революции невозможньї. Безусловно, степень
сжатия компрессорами типичньїх данньїх будет неуклонно расти, но улуч-
шения составят в среднем десятки или даже единицьі процентов, при зтом
каждьій последующий зтап зволюции будет обходиться значительно дороже
предидущего. С другой сторони, в сфере сжатия с потерями, в первую оче-
редь компрессии видеоданньїх, все еще возможно многократное улучшение
сжатия при сохранении субьективной полнотьі получаемой информации.
Глава 1. Кодирование источников
данньїх без памяти
Разделение мантисс и зкспонент
Английское название метода - Зерагаіе Ехропепіз апб Мапгізказ (8ЕМ).
Цель - сжатие потока Я-битових злементов. В общем случае никаких
предположений о свойствах значений злементов не делается, позтому зту
группу методов назьівают также представлением цельїх чисел (Кергезепіа-
гіоп оПпіедегз).
Основная идея состоит в том, чтобьі отдельно описьівать порядок значе-
ння злемента Хі ("зкспоненту" Е,) и отдельно - значащие цифри значення
("мантиссу" М)-
Значащие цифри начинаются со старшей ненулевой цифри: например,
в числе 0000011012 = 1-2°-Н)-21+1-22+1-23+0-24+0-... = 13 зто последние 4 цифри.
Порядок числа определяется позицией старшей ненулевой цифри в записи
числа. Как и при обичной записи в десятичной системе, он равен числу
цифр в записи числа без предшествующих незначащих нулей. В данном
примере порядок равен четьірем. В зтом пункте зкспонентой називаєм
старшие бити, мантиссой - младшие.
Методи зтой группьі являются трансформирующими и поточними
(т. е. могут применяться даже в том случае, когда длина блока с данними не
задана). В общем случае скорость работи компрессора (содержащего пря-
меє, "ежимающее" преобразование) равна скорости декомпрессора (реали-
зующего обратное, "разжимающее" преобразование) и зависит только от
обьема исходних данньїх: входних при сжатии, виходних при разжатии.
Памяти требуетея всего лишь несколько байтов.
Поскольку никаких величин вероятностей не вьічисляется, никаких таб-
лиц вероятностей не формируетея, методи более зффективнм в случае про-
стой зависимости вероятности Р появлення злемента со значением 7. от са-
мого значення 7: Р=Р(7,), и функция Р(2) относительно проста.
19
Книга написана коллективом 1Шр:/Лууууу.сотрге88Іоп.ги/
Методи сжатия данньїх (7000+ файлов о сжатии)
Из краткого описання общей идеи видно, что
1) формируется один либо два виходньїх потока (в зависимости от ва-
рианта метода) с кодами меньшего размера;
2) каждьій из них может бьіть либо фиксированного размера (под запись
числа отводится С бит, С<К), либо переменной (размер битовой за-
писи зависит от ее содержания);
3) к каждому из них можно итеративно применять метод зтого же се-
мейства 8ЕМ (чаще всего зто полезно применять к потоку с зкспо-
нентами).
Прямое преобразование
В самом простом случае под запись зкспонент и мантисс отводится фик-
сированное число битов: Е и М. Причем Е і. 1, М і 1, Е+М=К, где К - число
битов в записи исходного числа.
Зтот первьій из четмрех вариантов метода условно обозначим
Ріхесі+Ріхеб (Фиксированная длина зкспонентьі - Фиксированная длина
мантиссьі), а остальньїе три:
Ріхеб+УагіаЬІе (Фиксированная длина зкспонентьі - Переменная длина
мантиссм),
УагіаЬІе+УагіаЬІе (Переменная длина зкспонентьі - Переменная длина
мантиссьі) и
УагіаЬІе+Ріхед (Переменная длина зкспонентм - Фиксированная длина
мантиссьі).
Базовий алгоритм первого варианта:
# йе£іпе К. 15 //исходнме злементи - 15-битовме
# <іе£іпе Е 7 //задано число битов под зкспонентм
#де£іпе М (К-Е) //и мантиссм
£ог( і=0; і<М; і++) {//с каждмм злементом исходного блока:
М[і] = ( (ипзідпесі) 3 [і]) & ((1«М)-1); //мантиссм в массив М
Е [і] = ((ипзідпесі) 3 [і]) » М; //зкспонентм в массив Е
}
где N - количество злементов во входном блоке;
8[7У] - входной блок;
Е[Л/] - блок с зкспонентами;
М[У] - блок с мантиссами.
Побитовьій логический сдвиг влево на единиііу зквивалентен умноже-
нню на 2, позтому (1«Л/) = 2м.
Если имеем распределение вероятностей, близкое к "плоскому": Р(2) я
я сопзі, то только первьій рассмотреннмй вариант - Ріхеб+Ріхеб - может
сказаться полезньїм: при правильном виборе числа Е результат сжатия бло-
20
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
ков Е[Л/], М[А] будет лучше, чем если сжимать исходнмй блок 8(77]. Но ес-
ли вероятности в целом убьівают с ростом значений злементов и их распре-
деление близко к такому:
Р(2) £ Р(2+1), при любом 2, (1.3)
то полезньї два варианта с переменньїм числом битов под мантиссьі, т. е.
схеми Еіхеб+УагіаЬІе и УагіаЬІе+УагіаЬІе.
Если справедливо (1.3), кодирование таких чисел назьівается универ-
сальньш (ипіуегзаі Содіп§ о£ Іпіедегз).
Алгоритм второго варианта (Ріхед+УагіаЬІе):
#сіе£іпе К 15 // исходние злементм - 15-битовке
#де£іпе Е 4 //4 бита под зкспонентм, так как 23 5 й < 24
// 3 [і] - беззнаковме числа
£ог(і=0; і<М; і++) { // с каждшм злементом исходного блока:
3=0;
нЬіІе (3[і]>=1«і) з++; // найдем такое з, что 5[і]< (1«з)
Е[і]=з; // запишем з, т. е. порядок
// числа 3[і],в массив Е
і£ (з>1) // если з>1,
ИгіїеВіТз(ОиТриТ, 5[і], 3-І);// запишем (3-І) младших бит
//числа 3[і] в битовнй блок с мантиссами
Поскольку (двоичнмй) порядок числа сохраняем в массиве с депонен-
тами, первую значащую цифру (в двоичной записи в случае беззнакового
числа зто может бьіть только "1") в битовьій блок с мантиссами записмвать
не нужно.
Упражнение. Составьте таблицу из 16 строк и двух стогбцов: в левом - число
битов, необходимьіх для записи чисел из диапазона О, справа - соответст-
вующий диапазон О.
Третин вариант (УагіаЬІе+УагіаЬІе) будет отличаться лишь тем, что вместо
Е[і]=з; //запишем 3, т. е. порядок числа 3 [і), в массив Е
будет
ИгіСеВіТз (ОиТриї., 1,з + 1) ;
В вьіходной битовьій блок Оиіриї записьіваем подряд несколько нулевьіх
битов, количество которьіх равно значенню зкспонентм, и в качестве при-
знака окончания зкспонентм записмваем единичнмй бит:
£ог (к=з; к>0; к—)
ИгіТеВіХ (ОиСриС,0); //3 бит "0"
ИгіСеВіТ(ОиТриТ,1); //и один бит "1"
21
Книга написана коллективом 1ійр:/Лууууу.сотрге88Іоп.пі/
МетоДьг сжатия данних(7000+ файлов о сжатии)
І 0 І 0 І 0 І 0 І - І 0 І П
— ------------------ г
) нулевьіх младший
битов бит
Такая запись числа N. последовательность из N нулевьіх бит и одного
одиничного, назьівается унарним кодом.
Если исходнме злементьі - 32-бйтовьіе и почти все равньї нулю, степень
сжатия может доходить до 32:1.
Упражнение. Какой будет степень сжатия блока 16-битовьіх злементов в случае
применения варианта УагіаЬІе+УагіаЬІе: 3,8,0,15,257,11,57867,2,65,18?
Последний, четвертий вариант (УагіаЬІе+Еіхед), отводящий переменное
число битов под зкспонентьі и фиксированное - под мантиссьі, будет рас-
смотрен чуть ниже в подразд. про кодм Райса.
Важное замечание. Если кодм переменной длиньї записмваются в один
поток, они должнм генерироваться так, чтобьі любше два кода А и В из
группьі генерируемьіх кодов удовлетворяли условию: А не является началом
В, В не является началом А. Такие группьі кодов назмваются префиксними
кодами.
Обратное преобразование
Обратное преобразование не сложнее прямого. В первом варианте внут-
ри цикла будет:
£ог( і=0; і<Я; і++) {//с каждмм елементом исходного блока:
5[і] = (Е[і]«М)+М[і]; //старшие бити в массиве Е, младшие - в М
)
Во втором варианте:
£ог( і=0; і<И; і++) {// с каждмм елементом исходного блока:
3=Е[і]; // возьмем і, т. е. порядок
// числа 5[і],из массива Е
З[і]=1« (3-І); // запишем первую единицу в позиции,
// определяемой порядком числа
і£ (і>1) // если з>1,
5 [і]+=(Зе£Ві1:з (Іпри£, }-1) ; // возьмем (з~1) младших бит
//5 [і] из битового блока с мантиссами
)
В третьем вместо
І=Е[і); //возьмем ;і, т. е. порядок числа 3(і],из массива Е
будет
22
ййр:/Лууууу.сошрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методи сжатия без потерь
3=0; II і - счетчик числа нулевих
иНіїе (Се£Ві£(ІприЬ)==0) з++;// битов в битовом блоке Іпри£
а дальше виполняются те же действия, что и во втором варианте:
3[і]=1«(3-1); // запишем первую единицу в позицию,
// определяемую порядком числа
і£ (і>1) // если з>1, .,
5(і]+“0е£Ві£з(ІприС,з-1);//возьм^м (з~1) младших бит 3[і]
11 таз битово^о блока с мантиссами
Пути увеличения степени сжатия
В каждом из рассмотренньїх вьіше четьірех вариантов (Ріхед+Ріхеб,
УагіаЬІе+УагіаЬІе, Ріхесі+УагіаЬІе, УагіаЬІе+Ріхеб) можно пробовать улуч-
шать сжатие за счет:
отказа от "классической" схеми с диапазонами длиной 2х и границами,
вьіровненнмми по 2а (К, Ь - константи схеми);
использования априорного знання диапазона допустимих значений ис-
ходньїх злементов;
применения хорошо исследованних схем кодирования (Злиаса, Райса,
Голомба, Фибоначчи).
При сжатии с потерями можно просто ограничивать число битов ман-
тиссьі М: сохранять только не более чем Мі бит мантисси (а остальние
(М[/]-Л/і) бит - удалять, если М[і]>Л/і).
КОДЬІПЕРЕМЕННОЙ ДЛИНЬІ ( УАЯІАВ1_Е+УАНІАВ!.Е )
Гамма- и дельта-кодьі Злиаса
Зти коди генерируются так:
Диапазон Гамма-кодьі Длина кода, бит Дельта-кодьі Длина кода, бит
1 1 1 1 1
2...3 Оіх 3 ОЮх 4
4...7 ООІхх 5 ОПхх 5
8...15 0001ххх 7 ООЮОххх 8
16...31 ООООІхххх 9 ООЮІхххх 9
32...63 00000Іххххх 11 ООИОххххх 10
64...127 000000Іхххххх 13 0011Іхххххх 11
128...255 0000000Іххххххх 15 ОООЮООххххххх 14
и т. д., символами "х" здесь обозначеньї бити мантиссм без старшей единицьі.
Для диапазона [2х, 2Х+І-1] кодьі формируются следующим образом:
у-код: 00...(АГраз)...001х..(АГраз)..х; длина: 2Х+1 бит;
5-код: п...(2-А+1 раз)...пх..(АГ раз)..х ; длина: 2-А+Л+1 бит,
23
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.пі/
Методи сжатия данньїх(7000+ файлов о сжатии)
где £ = [Іо&^+І)] - целая часть значення логарифма числа (Х+1) по осно-
ванию 2; п - битьі, относящиеся к записи зкспонентьі 8-кода; их число
2£+1.
Единственное отличие между у- и 8-кодами состоит в том, что в у-кодах
зкспонентьі записьіваются в унарном виде, а в 8-кодах к ним еще раз при-
меняется у-кодирование.
Видно, что у-кодьі первьіх 15 чисел короче 8-кодов, а у-кодн первьіх 31
не длиннее 8-кодов. То єсть чем неравномернее распределение вероятно-
стей, чем круче возрастает вероятность чисел при приближении их значення
к нулю, тем вьігоднее у-кодьі по сравнению с 8-кодами.
Как соотносятся у-кодьі и наш базовий алгоритм третьего варианта
(УагіаЬІе+УагіаЬІе)? Если к у-коду слева добавить столбец, состоящий из
одной единицм и последовательности нулей, то получим такое соответствие
кодов числам:
Диапазон Гамма-кодьі Диапазон Дельта-кодьі
0 - 0 1
1 1 1 0 1
2-3 01х 2-3 ООІх
4-7 ООІхх 4-7 0ООІхх
8-15 0001ххх 8-15 0 0001ххх
16-31 ООООІхххх 16-31 0ООООІхххх
32-63 00000Іххххх (до добавлення) 32-63 0 00000 Іххххх (после добавлення)
Оно как раз и соответствует базовому алгоритму третьего варианта.
Если еще раз прибавить такой столбец и к значенням чисел прибавить 2,
то соответствие примет такой вид:
Диапазон Гамма-кодьі
1 1
2 0 1
3 001
4-5 0 0 0ІХ
6-9 0 0 ООІхх
10-17 ОООООІххх
18-33 0 0 ООООІхххх
34-65 0 0 00000Іххххх
Таким образом, единственньїй параметр обобщенньїх у(А)-кодов - число
кодов без битов мантиссьі. Традиционньїй у-код - зто у(1). У обобщенньїх
8-кодов два параметра.
24
ййр:/Лууууу.сошрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методи сжатия без потерь
Упражнение. Напишите функцию, создающую у(3)-код задаваемого числа,
а затем функцию для б(3,3)-кода.
Коди Райса и Голомба
Кодьі Райса и Голомба изначально задаются с одним параметром и вьі-
глядят так:
Код Голомба: т=1 т=2 лі=3 т=4 т=5 ти=6 т=1 ти=8
Код Рай- са: к=0 4=2 4=3
п=1 0 00 00 000 000 000 000 0000
2 10 01 010 001 001 001 0010 0001
3 ПО 100 011 010 010 0100 0011 0010
4 1110 101 100 011 0110 0101 0100 0011
5 11110 1100 1010 1000 0111 0110 0101 0100
6 111110 1101 1011 1001 1000 0111 0110 0101
7 1111110 11100 1100 1010 1001 1000 0111 0110
8 11101 11010 1011 1010 1001 1000 0111
9 111100 11011 11000 10110 10100 10010 10000
Алгоритм построения кодов можно понять с помощью следующих двух
таблиц:
ти=2 ти=3 ти =4 ти=8
Ох 00 Охх Оххх
ІОх Оіх ІОхх Юххх
ПОх 100 ПОхх ПОххх
11 ІОх Юіх 11ІОхх 11 Юххх
11 ПОх 1100 ППОхх 11 ПОххх
ПОІх
11100
П10ІХ
Видно, что кодьі Голомба при тп=25 - зто кодм Райса с к = 5, зкспонентм
записьіваются в унарном виде, а под мантиссьі отведено 5 бит.
Далее:
т—5 ти=6 ти=7
ООх ООх 000
010 Оіхх ООІх
25
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.ги/
Метод» сжатия данньїх (7000+ Файлов о сжатии)
ОНх ЮОх Оіхх
ЮОх Юіхх 1000
1010 НООх ЮОІх
101 їх НОІхх Юіхх
НООх 11 ЮОх 11000
11ЮІХХ НООІх
11 НООх НОІхх
111000
Если т<25, первме т кодов начинаются с 0, вторая группа из т кодов
начинается с 10, третья - 110 и т. д. Диапазоньї длиной т не вмровненм по
границам, равньїм 2і, как в у-кодах Злиаса. Зкспонентм вьічисляются как е
= (л-1)//п (деление целочисленное) и записмваются в унарной системе счис-
ления: е бит 1 и в конце бит 0. Под мантиссм г - п-ет-1 отводится либо
(5-1), либо 5 бит.
Очевидно, что к зкспонентам, как и в случае с у-кодами Злиаса, можно
применять либо у(А)-, либо Оо1отЬ(т)-кодирование. Аналогично и к зкспо-
нентам у-кода - не только у(А), но и ОоІотЬ(т).
Упражнение. Напишите функцию, создающую у(3)-ОоІотЬ(2)-код задаваемого
числа. То єсть у(3), к зкспонентам которого применен Со1отЬ(2)-код.
Омега-кодьі Злиаса и коди Ивзн-Родз
Английские названий кодов: отер (со) Еііая соіез и Еуеп-КобеЬ содез
соответственно.
Зти кодм определенм так:
Диапазон ш-код Би- тов Ивзн-Родз-код Би- тов
1 0 1 00 2
2...3 1x0 3 Оіх 3
4...7 10 ІххО 6 ІххО 4
8...15 11 ІхххО 7 100 Іххх 0 8
16...31 10 100 ІххххО 11 101 ІххххО 9
32...63 10 101 ІхххххО 12 110 ІхххххО 10
64...127 10 110 Іхххххх 0 13 111 Іхххххх0 11
128...255 10 111 ІхххххххО 14 100 1000 ІхххххххО 16
И те и другие состоят из последовательности групп длиной £ь £2, •••,
£т, начинающихся с бита 1. Конец последовательности задается битом 0.
Длина каждой следующей (и+1)-й группн задается значением битов предьі-
дущей п-й группьі. Значение битов последней группьі является итоговмм
значением всего кода, т. е. всей последовательности групп. Иначе говоря,
все первме ти-1 групп служат лишь для указания длиньї последней группьі.
26
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методи сжатия без потерь
В со-кодах Злиаса длина первой группьі - 2 бита и далее длина следую-
шей группьі равна значенню предьідущей плюс один. Первое значение зада-
но отдельно.
В Ивзн-Родз-кодах длина первой группьі - 3 бита и далее длина каждой
следующей группьі равна значенню предьідущей. Первие 3 значеним заданьї
особьім образом.
При кодировании формируется сначала последняя группа, затем предпо-
следняя и т. д., пока процесе не будет завершен.
При декодировании, наоборот, сначала считмвается первая группа, по
значенню ее битов определяетея длина следующей группьі (если первая
группа начинаетея с единицм) или итоговое значение кода (если группа на-
чинаетея с нуля).
Упражнение. Как будут вьіглядеть кодьі ш Злиаса и Ивзн-Родз для чисел из
диапазонов256...511 и 512...1023 ?
Старт-иіаг-стоп (зІаП-зіер-зіор) коди
Старт-шаг-стоп-кодм задаютея тремя параметрами: (і,),к).
Зкспонента может занимать 1,2,3,...,т-1,т бит, а мантисса - і, і+і, і+2],
/+3/,
Если (/,/,А:)=(3,2,11), то кодьі вьіглядят так:
Диапазон (3,2,11)-код Длина кода, бит
1...8 Оххх 4
9...40 Юххххх 7
41...168 1 Юххххххх 10
169...680 ПЮххххххххх 13
681...2728 111Іххххххххххх 15
Таким образом, зто соответствие можно использовать для чисел из диа-
пазона [1,2728]. Зкспонента записьівается в унарной системе счисления: ко-
нец поля зкспонентм указмваетея с помощью нуля. Для пятой группм,
имеющей максимальную длину мантиссьі - 11 бит, разделяющий нуль не
нужен, так как вне зависимости от его наличия декодирование однозначно.
Если максимальнеє значение кодируемьіх чисел не задано, то и третий
параметр не задаетея. Такие кодьі назьіваютея Старт-Шаг-кодами (8їаг1-
Зіер-сосіез).
Коди Фибоначчи
Самьіе интересньїе, нетривиальнме кодьі. Исходное число N раскладьіва-
етея в сумму чисел Фибоначчи/ (/і=1, /і=2,/і=/і.і +/.2). Известно, что любое
число однозначно представимо в виде суммьі чисел Фибоначчи. Позтому
27
Книга написана коллективом йіір:/Лууууу.сотрге88Іоп.ги/
(7000+ файлов о сжатии)
Методи сжатия данньїх
можно построить код числа как последовательность битов, каждьій из кото-
рьіх указьівает на факт наличия в N определенного числа Фибоначчи.
Заметим также, что если в N єсть/, то в нем не может бьітьуі+|. Позтому
если единичное значение бита указьівает на использование какого-то числа
/і, то ми можем обозначать конец записи текущего кода и начало следующе-
го последовательностью из двух единиц:
/•: 1 2 3 5 8 13 21 34 55
л=1 1 (1)
2 0 1 (1)
3 0 0 1 (Ч
4 1 0 1 (1)
5 0 0 0 1 (1)
6 1 0 0 1 (1)
7 0 1 0 1 (1)
8 0 0 0 0 1 (1)
12 1 0 1 0 1 (1)
13 0 0 0 0 0 1 (О
...
20 0 1 0 1 0 1 (О
21 0 0 0 0 0 0 1 (1)
...
27 1 0 0 1 0 0 1
Как и в случае с унарной записью, нет четкого разделения на мантиссьі и
зкспонентм. Можно считать, что при записи в унарном виде все битьі, кро-
ме последнего, зкспонентн. А в кодах Фибоначчи наоборот: все битьі, кро-
ме двух последних, мантиссн.
Рассмотрим утверждение подробнее.
Если в потоке у-кодов или кодов Райса будет искажен 1 бит, длина и со-
держимое остального потока не изменится, если зтот бит мантисса
(и "испорчен" окажется только один код). Но если "сломанньїй" бит зкспо-
нента, то будет неправильно декодирована значительная часть потока.
Если в потоке унарних кодов изменить один бит, кодов станет либо на
один больше, если зтот бит зкспонента:
...00000001000000001... - било
... 00100001000000001... - стало
либо на один код меньше, если зтот бит мантисса:
...00000000000000001...
С другой сторони, для потока кодов Фибоначчи кодов станет на один
меньше, если "сломавшийся" бит зкспонента, т. е. один из двух единичннх
28
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
битов, обозначающих конец кода, либо на один больше, если и "сбойньїй"
бит стал таким, как бит зкспонентм (1), и хотя бм один из двух соседних со
сбойньїм битов зкспонентм единичнмй. В остальнмх же случаях "сломает-
ся" только один код (в некотормх случаях может "сломаться" пара ссседних
кодов). Но весь поток, как может бить в случае у- и Голомб-кодов, никогда1.
Упражнение. Приводите пример, показьівающий, как из-за сбоя в одиом бите
"сломается* 3 кода Фибоначчи.
Замечание по унарньїм кодам. Если, например, мьі сжимаем поток злемен-
тов со значеннями:
1,3,4,7,9,10,13,15,16,20,25,26,28,30,33...
так назьіваемьім методом флагов:
101100101100 101100010000110101001...
то реально здесь имеем два метода: линейно-предсказьівающее кодироввние
(ЬРС) плюс унарньїе кодьі (см. подразд. "Линейно-предсказьівающее кодирова-
ние").
Коди фиксированной длини (/іхей+/іхеЛ)
Несмотря на недостатки с точки зрения сравнительно низкой степени
сжатия, кодьі фиксированной длинм широко используются на практике.
Положительнмми особенностями данного варианта 8ЕМ являются:
вмсокая скорость кодировании;
поток закодированнмх данньїх обладает строгой регулярностью, что об-
легчает дальнейшее сжатие даннмх в случае использования сложньїх
многопроходннх алгоритмов обработки.
Ріхед+Ріхесі - зто самий простой, самий подходящий вариант для по-
следующей сортировки параллельнмх блоков (РВ8).
Предварительная обработка данньїх с помощью варианта 8ЕМ РіхеЛ+Ріхей
может также улучшить степень сжатия ВЬЕ, 8С или ЬРС. Весьма вероятно,
что во входнмх даннмх разность между зкспонентами соседних кодов явля-
ется в основном Д-битовой (т. е. ее можно записать с помощью Д бит) и зти
Д-битовме злементи далее несжимаемм. А после 8ЕМ Ріхед+Ріхед с А/=Д-
1 разность между соседними зкспонентами в основном равна нулю. Н таким
образом, от каждого злемента остается в среднем примерно Д-1 бит, а не Д.
Пример: поток злементов, у котормх младшие 8 бит меняются хаотично,
а старшие 8 - константа. Если делать ЬРС без 8ЕМ, в вмходном потоке бу-
дет оставаться в среднем по 9 бит от каждого злемента, а после ЗЕМ+ЬРС -
по 8 бит.
1 Поток назовем "сломанннм", если возможность восстановить исходнне дан-
ньіе утрачена.
29
Книга написана коллективом 1Шр:/Лууууу.сотрге88Іоп.пі/
Методьі сжатия данньїх (7000+ Фаіі |ов о сжатии)
Улучшит сжатие вьібор оптимальних размеров зкспонент и мантисс.
Правильное разделение мантисс и зкспонент во многом аналогично вьіделе-
нию шума из аналогового сигнала.
Коди смешанньїе (/іхеї^агіаЬІе )
Поможет улучшить сжатие знание диапазона, особенно если его длина
не равна степени двойки: А<2Х+1, Ь=28+С. Тогда при максимальном значений
зкспонентм под запись мантиссьі потребуется на 1 бит меньше в (25-С) слу-
чаях при С^25"1, на 2 бита меньше в (2^'-С) случаях при 28~2<С<28Л и т. д.
Например, если диапазон £=215, то при Е[/]=15 под запись мантиссн
нужно 15 бит, а если £=2І4+213-7, то при Е[/]=15 достаточно 14 бит, а в семи
случаях -13 бит.
РВ8 в данном случае уже не столь прост и тривиален, как в предмдущем
случае Ріхед+Ріхесі, но все-таки применим, а ЬРС, КЬЕ или 8С для зкспо-
нент ничуть не сложнее.
Применимьі также методьі типа ОАКХ (по имени первоисследователя:
В. А. Корі), отводящие на каждом шаге фиксированное число битов под
зкспоненту, но помещающие в єдиний вмходной поток "флаги" с
информацией об изменении числа битов зкспонентм.
Заметим, что в общем случае "флагом" в потоке может бьіть не только
условие на значение одного злемента вида "8[і]=Р?" или ’У(8[/])=Р?", но и
условие на значение функции от нескольких последних злементов:
7(8[/],8[і-1],8[/-2],...)=/?". И битов, относящихся исключительно к записи
"флага", в потоке может и не бьггь.
Пути увеличения скорости сжатия и разжатия
Если памяти достаточно, имеет смисл при инициализации алгоритма
строить таблицу. Для алгоритма сжатия - содержащую соответствующие
Е[/] и М[і] по адресу, задаваемому значением 8[і]. Для разжатия, наобо-
рот, - содержащую 8[і] по адресам, задаваемьім значеннями Е[і] и М[і].
В результате внутренний цикл (если он єсть) вида
3=0;
юИіІе (3[і] >= !<<□) )++; //найдем такое что 3[і]< (1«))
(см. алгоритм сжатия, второй вариант)
преобразуется в вид
3=Т[5[і]]; //возьмем такое і, что 3[і]< (1<<з)
Упражнение. Напишите функцию, строящую таблицу Т для зтого варианта
(Ріхес1+ +\/агіаЬІе).
ЗО
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Очевидно, что размер таблицьі Т будет равен размеру диапазона 2Я воз-
можньїх значений злементов входного потока 8. Позтому компромисс меж-
ду обьемом памяти и скоростью работьі может находиться где-то посереди-
не: например если А=2|в, то вместо
3=Т[5[і]]; //возьмем такое ;і, что 5[і]< (1«Л
можно реализовать вьічисление ] так:
}=Т [3 [ і] »8]+8; // і>8, если 5[і]>=256
і£ (і==8) і=Т[3[і]]; // ^=8, если 3[і]<256
На несколько операций дольше по сравнению с первьім рассмотренньїм ва-
риантом использования таблицьі, но и размер Т уже не 2|6=65536, а 28=256.
Характеристики методов семейства 8ЕМ:
Степень сжатия: до К:1, где К. - размер исходнмх злементов.
Типи данньїх: любьіе данньїе, лучше количественние.
Симметричиость по скорости: в общем случае 1:1.
Характерніше особенности: традиционно используется для зффектив-
ного кодирования источников без памяти.
Канонический алгоритм Хаффмана
Один из классических алгоритмов, известнмх с 60-х гг. Использует
только частоту появлення одинаковмх байтов во входном блоке данньїх.
Ставит в соответствие символам входного потока, которие встречаются ча-
ще, цепочку битов меньшей длиньї. И напротив, встречающимся редко-
цепочку большей длиньї. Для сбора статистики требует двух проходов по
входному блоку (также существуют однопроходние адаптивньїе варианти
алгоритма).
Для начала введем несколько определений.
Определение. Пусть задан алфавит Т={а;(аг}, состоящий из конечно-
го числа букв. Конечную последовательность символов из Т
А = аІаіі...аІіі
будем називать словом в алфавите Ч7, а число п - длиной слова А. Длина
слова обозначается как 1(А).
Пусть задан алфавит £2, £2={і|, .... 6Ч}. Через В обозначим слово в алфа-
вите £2, и через 5(£2) - множество всех непустих слов в алфавите £2.
Пусть 5=5'(Ч') - множество всех непустих слов в алфавите Т и 8'- неко-
торое подмножество множества 8. Пусть также задано отображение Г, ко-
торое каждому слову А, А є5(Т) ставит в соответствие слово
31
Книга написана коллективом 1Шр:/Лууууу.сотрге88Іоп.ги/
Методи сжатия данньїх (7000+ файлов о сжатии)
В=Г(А), Вє5(СЇ).
Слово В будем називать кодом сообщения А, а переход от слова А к его
коду - кодированием.
Определение. Рассмотрим соответствие между буквами алфавита Т и
некотормми словами алфавита £2:
аі-£ь
_ ^2,
аг - Вг.
Зто соответствие назмвают схемой и обозначают через Е. Оно определя-
ет кодирование следующим образом: каждому слову А = аІаі...а^ из
і5'(£2)=$(£2) ставится в соответствие слово В = ВІ ВІ ...В^ , назмваемое кодом
слова А. Слова В]... Вг назмваются злементарньїми кодами. Даними вид ко-
дирования назмвают алфавитньїм кодированием.
Определение. Пусть слово В имеет вид
В=В'В".
Тогда слово В' назмвается началом или префиксом слова В, а В" - кон-
цом слова В. При зтом пустое слово Л и само слово В считаются началами и
концами слова В.
Определение. Схема Е обладает свойством префикса, если для любмх і
иу (1£і,у<г, і*]) слово В, не является префиксом слова Ву.
Теорема 1. Если схема Е обладает свойством префикса, то алфавитное
кодирование будет взаимно-однозначньїм.
Доказательство теореми можно найти в [4].
Предположим, что задан алфавит Т={а;, ..., аг} (г>1) и набор вероятно-
стей р,, ... , рг І ХР' = 11 появления символов а;.аг. Пусть, далее, задан
\ <=і )
алфавит £2, £2={6,, ..., Ьч} (?>1). Тогда можно построить целмй ряд схем Е
алфавитного кодирования
Я/ — В/,
аг-Вп
обладающих свойством взаимной однозначносте.
Для каждой схеми можно ввести среднюю длину /ср, определяемую как
математическое ожидание длини злементарного кода:
Іср = , /і = /(В() - длини слов.
32
1ііір:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздал 1. Методьі сжатия без лзтерь
Длина /ср показьівает, во сколько раз увеличивается средняя длина слова
при кодировании с помощью схеми Е.
Можно показать, что /ц, достигает величини своего минимума А на неко-
торой Е и определяется как
4 = тіп£ •
і у
Определение. Коди, определяемме схемой Е с /ср= А, назьіваются кодами
с минимальной избьіточностью или кодами Хаффмана.
Кодм с минимальной избьпочнрстью дают в среднем минимальное уве-
личение длин слов при соответствующем кодировании.
В нашем случае алфавит ^{а,, .... аг} задает символьї входного потока,
а алфавит О={0,1}, т. е. состоит всего из нуля и единицм.
Алгоритм построения схемм Е можно представить следующим образом:
Шаг 1. Упорядочиваем все букви входного алфавита в порядкї убива-
ння вероятности. Считаем все соответствующие слова В, из алфавита
£2= {0,1} пустими.
Шаг 2. Обьединяем два символа аіпІ и а,, с наименьшими вероятностями
Рі„і ар,, в псевдосимвол а'{аІг.іаІГ} с вероятностьюр^і+рі,. Дописьіваем 0 в
начало слова Віг., (ВІГ.І=$ВІІ.\) и 1 в начало слова Віг (Ві=1Віг).
Шаг 3. Удаляем из списка упорядоченних символов а^ и а^ заносим
туда псевдосимвол а'{а^х»4- Проводим шаг 2, добавляя при необходимости
1 или 0 для всех слов В„ соответствующих псевдосимволам, до тех пор пока
в списке не останется 1 псевдосимвол.
Пример. Пусть у нас єсть 4 букви в алфавите ^{йі,..., й4} (г=4), рі=0.5,
/ 4 \
/>2=0.24, />з=0.15, />4=0.11 =1 • Тогда процесе построения схеми
І «=( )
можно представить так:
рі— 0,5-------> 0.5
[-> 0.26
рг— 0.24------» 0.24
рз- 0.15 N
/>4-- 0.11 1
> 0.5 0
Производя действия, соответствующие 2-му шагу, ми полупаєм псевдо-
символ с вероятностью 0.26 (и приписмваем 0 и 1 соответствуюіцим сло-
вам). Повторяя же зти действия для измененного списка, ми получаем
псевдосимвол с вероятностью 0.5. И наконец, на последнем зтапе ми полу-
паєм суммарную вероятность 1.0.
33
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.пі/
Матодьі актив данньїх(7000+ файлов о сжатии)
Для того чтобм восстановить кодирующие слова, нам надр пройти по
стрелкам от начальних символов к концу получившегося бинарного дерева.
Так, для символа с вероятностью р4 получим Я4=101, для р3 получим ДуЧОО,
длярг получим В2= 11, дляр\ получим В^. Что соответствует схеме:
«і~0
«2-П
аз-100
«4-101
Зта схема представляет собой префиксньїй код, являющийся кодом
Хаффмана. Самий часто встречающийся в потоке символ а і ми будем ко-
дировать самим коротким словом 0, а самий редко встречающийся а4 -
длиннмм словом 101.
Для последовательности из 100 символов, в которой СИМВОЛ Я, встретится
50 раз, символ а2 24 раза, символ «3 -15 раз, а символ «4-11 раз, данньїй код
4
позволит полупить последовательность из 176 бит (100-). То єсть в
'•і
среднем ми потратим 1.76 бита на символ потока.
Доказательства теореми, а также того, что построенная схема действи-
тельно задает код Хаффмана, заинтересованнмй читатель найдет в [4].
Как стало понятно из изложенного вище, канонический алгоритм
Хаффмана требует помещения в файл со сжатими данними таблици соот-
ветствия кодируемьіх символов и кодирующих цепочек.
На практико используются его разновидности. Так, в некоторих случаях
резонно либо использовать постоянную таблицу, либо строить ее адаптив-
но, т. е. в процессе архивации/разархивации. Зти приеми избавляют нас от
двух проходов по входному блоку и необходимости хранения таблици вме-
сте с файлом. Кодирование с фиксированной таблицей применяется в каче-
стве последнего зтапа архивации в 1РЕО и в алгоритме ССІТТ Огоир, рас-
смотренньїх в разд. 2.
Характеристики канонического алгоритма Хаффмана:
Степени сжатия: 8,1.5,1 (лучшая, средняя, худшая степени).
' Симметричность по времени: 2:1 (за счет того, что требует двух
проходов по массиву сжимаемих данних).
Характерніше особенности: один из немногих алгоритмов, которий
не увеличивает размера исходнмх даинмх в худшем случае (если не спи-
тать необходимости храиить таблицу перекодировки вместе с файлом).
34
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Арифметическое сжатие
КЛАССИЧЕСКИЙ ВАРИАНТ АЛГОРИТМА
Сжатие по методу Хаффмана постепенно витесняется арифметическим
сжатием. Свою роль в зтом сиграло то, что закончились сроки действия па-
тентов, ограничивающих использование арифметического сжатия. Кроме
того, алгоритм Хаффмана приближает относительньїе частоти появлення
символов в потоке частотами, кратними степени двойки (например, для
символов а, Ь, с, сіс вероятностями 1/2, 1/4, 1/8, 1/8 будут использованьї ко-
дьі 0, 10, 110, 111), а арифметическое сжатие дает лучшую степень прибли-
жения частоти. По теореме Шеннона наилучшее сжатие в двоичной ариф-
метике ми получим, если будем кодировать символ с относительной часто-
той £ с помощью -1о8г(0 бит.
Оптимальнеє сжатие
---- Метод Хаффмана
Рис. 1.1. График сравнения оптимального кодирования и кодирования
по методу Хаффмана
На графике вище приводится сравнение оптимального кодирования и
кодирования по методу Хаффмана. Хорошо видно, что в ситуации, когда
относительние частоти не являются степенями двойки, сжатие становится
менее зффективним (ми тратим больше битов, чем зто необходимо). На-
пример, если у нас два символа а и Ь с вероятностями 253/256 и 3/256, то в
идеале ми должни потратить на цепочку из 256 байт -1о§2(253/256)-253-
і°82(3/256)-3 = 23.546, т. е. 24 бита. При кодировании по Хаффману ми за-
кодируем а и Ь как 0 и 1 и нам придется потратить 1 -253+1 -3=256 бит, т. е. в
10 раз больше. Рассмотрим алгоритм, дающий результат, близкий к опти-
мальному.
35
Книга написана коллективом Шір:/Лууууу.сошрге88Іоп.ги/
(7000+ файлов о сжатии)
Методи сжатия данних
Арифметическое сжатие - достаточно изящньїй метод, в основе которого
лежит очень простая идея. Мм представляєм кодируемьій текст в виде дро-
би, при зтом строим дробь таким образом, чтобьі наш текст бьіл представ-
лен как можно компактнеє. Для примера рассмотрим построение такой дро-
би на интервале [0, 1) (0 - включается, 1 - нет). Интервал [0, 1) вьібран по-
тому, что он удобен для обьяснений. Мм разбиваем его на подмнтервалм с
длинами, равньїми вероятностям появлення символов в потоке. Вдаль-
нейшем будем називать их диапазонами соответствующих символов.
Пусть мм сжимаем текст "КОВ.КОРОВА" (что, очевидно, означает "ко-
варная корова"). Распишем вероятности появлення каждого символа в тек-
сте (в порядке убивання) и соответствующие зтим символам диапазонм:
Символ Частота Вероятность Диапазон
О 3 0.3 [0.0; 0.3)
К 2 0.2 [0.3; 0.5)
В 2 0.2 [0.5; 0.7)
Р 1 0.1 [0.7; 0.8)
А 1 0.1 [0.8; 0.9)
II II 1 0.1 [09; іо)
Будем считать, что зта таблица известна в компрессоре и декомпрессоре.
Кодирование заключается в уменьшении рабочего интервала. Для первого
символа в качестве рабочего интервала берется [0, 1). Мм разбиваем его на
диапазонм в соответствии с заданнмми частотами символов (см. таблицу
диапазонов). В качестве следующего рабочего интервала берется диапазон,
соответствующий текущему кодируемому символу. Его длина пропор-
циональна вероятности появлення зтого символа в потоке. Далее считмваем
следующий символ. В качестве исходного берем рабочий интервал, полу-
ченньїй на предьідущем шаге, и опять разбиваем его в соответствии с таб-
лицей диапазонов. Длина рабочего интервала уменьшается пропорциональ-
но вероятности текущего символа, а точка начала сдвигается вправо про-
порционально началу диапазона для зтого символа. Новий построенньїй
диапазон берется в качестве рабочего и т. д.
Используя исходную таблицу диапазонов, кодируем текст "КОВ.КОРОВА":
Исходньїй рабочий интервал
Символ "К" [0.3; 0.5) получаем
Символ "О" [0.0; 0.3) получаем
Символ "В" [0.5; 0.7) получаем
Символ"." [0.9; 1.0) получаем
[0, і).
[0.3000; 0.5000).
[0.3000; 0.3600).
[0.3300; 0.3420).
[0,3408; 0.3420).
Графический процесе кодирования первмх трех символов можно
представить так, как на рис. 1.2.
36
1ііір:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методи сжатия без потерь
, О , , к В Р А
“-----------------+-^-------І--------!---І—ьЛ
0 'і |И іііі -О 1
ф-в
Рис. 1.2. Графический процесе кодирования первьіх трех символов
Таким образом, окончательная длина интервала равна произведению ве-
роятностей всех встретившихся символов, а его начало зависит от порядка
следования символов в потоке. Если обозначить диапазон символа с как
[а[с]; 6[с]), а интервал для 1-го кодируемого символа потока как [/,-, А,), то
алгоритм сжатия может бьггь записав как
1о=О; й0=1; 1=0;
иЬі1е(поС ОаСаЕііе.ЕОЕО ) {
с = Ва£аЕі1е.Кеас13уіпЬо1 () ; 1++;
її - 1ї-і + з[с],(йі-І - 1і-і);
й£ = 1і-і + Ь[с] • (йі-і - 1і-і);
};
Большой вертикальной чертой на рисунке вьіше обозначено произволь-
ное число, лежащее в полученном при работе интервале А/). Для после-
довательности "КОВ.", состоящей из четьірех символов, за такое число
можно взять 0.341. Зтого числа достаточно для восстановления исходной
цепочки, если известна исходная таблица диапазонов и длина цепочки.
Рассмотрим работу алгоритме восстановления цепочки. Каждьій сле-
дующий интервал вложен в предмдущий. Зто означает, что если єсть число
0.341, то первьім символом в цепочке может бьіть только "К", поскольку
только его диапазон включает зто число. В качестве интервала беретея диа-
пазон "К" - [0.3; 0.5) и в нем находитея диапазон [а[с]; А[с]), включающий
0.341. Перебором всех возможньїх символов по приведенной вьіше таблице
находим, что только интервал [0.3; 0.36), соответствующий диапазону для
"О", включает число 0.341. Зтот интервал вьібираетея в качестве следующе-
го рабочего и т. д. Алгоритм декомпрессии можно записать так:
1о=О; Ьо=1; уа1ие=Еі1е.Сосіе ();
1ог(і=1; і<=Еі1е.йаі:аЬепдЬЬ () ; і++) {
ІОГ(ДЛЯ ВСеХ С)) {
її ~ 1і-і + а[с^-(йі-і - 1і-і) ;
Лі = 1і-2 + Ь[с^] • (Иі-і - 1і-і);
і£ ((і, <- уаіие) && ^аіие < Лі) ) Ьгеак;
};
ОаГаЕііе.НгіГеЗутЬоІ(с^) ;
);
37
Книга написана коллективом К((р:/Лу\у\у.сотрге‘і‘ііоп.і'и/
Методьі сжатия данньїх(7000+ файлов о сжатии)
где уаіие - прочитанное из потока число (дробь), ас- записьіваемьіе в вьі-
ходной поток распаковмваемьіе символьї. При использовании алфавита из
256 символов с, внутренний цикл вьіполняется достаточно долго, однако его
можно ускорить. Заметам, что поскольку й[с,чі]=а(9] (см. приведенную
вьіше таблицу диапазонов), то /,• для с7+1 равно й, для с7, а последователь-
ность Ні для с,- строго возрастает с ростом у. То єсть количество операций во
внутреннем цикле можно сократить вдвоє, поскольку достаточно проверять
только одну границу интервала. Также если у нас мало символов, то, отсор-
тировав их в порядке уменьшения вероятностей, мьі сокращаем число ите-
раций цикла и таким образом ускоряем работу декомпрессора. Первьіми бу-
дут проверяться символьї с наибольшей вероятностью, например в нашем
примере мьі є вероятностью 1/2 будем виходить из цикла уже на втором
символе из шести. Если число символов велико, существуют другие зффек-
тивньїе методи ускорения поиска символов (например, бинарний поиск).
Хотя приведенний виїде алгоритм вполне работоспособен, он будет ра-
ботать медленно по сравнению с алгоритмом, оперирующим двоичнмми
дробями. Двоичная дробь задается как О.а^аз.А = арІ/2 + а2ЛІ4 +
+ а3-1/8+... а/ЛІТ. Таким образом, при сжатии нам необходимо дописьівать
в дробь дополнительнме знаки до тех пор, пока долучившеєся число не по-
падет в интервал, соответствующий закодированной цепочке. Получившее-
ся число полностью задает закодированную цепочку при аналогичном алго-
ритме декодирования (рис. 1.3).
{ ,-----1-------1--------1---1---1---1
Рис. 1.3
Упражнение. Восстановить исходньїй текст из закодированной цепочки в 2 би-
та, равньїх "1Г (число 0.11 (2>=О.75(1о>), используя приведенную вьіше таблицу
диапазонов, если известно, что длина текста 10 символов.
Интересной особенностью арифметического кодирования является спо-
собность сильно сжимать отдельнме длиннме цепочки. Например, 1 бит
"1" (двоичное число "0.1") для нашей таблици интервалов однозначно за-
дает цепочку "ВОООООООООО..." произвольной длиньї (например,
1000000000 символов). То єсть если наш файл заканчивается одинаковмми
символами, например массивом нулей, то зтот файл может бить сжат с
весьма впечатляющей степенью сжатия. Очевидно, что длину исходного
38
ййр:/Лууууу.сотрге88Іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методи сжатия баз лотярь
файла при зтом следует передавать декомпрессору явним образом перед
сжатими даннмми, как зто делалось в приведенних вьіше примерах.
Приведеними више алгоритм может сжимать только достаточно корот-
кие цепочки из-за ограничений разрядности всех переменншх. Чтобн избе-
жать зтих ограничений, реальний алгоритм работает с целмми числами и
оперирует с дробями, числитель и знаменатель которих являются целмми
числами (например, знаменатель равен ЮОООЬ = 65536). При зтом с лотерей
точносте можно бороться, отслеживая сближение її и й/ и умножая числи-
тель и знаменатель представляющей их дроби на какое-то число (удобно на
2). С переполнением сверху можно бороться, записмвая старшие бити в /, и
Ні в файл тогда, когда они перестают меняться (т. е. реально уже не участ-
вуют в дальнейшем уточнений интервала). Перепишем таблицу диапазонов
с учетом сказанного вмше: '
3 Символ (ц) Накопленная частота ьи
0 — — 0
1 0 3 3
2 к 2 5
3 в 2 7
4 р 1 8
5 А 1 9
6 Н II 1 10
Теперь запишем алгоритм сжатия, используя целочисленнме операции.
Минимизация потерь по точносте достигается благодаря тому, что длина
целочисленного интервала всегда не менее половини всего интервала. Ко-
гда І, или И/ одновременно находятся в верхней или нижней половино
(На1£) интервала, то ми просто записнваем их одинаковме верхние бити в
вмходной поток, вдвоє увеличивая интервал. Если /, и й, приближаются к
середине интервала, остававсь по разние сторони от его середини, то ми
также вдвоє увеличиваем интервал, записнвая бити "условно". "Условно"
означает, что реально зти бити внводятся в вмходной файл позднее, когда
становится известно их значение. Процедура изменения значений її и й на-
знвается нормализацией, а вмвод соответствующих битов - переносом.
Знаменатель дроби в приведенном ниже алгоритме будет равен ЮОООЬ -
= 65536, т. е. максимальнеє значение й0=65535.
1о=О; /10=65535; ї=0; сіе1іСе1= // сІе1іїе1=10
Е"ігз1:_д£г » (й0+1)/4; // - 16384
На1£ = ГігзТ_дїг*2; // = 32768
Тйігд_дї:г = Гігз£_д1:г*3;// « 49152
Ьіі.з_£о_£о11ои =0; // Сколько битов сбрасмвать
39
Книга написана коллективом Шір:/Лууууу.сотрге88Іоп.пі/
Методи сжатия данних (7000+ файлов о сжатии)
кНі1е(по£. БаСаРіІе.ЕОРО ) {
с = ОаЬаРіїе.КеадЗутЬоІ(); // Читаєм символ
І = ІпдехРогЗутЬоІ(с); Ї++; // Находим єго индекс
1і = іі-і + - 1і-і + 1)/ае1ІСе1;
Лд = іі-! + Ь[5 ] * (Лі-л - + 1)/ае1іЄе1 - 1;
£ог(;;) { // Обрабатьіваем вариантш
і£(йі < На1£) // переполнения
ВібзРІизРоІІоюЮ);
еізе і£(1і >= На1£) {
Ві£зР1изРо11о«(1);
1і~= На1£; Йі~= На1£;
}
еізе і£((1і >= Рігз£_д£г)&&(йі < ТЬіга_д£г)){
Ьі£з_£о_£о11ом++;
1і-= Ріг8£_д£г; Ьі~= Рігз£_д£г;
} еізе Ьгеак;
1і+=1ц Ьі+= йі+1;
}
}
// Процедура переноса найденими битов в файл
уоіа Ві£бР1изРо11ом(іп<: Ьі£)
{
СопфгеззеаРіїе.ИгіЬеВіРІЬіР);
£ог(; Ьі£з_£о_£о11о» > 0; ЬіСз_£о_£о11о«--)
СошргеззеаРіІе.МгіСеВіР(!Ьі£);
}
"сЗс Упражнение. Покажите, что вісзРіизЕоІІом работает правильно и записьі-
вает в вьіходной файл значення, попадающие внутрь рабочего интервала.
/ Символ (0/) 4 Ь/ Нормализова нньїй 4 Нормали- зованньїй Ьі Результат
0 0 65535
1 К 19660 32767 13104 65535 01
2 О 13104 28832 26208 57665 010
3 В 41937 48227 7816 58143 010101
4 53111 58143 15836 35967 01010111
5 К 21875 25901 21964 38071 0101011101
6 О 21964 26795 22320 41647 010101110101
Упражнение. Вьіведите самостоятельно, какими битами нужно закончить сжа-
тмй файл, чтобьі при декомпрессии бьіли корректно полученьї последние 2- З
символа цепочки.
40
1іІІр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методи сжатия без потерь
На символ с меньшей вероятностью у нас тратится в целом большее
число битов, чем на символ с большой вероятностью. Алгоритм декомпрес-
сии в целочисленной арифметике можно записать так:
1о=О; й(>=65535; де1іСе1= £>[сІая1] ;
Гігз£_д£г = (Ло+1)/4; // = 16384
На1£ = Рігз£_д£г*2; // = 32768
ТЬігй_д£г = РігзС_д£г*3; // = 49152
ча1ие=СогпргеззеаРі1е. КеасЗІбВіЬ () ;
£ог(і=1; і< СошргеззеагіІе.ПаСаЬепдЬІіО ; і++){
£гед= ((уаіие-іі-і+і) *<1е1іЬе1-1) / (Лі-і - 2 і-і + 1) ;
£ог(з=1; £>[з']<=£гед; ]++); // Поиск символа
1і = Іі-і + (Ьі-і - 1і-і + 1)/ае1іЄе1;
Ьі = її-] + Ь[л ]*(ЛІ_1 - іі-і + 1)/Де1іЄе1 - 1;
£ог(;;) { // Обрабатьіваем вариантьі
і£(йі < На1£) // переполнения
; // Ничего
еізе і£(1і >= На1£) {
1і~= На1£; іі/-= На1£; ча1ие-= На1£;
}
еізе і£((1х >= Гігз£_д£г)&&(Лі < ТЬігд_д£г)) {
1і—= РігзЬ_дЬг; Лі-= Рігз£_дСг;
ча1ие-= РігзС_дСг;
} еізе Ьгеак;
1і+=1і; Лі+= Лі+1;
уа1ие+=ча1ие+СотргезвеаРі1е.КеаавіС();
}
ОабаРіІе.ИгіЬеЗутЬоІ(с);
);
Упражнение. Предложите примерьі последовательностей, сжимаеммх алго-
ритмом с максимальним и минимальньїм козффициентом.
Как видно, с неточностями арифметики мьі боремся, вьіполняя отдель-
ньіе операции над /, и А, синхронно в компрессоре и декомпрессоре.
Незначительньїе потери точности (доли процента при достаточно боль-
шом файле) и, соответственно, уменьшение степени сжатия по сравнению с
идеальнмм алгоритмом происходят во время операции деления, при округ-
лений относительньїх частот до целого, при записи последних битов в файл.
Алгоритм можно ускорить, если представлять относительнме частоти так,
чтобьі делитель бьіл степенью двойки (т. е. заменить деление операцией по-
битового сдвига).
41
Книга написана коллективом Шір:/Лууууу.сотрге88Іоп.ги/
Методі» сжатия денних (7000+ файлов о сжатии)
Для того чтобьі оценить степень сжатия арифметическим алгоритмом
конкретной строки, нужно найти минимальное число N, такое, чтобьі длина
рабочего интервала при сжатии последнего символа цепочки бьіла бьі
меньше 1/2\. Зтот критерий означает, что внутри нашего интервала заведо-
мо найдется хотя бьі одно число, в двоичном представлений котрого после
/У-го знака будут только 0. Длину же интервада)дарчитать просто, поскольку
она равна произведению вероятностей всех символов.
Рассмотрим приводившийся ранее пример строки из двух символов а и Ь
с вероятностями 253/256 и 3/256. Длина последнего рабочего интервала для
цепочки из 256 символов а и Ь с указаннмми вероятностями равна:
^256
_/253Уя
236 “І 256)
253м-9
2204»
«8.15501 10-’.
Легко подсчитать, что искомое N=24 (1/224- 5.96-10"’), поскольку 23 дает
слишком большой интервал (в 2 раза шире), а 25 не является минимальньїм
числом, удовлетворяющим критерию. Вьіше бмло показано, что алгоритм
Хаффмана кодирует данную цепочку в 256 бит. То єсть для рассмотренного
примера арифметический алгоритм дает десятикратнеє преимущество, пе-
ред алгоритмом Хаффмана и требует менее 0.1 бита на символ.
Упражнение. Подсчитайте оценку степени сжатия для строки "КОВ.КОРОБА*.
Следует сказать пару слов об адаптивном алгоритме арифметического
сжатия. Его идея заключается в том, чтобьі перестраивать таблицу вероят-
ностей />[/] по ходу упаковки и распаковки непосредственно при получении
очередного символа. Такой алгоритм не требует сохранения значений веро-
ятностей символов в вьіходной файл и, как правило, дает большую степень
сжатия. Так, например, файл вида д1000^1000^000^1000 (Где степень означает
число повторов данного символа) адаптивний алгоритм сможет сжать зф-
фективнее, чем потратив 2 бита на символ. Приведенньїй више алгоритм
достаточно просто превращается в адаптивний. Ранее ми сохраняли табли-
цу диапазонов в файл, а теперь ми считаем прямо по ходу работи компрес-
сора и декомпрессора, пересчитьіваем относительньїе частоти, корректируя
в соответствии с ними таблицу диапазонов. Важно, чтобн изменения в таб-
лице происходили в компрессоре и декомпрессоре синхронно, т. е., напри-
мер, после кодирования цепочки длини 100 таблица диапазонов должна
бить точно такой же, как и после декодирования цепочки длини 100. Зто
условие легко вьшолнить, если изменять таблицу после кодирования и де-
кодирования очередного символа. Подробнее об адаптивних алгоритмах
смотрите в гл. 4.
42
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методи сжатия без потерь
Характеристики арифметического алгоритма:
Лучшая и худшая степень сжатия: лучшая > 8 (возможно кодирова-
ние менее бита на символ), худшая - 1.
Плюсьі алгоритма: обеспечивает лучшую степень сжатия, чем алго-
ритм Хаффмана (на типичньїх данньїх на 1-10%).
Характернме особенности: так же как кодирование по Хаффману, не
увеличивает размера исходнмх данних в худшем случае.
ИНТЕРВАЛЬНОЕ КОДИРОВАНИЕ
В отличие от классического алгоритма, интервальное кодирование пред-
полагает, что мм имеем дело с цельїми дискретними величинами, которме
могут принимать ограниченное число значений. Как уже бьіло отмечено,
начальний интервал в целочисленной арифметике записмвается в виде [ОД)
или [0Д-1], где 1*1- число возможньїх значений переменной, используемой
для хранения границ интервала.
Чтобм наиболее зффективно сжать даннме, мьі должньї закодировать
каждьій символ 5 посредством -1о@2(4) бит, где Ті - частота символа 5. Ко-
нечно, на практике такая точность недостижима, но мьі можем для каждого
символа з отвести в интервале диапазон значений [У(Г,)Д(^і+Л)), где Р$ -
накопленная частота символов, предшествующих символу з в алфавите,
МУ) - значение, соответствующее частоте / в интервале из N возможньїх
значений. И чем больше будет N(4), тем точнеє будет представлен символ 5
в интервале. Следует отметить, что для всех символов алфавита должно со-
блюдаться неравенство />0.
Задачу увеличения размера интервала вьшолняет процедура, назмваемая
нормализацией. Практика показмвает, что можно отложить вьшолнение
нормализации на некоторое время, пока размер интервала обеспечивает
приемлемую точность. Миказль Шиндлер (Місіїаеі Зсіїішіїег) предложил
в работе [3] рассматривать вмходной поток как последовательность байтов,
а не битов, что избавило от битовьіх операций и позволило производить
нормализацию заметно реже. И чаще всего нормализация обходится без ви-
повнення переноса, возникающего при сложении значений нижней границм
интервала и размера интервала. В результате скорость кодирования возрос-
ла в полтора раза при крайнє незначительной потере в степени сжатия (раз-
мер сжатого файла обьічно увеличивается лишь на сотне доли процента).
Вьіходньїе даннме арифметического кодера можно представить в виде
четьірех составляющих:
1. Составляющая, записанная в вьіходной файл, которая уже не может из-
мсниться.
43
Книга написана коллективом Шір:/Лууууу.сошрге88Іоп.пі/
Методьі сжатия данньїх(7000+ файлов о сжатии)
2. Один злемент (бит или байт), которьій может бьіть изменен переносом,
если последний возникнет при сложении значений нижней границь! ин-
тервала и размера интервала.
3. Блок злементов, имеющих максимальнеє значение, через которьіе по це-
почке может пройти перенос.
4. Текущее состояние кодера, представленное нижней границей интервала.
Например:
Составляющая, за- писанная в файл Злемент, которьій может бьіть изме- нен переносом Блок злементов, имеющих макси- мальнеє значение Нижняя грани- ця интервала
07 03 56 Е4 ЗА рррр 35 38 В1
+
Размер интервала ЕА 12 1А
=
Перенос зв 00 00 1Р4АСВ
При вьіполнении нормализации возможньї следующие действия:
1. Если интервал имеет приемлемнй для обеспечения заданной точности
размер, нормализация не нужна.
2. Если при сложении значений нижней границьі интервала и размера ин-
тервала не возникает переноса, составляющие 2 и 3 могут бьггь записанм
в вьіходной файл без изменений.
3. В случае возникновения переноса он вьтполняется в составляющих 2 и З,
после чего они также записьіваются в вьіходной файл.
4. Если злемент, претендующий на запись в вьіходной файл, имеет макси-
мальнеє значение (в случае бита - 1, в случае байта - ОхГГ), то он может
повлиять на предьідущий при возникновении переноса. Позтому зтот
злемент записьівается в блок, соответствующий третьей составляющей.
Ниже приведен исходнмй текст алгоритме, реализующего нормализа-
цию для интервального кодирования[3].
// Максимальнеє значение, которое может принимать
// переменная. Для 32-разрядной арифметики
// С00ЕВІТЗ = 31. Один бит отводится для
// определения факта переноса.
НеГІпе ТОР (1 «СОСЕВІТЗ)
// Минимальное значение, которое может принимать
// размер интервала. Если значение меньше,
// требуетея нормализация
МеГіпе ВОТТОМ (ТОР»8)
44
ййр:/Лууууу.сошрге88Іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1, Методи сжатия без потерь
// На сколько битов надо сдвинуть значение нижней
// границь; интервала, чтобьі остался 1 байт
#сІе£іпе ЗНІЕТВІТЗ (СОСЕВІТЗ-8)
// Если для хранения значений используется 31 бит,
// каждьій символ сдвинут на 1 байт вправо
// в вьіходном потоке и при декодировании приходится
// его считьівать в 2 зтапа.
#с!е£іпе ЕХТВАВІТЗ ((СОПЕВІТЗ-1)%8+1)
// Используемьіе глобальньїе переменнме:
// пех'С—СИаг - символ, которьій может бить изменен
// переносом (составляющая 2).
// саггу_соипСег - число символов, через которме
// может пройти перенос до символа пех£_сЬаг
// (составляющая 3).
// Іон - значение нижней границьі интервала,
// начальнеє значение равно нулю.
// гапде - размер интервала,
// начальнеє значение равно ТОР.
чоід епсо<1е_погта1І2е ( чоісі ) {
мЬіІе ( гапде <= ВОТТОМ ) {
// перенос невозможен, позтому возможна
// запись в вьіходной файл (ситуация 2}
і£( Хом < ОхЕЕ « ЗНІЕТВІТЗ ) {
оиЬриС_Ьуї.е ( пехС_сЬаг );
£ог (;саггу_соипбег;саггу_соил£ег—)
ои<:риї._Ьу1:е (ОхЕЕ);
пех£_сЬаг = Іон » ЗНІЕТВІТЗ;
// возник перенос (ситуация 3)
) еізе і£ ( Іои >= ТОР ) {
оиі:риі:_Ьу1:е ( пех1і_сЬаг+1 ) ;
£ог(;саггу_соипбег;саггу_соип£ег—)
оиСриЬ_ЬуЄе(0x0);
пехї_сИаг = Іон » ЗНІЕТВІТЗ;
// злемент, котормй может повлиять на перенос
// (ситуация 4)
) еізе {
саггу_соип(:ег++;
)
гапде <<= 8;
Хом = (Іои << 8) & (ТОР-1);
)
}
45
Книга написана коллективом Шір:/Лууууу.сошрге88Іоп.ги/
Мвтодьі сжатия данньїх(7000+ файлов о сжатии)
уоід сІесосІе_погта1І2Є ( уоісі ) {
иИіІе( гапде <= ВОТТОМ ) {
гапде «= 1 ;
Іои = 1ои«8 І
((пех£_сЬаг«ЕХТКАВІТ5) & ОхЕГ) ;
пех£_сЬаг = іпри£_Ьу£е() ;
10» 1= пех£_сЬаг » (8-ЕХТКАВІТ5);
гапде «= 8;
}
}
Для сравнения приведем текст функции, оперирующей с битами, из ра-
ботм [2]:
#де£іпе НАЬЕ (1« (С00ЕВІТ5-1) )
Ме£іпе ОЦАВТЕВ (НАЬЕ»1)
уоід Ьі£_р1из_£о11о»( іп£ ЬіС ) {
ои£ри£_Ьі£ ( Ьі£ );
£ог (; саггу_соип£ег; саггу_соип£ег—)
ои£ри£_Ьі£(!Ьі£) ;
}
уоій епсоде_погта1І2в( уоій ) {
»Ьі1е( гапде <= ООАКТЕВ ) {
і£( 1о» >= НАЬЕ ) {
Ьі£_р1из_£о11о»(1) ;
10» -= НАЬЕ;
) еізе і£( 1о» + гапде <= НАЬЕ ) {
Ьі£_р1из_£о11о»(0);
} еізе {
саггу_соип£ег++;
ІО» -= ООАКТЕВ;
)
Іою «= 1;
гапде «= І;
)
)
Vоіа сІесосІе_погта1І2е ( уоісі ) {
»Ні1е( гапде <= ООАКТЕК. ) {
гапде «= 1 ;
Іои = 1о»<<1 Ііпри£_Ьі£();
І
)
Процедура интервального кодирования очередного символа вьіглядит
следующим образом:
46
ййр:/Лууууу.сотрге88Іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
иоісі епсойе (
іп£. зутЬо1_£гед, // частота кодируемого символа
іп£ ргеу_£гед, // накопленная частота символов,
// предшествующих кодируемому
//в алфавите
іп£ £о£а1_£гед // частота всех символов
) { '
іп£ г «• гапде / £оСа1_£гед;
Іом + г*ргеу_£гед;
гапде = г*зутЬо1_£гед;
епсосіе^погтаїіге () ;
}
Упражнение. Написать процедуру интервального декодирования, использую-
щую приведенньїе вьіше функции нормализации.
Рассмотрим пример интервального кодирования строки "КОВ.КОРО-
ВА". Частоти символов задаются следующим образом:
Индекс Символ ЗутЬоІ_(гед Ргеч_(гед
0 О 3 0
1 К 2 3
2 В 2 5
3 Р 1 7
4 А 1 8
5 и п і 9
іоіаі (гец 10
Для кодирования строки будем использовать функцию сотргезз:
уоісі сотргезз (
ОАТАГІЬЕ *Оа£аГі1е // файл исходних данньїх
) {
1о» = 0;
гапде ТОР;
пех£_сЬаг - 0;
саггу_соип£ег - 0;
мЬіІе( ЮаЬаГіІе.ЕОГ ()) (
с = ОаСаГіїе.КеасіЗутЬої () // очередной символ
епсосіе ( ЗутЬо1_£гед[с], Ргеу_£гед[с], 10 );
)
47
Книга написана коллективом Ьйр:/Лууууу.сошрге88Іоп.пі/
Методи сжатия данньїх (7000+ файлов о сжатии)
Символ ЗутЬоІ _йед Ргєу Дгец іоуу Рапде Результат
0 0х7РРРРРРР
К 2 3 0x26666664 0x19999998
0 3 0 0x26666664 ОхО51ЕВ85О
В 2 5 0х28Р5С28А 0x01062400
1 9 0х29Е1В07С ОхОО1А36Е2
Нормализации 0х61В07С00 0х1А36Е200 0x53
К 2 3 0х698ОС232 0х053Е2ЕСС 0x53
0 3 0 0х698ОС232 0х0192А7АЗ 0x53
Р 1 7 0х6АА79ОЕС 0х002843Р6 0x53
Нормализация 0х279ОЕС00 0х2843Р600 0x5305
0 3 0 0х279ОЕС00 0х0С146364 0x5305
В 2 5 0х2ОА8ЮАР 0х026А7А46 0x5305
А 1 8 0х2Р96Е5Е7 0x0030 0907 0x5305
Нормализации 0х16Е5Е700 0x30 090700 0х53О55Р
Как уже бьіло отмечено, чаще всего при нормализации не происходит
переноса. Исходя из зтого, Дмитрий Субботин1 предложил отказаться от
переноса вовсе. Сказалось, что потери в сжатии совсем незначительньї, по-
рядка нескольких байтов. Впрочем, вьіигрьіш по скорости тоже оказался не
очень заметен. Главное достоинство такого подхода - в простоте и ком-
пактносте кода. Вот как вьіглядит функция нормализации для 32-разрядной
арифметики:
#ае£іпе СООЕВІТЗ 24
#йе£іпе ТОР (КССООЕВІТЗ)
#ае£іпе ВОТТОМ (ТОР»8)
#ае£іпе ВІСВУТЕ (0хГГ« (СООЕВІТЗ-8) )
уоіа епсоае_погта!іге( Vоіа ) {
иЬіІе ( гапде < ВОТТОМ ) {
і£( Іои & ВІСВУТЕ == ВІСВУТЕ &&
гапде + (Іои & ВОТТОМ-1) >= ВОТТОМ )
гапде = ВОТТОМ - (Іом & ВОТТОМ-1);
оиЬриС_ЬуСе(1ои>>24);
гапде<<=8;
1ом«=8;
}
)
Можно заметать, что избежать переноса нам позволяет своевременное
принудительное уменьшение значення размера интервала. Оно происходит
1 Отіїгу ЗиЬЬоІіп. русский народний гап^есодег// Сообіцение в зхо-конференции
ЕІйО Ш.СОМРКЕ88. І мая 1999.
48
1ііір:/Лууууу.сотрге88Іоп.іті/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
тогда, когда второй по старшинству байт іоху принимает значение ОхГГ,
а при добавлений к іоуу значення размера интервала гап§е возникает пере-
нос. Так вьіглядит оптимизированная процедура нормализации:
уоісі епсосіе_погта1І2Є ( уоісі ) {
мЬі1е((1ои л Іом+гапде)<ТОР ||
гапде < ВОТТОМ &&
((гапде = -Іом & ВОТТОМ-1),1)) {
оиСриС_ЬуЄе (1ои»24) ;
гапде«=8;
1ои«=8;
)
)
уоісі йесосІе_погта1І2Є ( уоісі ) {
иЬі1е((1ои л Іом+гапде)<ТОР ||
гапде<ВОТТОМ &&
((гапде= -Іои & ВОТТОМ-1),!)) {
Іои = 1ои«8 | іпри1:_ЬуЬе ();
гапде«=8;
}
}
Упражнение. Применить интервальное кодирование без переноси для строки
"КОВ. КОРОВА".
ЛИТЕРАТУРА
1 Магііп О. N. N. Найде епсобіп^: ап аІ£огійші £ог гетоуіп£ гесіїтсіапсу (гот
с1І£ІіІ2Є<і те$$а£е // Уідео & Оаіа Кесогсііп£ СопГегепсе, Зоийіатріоп. Іиіу
24-27,1979.
2 Моіїаі А. АгііЬтеііс Со<1іп£ Кеуізйед // Ргосеедіп£$ оГ Ваїа Сотргеязіоп
СопГегепсе. ЗпоауЬіпі, ІЛаЬ, 1995.
З ЗсЬіпсіІег М. А Ьуіе огіепіеб агійітеііс содіп£ // Ргосеебіп£5 о£ Оаіа
Сотрге58Іоп Сопйгепсе. 1998. Ьйр://\уут.сопфге85соп5и11сот /гап£есодег/.
4 Яблонский С. В. Введение в дискретную математику. М.: Наука, 1986.
Разд. "Теория кодирования".
Нумерующее кодирование
Английское название метода - Епитегаііуе Со<ііп£, или ЕНІЗС.
Цель - сжатие блока 2?-битовьіх злементов в предположении, что у него
єсть одна важная характеристика С, которую вьігодно сжимать отдельно от
остальньїх.
Такой характеристикой С может бьіть, например, сумма всех злементов
блока (или же произведение), или максимальнеє значение злемента, а менее
49
Книга написана коллективом 1ійр:/Лууууу.сошрге88Іоп.пі/
М^тоДьі сжатия ааннмх (7000+файлов о сжатии)
важной - вклад конкретних злементов в зту сумму (произведение), или по-
ложение злемента с максимальним значением внутри блока.
Основная идея состоит в том, чтоби формировать два блока: сохра*
няющий самую важную характеристику С и содержащий остальние данние
О (необходимне для восстановления исходного блока) - так, чтоби все ком-
бинации £) били почти равновероятни. И далее обрабативать зти блоки раз-
дельно: их характеристики существенно различньї. ' -
Например, сжимая блок из З' битов (Я=1, длина £=3), метод сохраняе^г
сумму битов 5, 0< 5 <3 (для е^ заїписи требуется уже 2 бита), а также запи-
сьівает положение единици 7Ь если 5=1, положение нуля 70, если 5=2, или
ничего, если 5=0 или 5=3.
3 Возможньїе блоки 4 2і
0 000 - -
1 100 - 0
010 - 1
001 - 2
2 011 0 -
101 1 -
110 2 -
3 111 - -
И далее считаем, что все 3 значення 20 равновероятни, а также все 3 зна-
чення 2\ - равновероятни.
Аналогично при сжатии блока X из 7 бит: сохраняем его сумму 5 <7 в З
бита и далее, в зависимости от зтой суммьі, номер к-й комбинации битов (во
множестве всех возможньїх К$[£], считающихся равновероятними), которая
описивает текущий блок X известной длиньї £=7 с известной суммой 5.
Если 5=0 или 5=7, сохранять к не нужно.
Если 5=1 или 5=6, єсть 7 вариантов для к.
Если 5=2 или 5=5, єсть 21 вариант.
Если 5=3 или 5=4, єсть 35 вариантов.
В общем случае, если длина битового блока £, а сумма его битов 5, то
вариантов для к существует
И=£!/(5! • (£-5)! ), (1.4)
т. е. (£-(5-1 ))(£-1).. .£ / (1 -2-3.. .5)
Как легко заметать, при любих £ и 5 числитель дроби кратен знаменате-
лю и деление будет без остатка. Произведение первих п сомножителей мис-
лителя кратно произведению первих п сомножителей знаменателя.
50
1Шр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Номера вариантов метод ЕЬІІІС считает равновероятньїми.
Таким образом, всего требуется Іо£2(£+1) бит для записи 5 (в данном
примере самая важная характеристика С - зто 8, сумма битов блока) плюс
1о§2(И) бит для записи остальннх (равновероятньїх) данних £> (в нашем
примере - зто К, вмчисляемая по формуле (1.4)).
Если требуется сжать блок К-битовьіх злементов Х[г], известно два
подхода:
І. Преобразовать его в блок битов В, помещая в В на каждом і-м шаге Х[і]
нулей и одну единицу (или, наоборот, Х[і] единиц и один нуль).
2. Преобразовать его в К блоков битов: в первом блоке - старшие бити, во
втором - следующие (возможно, сортированние по первим, методом
сортировки параллельних блоков), затем третьи по старшинству и т. д.,
до Л-х (все ;-е можно сортировать по всем предьідущим, старшим (/-1)
битам злементов блока X).
Размер данних в результате применения ЕМПС уменьшается, если дан-
ньіе соответствуют ЕЙІІС-модели: важна одна характеристика, значення ос-
тальньїх равновероятньї.
Методи зтой группи являются трансформирующими и блочними
(т. е. могут применяться только в том случае, когда задана длина блока с
данньїми, подлежащими сжатию).
В общем случае скорость работьі компрессора равна скорости деком-
прессора и зависит и от размера данних и от их содержания. Оба идут по
создаваемому множеству вариантов К$[Л]: компрессор - чтобн найти к -
положение сохраняемого варианта (его номер) в создаваемом множестве К^,
декомпрессор - чтобн найти вариант, зная его номер к.
Впрочем, если сжимаемнх блоков много, скорость работн декомпрессо-
ра вьіше скорости компрессора. Скорость обоих више (и уже не зависит от
содержания данньїх), поскольку не требуется каждьій раз создавать множе-
ство вариантов. Но памяти необходимо больше, так как требуется хранить
описання множеств.
Так, в рассмотренном више случае сжатия 7-битового блока зто будет
три массива: из 7, 21 и 35 злементов. Если сжимаем поток 7-битовнх бло-
ков, имеет смисл один раз создать зти 3 массива К|[7], К2[21], К3[35]. Ком-
прессор будет делать поиск заданной комбинации битов IV в зтих Кь К2, К3
и сохранять номер к, а декомпрессор, получая к, восстанавливать исходную
комбинацию Ж. С целью еще более повисить скорость можно сделать все
З массива длиной 27=128.
51
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.пі/
Матодьі сжатия данньїх(7000+ файлов о сжатии)
Векторное квантование
Цель скалярного квантования - преобразование потока Я-битовм
ментов, такое, чтобм в формируемом вьіходном потоке оставалось н-
чем (заданное число) N значений.
Иллюстрация скалярного квантования, N=5, - нарис. 1.4.
<__*__і___*___і_*___і__*__і___*__>
-4 -3-2-1 0 1 2 Зйк4
Рис. 1.4
Входное значение из диапазона На вьіход записьівается
(-^>.-3) -4
(-3,-1] -2
М.+1) 0
Г+1,+3) +2
Г+З.-ню) +4
Аналогично цель векторного квантования (Уесіог 9иапбга^пп
преобразование потока групп злементов (векгоров), такое, чтобм
ной поток записьівался один из N векгоров.
Иллюстрация векторного квантования для двумерного случя-
рис. 1.5.
Рис. 1.5. Иллюстрация векторного квантования для двух измепениі
52
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Вьіходнне вектори, обозначаемьіе звездочками *, назмваются кодирую-
щими векторами (или код-векторами), а множество всех код-векторов назн-
вается код-книгой.
Основная идея состоит в том, чтобьі каждьій входной вектор X = (Х^,
Хі,г,---> заменять адресом (в код-книге) того код-вектора С = (С^,
отклонение которого от входного, определяемое как £> = (Хц-
- С7,!)2+(А7,2-Су,2)2+..-+(Хі,к-С^)2, минимально.
Размер данньїх в результате применения уменьшается, если данние
соответствуют модели, либо если сжимаем с потерями.
Методи зтой группьі являются трансформирующими и поточними
(т. е. могут применяться даже в том случае, когда длина блока с данннми
не задана).
Из краткого описання общей идеи видно, что
І. Процесе сжатия сводится к поиску по код-книге и в общем случае
сложнее процесса разжатия, внполняющего копирование задаваемнх векго-
ров из код-книги в разжатий поток.
2. Задача метода может формулироваться двояко:
а) задан размер код-книги и требуетея заполнять ее так, чтоби сум-
марное отклонение било минимальним;
б) задана верхняя граница суммарного отклонения (ереднего по
заданному числу векторов) и требуетея заполнять код-книгу так,
чтоби ее размер бил минимальним.
З. Размерн злементов внутри Л-мерного вектора X могут бить разними.
4. В еще более сложном случае размери N векторов разньїе: кІг к2,..к3, но
одинаковн размерн злементов внутри зтих N векторов переменной длини.
И задача состоит в оптимальном разбиении входного потока на вектори.
Прямое преобразование
В простейшем случае - просто деление компонент вектора на заданнне
числа В(. Если компонента одна, а 5, = 5 = 4:
5[і]=5[і]/4;
Следующий по сложности вариант - поиск код-вектора (одномерного) в
код-книге (массиве СодеВоок размером СВ Зіге, в котором код-векторн
сортированьї по возрастанию значений):
// найдем минимальний код-вектор
// со значением, большим 3[і]
£ог (суєсї.ог=0, зСер=СВ_Зіге/2; збер>0; збер/=2)
і £ (3 [ і ] <СосіеВоок [суесСог+зСер] ) ^ес+ог+=зЬер;
// определим, к нему или к
53
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.пі/
Методьі сжатия данньїх(7000+ файлов о сжатии)
/ / предьідущему ближе кодируемьій 3 [ і ]
і£ ( (3[і]-СобеВоок[<^ес+ог-1])<(СодеВоок[суєсїог]-3[і] ) )
суєсЬог—;
Обратное преобразование тривиально: из код-книги берутся злементм
по адресам, задаваеммм значеннями злементов входного сжатого потока.
Один из самих распространеннмх методов, использующих векторное
квантование, - палитризация изо^ражений.
Из /?о-битовмх злементов, применяя УО, создаем 7?|-битовьіе, являю-
щиеся указателями на вектора-цвета (в таблице-палитре), причем
1) так, чтобм расхождение между исходнмм множеством 50 и восста-
новленннм по палитре множеством 5і бмло минимально возможннм;
2) 2?|</?о.
В данном случае код-книга содержит палитру, а код-векторм єсть индек-
сьі цветов в зтой палитре. Степень сжатия будет равна Например, ес-
ли Яо=24, Я|=8, то получаем сжатие в 3 раза.
Однако применение векторного квантования не обязательно означает,
что сжатие будет с потерями. Можно сохранять полностью и информацию
об отклонениях реальних векторов из входного потока от аппроксимирую-
щих их векторов из код-книги.
УВЕЛИЧЕНИЕ СКОРОСТИ СЖАТИЯ
Если памяти достаточно, а размер входного блока существенно больше
множества возможньїх значений векторов входного блока Хь имеет смисл
заранее, при инициализации, создать таблицу, ставя в соответствие всевоз-
можнмм X/ оптимальнме для них (по критерию £>) код-векторьі.
Глава 2. Кодирование источников
данньїх типа "аналоговьій сигнал"
Линейно-предсказьівающее кодирование
Английское название метода - Ьіпеаг Ргейісііоп Сосііпд (ЬРС).
Цель - сжатие потока Я-битовмх злементов в предположении, что зна-
чение каждого из них является линейной комбинацией значений й предн-
дущих злементов:
і=і-н
ї ,
54
1Шр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
,Раздел 1. Методьі сжатия без потерь
где 5/ - /-Й А-битовьій злемент; К.] - некоторьіе козффициентьі, в общем
случае непостоянньїе.
Основная идея состоит в том, чтобьі в формируемьій поток записмвать
ошибки предсказаний: разности между реальними 5) и предсказанннми
значеннями:
Размер данньїх в результате применения ЬРС не изменяется. Более того,
размер злементов К может даже увеличиваться на единицу: /?'=/?+1 - за счет
добавлення бита для сохранения знака разности.
Чем точнеє предсказание, тем больше в преобразованной последова-
тельности злементов с близкими к нулю значеннями, тем лучше можно
сжать такую последовательность.
Для сжатия результата работн метода может бить применена любая
комбинация методов - КГЕ, МТР, ОС, РВ8, НІІРР, АКІС, ЕЬГОС, 8ЕМ...
Методи зтой группи являются трансформирующими и поточними
(т. е. могут применяться даже в том случае, когда длина блока с даннмми
не задана). Скорость вьіполнения прямого преобразования равна скорости
обратного преобразования и зависит только от размера данних, но не от их
содержания, т. е. Скорость=О(Размер). Памяти требуется порядка й байт.
Из краткого описання общей идеи видно, что
1) можно один раз, при инициализации, задать как к, так и К/,
2) с точки зрения сложности вичислений и качества сжатия полезно ог-
раничить к, но периодически определять оптимальние Ку
3) теоретически одна и та же зависимость может бить задана несколь-
кими формулами, например
и і"/= + Зі-іІІ,
но реально, из-за использования целочисленной арифметики, они не
зквиваленти; в данном случае при вичислении З",- используется два
округлення вместо одного, позтому ми получим различие.
ПРЯМОЕ преобразование
В базовом простейшем случае иллюстрируется одной строкой:
//предполагаем, что 5[і)®3[і-1] и, следовательно, В[і]»0
О[і]=5[і]-5[і-1];
где 8[АГ| - исходний массив (Зоигсе, источник); В[Д(] - вмходной массив
преобразованнмх данних (Пезііпаїіоп, приемник, с отклонениями, т. е. раз-
ностями, дельтами).
55
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.пі/
Методьі сжатия данньїх (7000+ файлов о сжатии)
Такой вариант обьічно назьівается дельта-кодированием (Веііа Сойіп£),
поскольку записьіваем приращения злементов относительно значений пре-
дьідущих злементов. £сли в значеннях злементов имеется ярко вьіраженная
линейная тенденция, то в результате получаем ряд чисел с близкими значе-
ннями.
Три строки, если требуетея писать в тот же массив:
сиггепС=3 [і]; //возьмем очередной злемент
З[і]=сиггепї-1азС; //вичислим его разность с прошлнм
1аз£=сиггеп£; //теперь очередной стал прошлнм
Например, из блока (12, 14, 15, 17, 16, 15, 13, 11, 9), применив зтот про-
стейший вариант преобразования, получим: (2,1,2, -1, -1, -2, -2, -2).
Более сложнмй вариант: Л=4, предполагаем, что К,=1/4:
8[і]~( 8[/-1] + 8[/-2] + 8[г-3] + 8[/-4] )/4. Тогда в алгоритме:
0[і]=3[і] - (3[і-1]+3[і-2]+3[і-3]+3[і-4])/4;
Здесь мьі предполагаем, что явно вьіраженная линейная тенденция от-
сутствует и значение очередного злемента примерно равно значенню пре-
дьідущего, причем О[і] приобретает отрицательние и положительньїе зна-
чення с равной вероятностью. Чтобьі компенсировать влияние случайньїх
возмущений, значение следующего злемента принимаем равньїм ереднему
арифметическому нескольких последних злементов. С другой сторони, чем
больше злементов уередняем, тем консервативнеє наша модель, тем с
большим запаздьіванием она будет адаптироваться к существенньїм изме-
нениям (необязательно линейного характера) во входньїх данньїх.
Если результат преобразования требуетея записьівать в тот же входной
массив 8, то зто можно реализовать следующим образом. Введем вспомога-
тельньїй массив Базі, в котором будем хранить исходньїе значення послед-
них четьірех преобразованньїх злементов массива 8.
іпї. ЬазС[4] = { 0,0,0,0 };
іпс 1азС_роз=0;
И далее в цикле преобразования для каждого злемента 8[/] вьшолняем:
сиггепС=3[і]; // возьмем очередной злемент и вичислим
// его разность с предсказнваеммм значением:
З [ і ] =сиггеп£.- (ЬазЬ [0] +ЬазЬ [ 1 ] +ЬазС [2 ] +Ьазї [3]) /4;
ЬазС[1азС_роз]=сиггепС; // внесем сиггепС в массив ЬазС
1а5£_роз=(1аз<і_ро8+1)43; // новое значение позиции в Ьаз£
Упражнение. Как будет вьіглядеть алгоритм для модели 8[/]=( 3[#—1] + 3[/-2] +
+8[А-3] )/3? Будет ли он вьіполняться бьіетрее или медленнее рассмотренного
варианта с й=4 и К/=1/4?
56
йіір:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Обратное ПРЕОБРАЗОВАНИЕ
Алгоритм очень похож на алгоритм прямого преобразования. Единст-
венное отличие - теперь вьічисляем не разность, а сумму предсказьіваемого
значення и отклонения:
8[і]=0[і]+8[і-1]; // по предположенному 8[і]=8[і-1]
Если для В и 8 используем один и тот же массив (8):
З[і]=3[і]+5[і-1]; // сумма дельта с предмдущим злементом
В случае Л=4 , X,—1/4 :
3[і]=Р[і] + (8[і-1]+3[і-2]+3[і-3]+3[і-4])/4;
Если пишем в тот же массив, то и в зтом случае, в отличие от прямого
преобразования, не требуется каких-то ухищрений:
3[і]=3[і] + (8[і-1]+8[і-2]+5[і-3]+8[і-4])/4;
Действительно, к моменту обратного преобразования очередного зле-
мента 8[і] в ячейках 8[і-1],8[г—4] уже находятся восстановленнме значе-
ння, а не отклонения, что нам как раз и нужно. Таким образом, использовать
при разжатии два массива совершенно необязательно.
Пути увеличения скорости сжатия
Если можно записьівать в тот же массив, то можно обойтись без излиш-
него массива Ьа8І[й] и связанньїх с ним операций, вьіполняемьіх на каждом
шаге цикла преобразования.
Рассмотрим все тот же пример с Л=4 , Л/=1/4. Сделаем так, чтобьі внутри
цикла бьіло присваивание:
8[і-4]=3[і] - (3[і-1]+3[і-2]+3 [і-3]+5(і-4])/4;
Тогда первне 4 злемента нам придется записьівать отдельно:
ЕігзЕ[0]=3[0];
ЕігзС[1]=3[1] - 3[0];
ЕігзС[2]=3[2] - (3[1]+3[0])/2;
ЕігзС[3]=3 [3] - (3[2]+3[1]+3[0])/3;
Далее с помощью цикла преобразуем цепочку из последних (М4) зле-
ментов и запишем результати в первьіе (N-4) ячейки массива 8:
£ог (і=4; і<М; і++)
8[і-4]=8[і] - (3[і-1]+3[і-2]+3 [і-3]+5[і-4])/4;
Или даже так:
зшп=5(3]+3[2]+3[1]+3[0];
Еог (і=4; і<Л; і++)
І=3[і-4], 3[і-4]=8[і] - зит/4, зит=зит-]+8[і];
57
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.пі/
Матодм сжатия данньїх (7000+ файлов о сжатии)
Теперь мьі можем переписать первьіе 4 преобразованньїх злемента из
вспомогательного массива Рігяі в 8:
£ог (і=0; і<4; і++) 5[М-4+і]=ГігзЬ[і];
Таким образом, дополнительной памяти вне функции преобразования не
требуется, внутри - только к злементов, скорость преобразования в общем
случае та же, какая бьіла бьі при записи во второй массив.
Единственное осложнение - метод, сжимающий данньїе, полученньїе в
результате преобразования ЬРС, должен сначала обработать к злементов из
конца массива 8, а лишь затем (№-к) из начала.
Если работаем не с потоком, а с блоком и длина массива 8 известна за-
ранее, можно обрабатьівать из конца в начало: в цикле по і от N-1 до 0 де-
лаем: 8[і+1]-=8[/].
УВЕПИЧЕНИЕ СКОРОСТИ РАЗЖАТИЯ
Если памяти достаточно и входньїх данньїх много, может вказаться вьі-
годньїм сделать табличную реализацию каких-то арифметических операций
(функций). С целью ускорения работьі основного цикла можно, например,
за счет зтого избежать операции деления, вьшолняемой обьічно гораздо
дольше, чем операции сложения/вмчитания и записи/чтения в/из памяти.
Например, вместо
3[і-3]=8[і] - (3[і-1]+3[і-2]+3 ІІ-3])/3;
намного бьістрее на большинстве процессоров и для большинства компиля-
торов будет
3[і-3]-5[і]- Уа1ие[ 3[і-1]+5[і-2]+3[і-3] ];
или даже
// К - размер злементов массива 8 в битах
З [і-3]=Уа1ие2 [ (3 [і-1]+5 [і-2]+8 [і-3] )«К + 8[і] ];
Упражнение. Напишите цикли, заполняющие вспомогательньїе массивьі
УаІие[ ] и \/аІие2[ ].
Естественно, такой подход применим и для увеличения скорости сжатия.
Пути улучшения степени сжатия
Как мм уже отмечали, целесообразно повторно вичислять козффициен-
тьі К/ через каждьіе Р шагов. На оснований последних обработаннмх дан-
ньїх находим значення козффициентов, оптимальньїе с точки зрения точно-
сти предсказания значений злементов, встреченньїх в блоке последних об-
работанньїх данньїх. Если Р=1, такой вариант обьічно назьівается адап-
тивним. При большом значений Р вариант назьівается статическим, если
значення /у записьіваются в сжатьій поток, и "полуадаптивньїм", "блочно-
58
Щір:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
адаптивним" или "квазистатическим", если в явном виде значення X, не за-
писиваются.
При сжатии с потерями можем сохранять не точньїе значення каждой
разности £>, = 5, - ДХ/ф), а только первьіе В бит или, например, номер пер-
вого ненулевого бита. Но тогда при сжатии нужно использовать на сле-
дующих шагах то же значение 5„ которое получится при разжатии, а имен-
но 5/= Т.(К/!$+Оі', т. е. результат предсказания плюс сохраненная часть
разности-дельтьі.
Метод ЬРС применяется обьічно для сжатия аналогових сигналов. И как
правило, кажднй злемент сигнала отклоняется от своего предсказьіваемого
значення не только из-за "сильних" обусловленннх изменений - зволюции,
но и из-за "слабих" фонових колебаний, т. е. шума. Позтому возможно два
противоположньїх типа моделей:
• вклад шума невелик по сравнению с вкладом зволюции;
вклад зволюции невелик по сравнению с вкладом шума.
В первом случае ми будем предсказивать значение 8[і] на оснований
сложившейся линейной тенденции, во втором - как равное среднему ариф-
метическому И предидущих злементов.
Тенденция может бить и нелинейной, например 8[і] =В[і-1] +2*(8[ї-1]-8[і-
- 2]), но такие модели на практике в большинстве случаев менее вигодни и ми
их рассматривать не будем.
Если ресурсов достаточно, можно вичислять предсказиваемьіе значення,
даваемие несколькими моделями, и затем либо синтезировать зти несколь-
ко предсказаний, либо вибирать (через каждне Р шагов) ту модель, которая
оптимальна на заданном числе предидущих злементов.
Требуется минимизировать ошибки предсказаний, позтому рациональ-
нее (вигоднее) та модель, которая дает наименьшую сумму абсолютних
значений зтих ошибок:
тіп(Е|ДіУ
Зта задача имеет злементарное аналитическое решение: тіп |І)| = тіп (|У-
- К*Х\) -ЗК= У*Х', где ¥ - вектор из 8[і] (реально наблюдаемьіх), К - матрица
козффициентов и X-матрица 8/і-х] (х = Но 1) сложность вьічисления
обратной матрицьі не менее О(іі2) и перевьічислять ее невьігодно, 2) високая
точность прогноза обьічно не нужна, так как на практике стационарние по-
следовательности встречаются редко.
Рассмотрим подробнее на примерах.
59
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.пі/
Методи сжатия данньїх (7000+ файлов о сжатии)
Общий случай
Если Л=1, то учитьівается только один последний злемент: 8[/]=Л?8[/-1].
Об зволюции не известно ничего, но можно предполагать, что Х=1.
Упражнение. Изобразите сигнал, оптимально сжимаемьій с помощью модели
сй=1 иК=-1.
Все зто, однако, не помешает нам действовать следующим образом: ви-
берем начальнеє значение Ко, шаг ЗіерК изменения К, размер окна Р, а так-
же Р. Будем следить, с какой из трех моделей - К=К.й, Кр=К0+8іерК, Кт=Кй-
-ЗіерК - сжатие последних Р злементов лучше (меньше суммарная ошибка
предсказания), и через каждьіе Р злементов вибирать лучшую (вданннй
момент) из трех моделей, с помощью которой и будут сжиматься следую-
щие Р злементов.
Если зто не текущая, а одна из двух с ±8іерК, то изменяютея и с Кт,
если, конечно, их значення не совпадают с границями: -1 или 1.
Например, можно использовать Ко=О, 8іерК=1/4, Р=10 и Р=2. Имеет
смисл задать еще один параметр М - минимальний размер виигриша оп-
тимальной модели у текущей. Если внигриш меньше М, то отказиваемся от
смени модели.
Следующий по сложности вариант использует переменний шаг для К.
Также ми можем похожим образом корректировать Р (например, изменять с
шагом ЗіерР, через каждьіе обработанних злементов).
Если Н=2
Виражение 5, = можно всегда переписать в таком виде:
х-і
/•і
Позтому модель при Л=2 можно представить как
8Ш=^-8[/-1 ] + К2( 8[/-1] - 8[/-2]).
Найдем значення козффициентов зволюционной модели. Если шум
стремится к нулю, то изменения злементов обьясняются только линейной
тенденцией (зволюцией). Иначе говоря:
8[/]-8[/-1]=8[/-1]-8[/-2].
Отсюда получаем: АГ|=1, К2=\.
Для шумовой модели 8[/]=(8[/-1]+8[/-2])/2, и козффициентьі получим
из системи:
К} +К2= 1 /2 (козффициент при 8[/-1])
60
ййрї/Лууууу.сошргевмоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методи сжатия без потерь
-К2=1/2 (козффициент при 8|7-2])
Находим: /ч=1, К2= -1/2. Таким образом, имеет смисл корректировать К2
в диапазоне не от 0 до І, как может показаться на первьій взгляд, а от -І/2
до І.
Если й=3
8[/]=*,-8[/-1] + К2(8[М]-8[/-2]) + Я3-(8[і-2]-8[ї-3]). (2.1)
У зволюционньїх моделей уже нет однозначного ответа о К\, К2 и К3:
Кі=1, К2+К3=1 (так как в общем случае через 3 точки нельзя провести пря-
мую). Например, можно взять К2=3/4 и /С3=1/4, т. е. последнее приращение
имеет втроє больший вес, чем предпоследнее. Или же Кг=2, К3= -1 (вторая
производная постоянна).
Шумовая модель в одномерном случае одна при любьіх й, и при й=3:
8[/]=(8[і-1] + 8[/-2] + 8[/-3])/3 (2.2)
Попробуєм совместить обе модели - шумовую и зволюционную.
При каких К\, К2 и К3 зволюционная (2.1) становится шумовой (2.2)?
Из системи
К\+К2-1/3 (козффициент при 8[М]);
-ЛГ2+^3=1/3 (козффициент при 8[/-2]);
-А73=1 /3 (козффициент при 8[ьЗ])
находим: К\=1, К2~ -2/3, К3- -1/3.
Имеет смисл питаться корректировать К3 от -1 до 1, при зтом: (К2+К3)
от -1 (шумовая модель) до 1 (зволюционная), т. е. К2 от (- 1-к3) до (1-/С3):
К2\к3 .... -1 1
-1-Кз ш
1-Х3 3 3 3 3
Ш - такая пара значений (К2= -2/3, К3= -1/3) соответствует шумовой моде-
ли; 3 - такие пари /С2+/С3=1 соответствуют зволюционной (а остальнне -
"средней").
При й = 2 существует только одна зволюционная модель (через две точ-
ки всегда можно провести только одну прямую), по котсрой предсказивае-
мое значение $[/] = 5<2)[/] (рис. 2.1.);
При й = 3 возможно использование множества модел зй: например, если
спитать изменение 5[/]-5[/-1] более важним, чем 5[і-2]-5[/-3], то такая мо-
дель может дать, например, предсказание 5'3,[/] или, с:ли считать 5[/-2]-
-5[/'-3] и ОД-5[/-1] равноправньїми, прогнозное значение ^3)[/].
61
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.пі/
Методи сжатия данних (7000+ файлов о сжатии)
Рис. 2.1. Зволюционная модель при к=2 и к=3
Кроме того, при й=3 возникает возможность уменьшать шум. Метод
заключается в следующем. После того как найдено среднее значение (8[ї-
1]+8[/-2]+8[і-3])/3, определим, какой из трех злементов больше отклоняется
от него. Будем считать, что именно зтот злемент содержит больше шума,
чем остальнме два, позтому именно его учитмвать не будем (или, что то же
самое, положим его равнмм полусумме двух остальнмх). В качестве пред-
сказания, даваемого шумовой моделью, возьмем полусумму двух остальнмх
злементов.
Аналогично при й=4 єсть возможность взять 3 приращения ("дельти") и
оставить те два, которме ближе к среднему всех трех.
Остается добавить, что ряд методов для сжатия речи с потерями (СЕЬР,
СЗ-АСЕЬР, МЕЬР) использует ЬРС для вьічисления нескольких характери-
стик фрагментов сигнала (процесе назмваетея ЬРС апаїузіз). После обратно-
го процесса (ЬРС зупйіезіз) получаетея сигнал с теми же характеристиками,
но совершенно другими данньїми, т. е. значеннями злементов.
Двумерний случай
Рассмотрим только самий простой обход плоскосте1 - строками.
В каждой точке плоскосте уже обработаннме, известнме злементьі -
вьіше данной точки, а также на том же уровне, но левее ее.
'Задача обхода плоскости возникает при обработке двумерньїх данньїх. Цель
обхода - создание одномерного массива Ц из двумерного 8. Подробнее смотри
в разд. 2.
62
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздал 1. Методьі сжатия б<з потерь
8[/-£-1] 8[/-£] 8[і-£+1]
8[М] 8И
Здесь Ь - число злементов в строке. Ближайших к 8[і] злементов - четьіре.
Обозначим для краткости так:
А В С
О Е
У шумовой модели єсть 4 варианта с й=і, 6 вариантов с И=2,4 варианта
с й=3 и один с й=4:
Е=К| О + К2С + К3 В + К4 А. (2.3)
Можно изначально задать Кі=К2=Кз=К4=1/4 и корректировать Кі вмше-
изложенньїм методом. Границьі будут заданьї условиями: К}>0, К.і+К2+К.2+
+^4=1, и, например, К\=К.2, К2=К4 (и таким образом, Кі+К2=і/2, достаточно
корректировать Кі).
У вариантов с й>2 єсть возможность уменьшать шум тем же методом,
что и в одномерном случае.
Таким образом, если использовать только 4 или меньше ближайших
злементов, шумовая модель дает 20 вариантов: 4-е й=1, 6-е й=2, 8-е й=3
и 2 - с й=4.
Зволюционная модель делает то же предположение, что и в одномер-
ном случае: сохраняется линейная тенденция, приращение на текущем шаге
примерно равно приращению на предьідущем. Но теперь, в двумерном слу-
чае, необходимо как минимум 3 злемента, а не 2:
Е=ЛгВ + К2(і)-А);
Е=/СґО + Л;2(В-А); (2.4)
Е=^,О + ^2(В-А) + ^3(С-В). (2.5)
Первьіе два варианта, по предположению зволюционной модели, сводят-
ся к одному: Кі=К2=І. В третьем, при коррекции в рамках зволюционной
модели, границь! таковьі: К\-І, /С2+/С3=1 .
Попробуєм построить модель с й=4, обьединяющую два противополож-
ньіх полюса - шумовой и зволюционньїй.
При каких К\, К2 и К3 зволюционная модель (2.5) становится шумовой:
(2.3)сА>1/4?
к|=1 /4 (козффициент при О)
К2=І /4 (козффициент при С)
К2-Кз= І /4 (козффициент при В)
~К2= І /4 (козффициент при А)
63
Книга написана коллективом К((р:/Лу\у\у.сотрге‘і‘ііоп.і'и/
Методи сжатия данньїх (7000+ файлов о сжатии)
Решений нет, и правильний ответ: ни при каких. Потому что в (2.3) ко-
зффициентьі при С, В и А должньї бить Кі>0. Применяя зто условие к (2.5),
получаем:
(С): К3>0;
(А): ЛГ2<0;
(В): К2-К3>0 (зто несовместимо с результатами по С и А).
Тем не менее синтез шумовой и зволюционной модели при й=4 возмо-
жен. Будем брать предсказание того из 20 вариантов шумовой модели, ко-
торьій ближе всего к предсказанию зволюционной, т. е. разность между ни-
ми минимальна.
Как раз такой путь реализован в популярном алгоритме РМС, а именно в
самом сложном, самом интеллектуальном его фильтре РаеіЬ: 3 варианта
шумовой модели (с использованием злементов А, В и В) и зволюционная
модель (2.4). По сути зто тот же метод, что и описанньїй вьіше в подразд.
"Общий случай", только вместо среднего по трем точкам берется "двумер-
ное зволюционное" значение и исключаются два злемента, а не один.
Другой синтез возможен, если зволюционную модель модифицировать:
Е=К, -О +К2(В-А) +К3-(С-В)+К4-А; (2.6)
Е=К, О +К2(В-А) +К3-(С-В)+/С4-В; (2.7)
Е=К1 О +К2-(В-А) +К3(С-В)+К4С. (2.8)
Чтобн формули описьівали зволюционную модель, должно бьіть К4=0,
Кі=К2+К3=1. В шумовой модели Кі=1/4, а К2, К3 и К4 найдем из условий: ко-
зффициентьі при А, В и С должньї бьггь равнн 1/4:
в случае (2.6) С: К3=1/4, В:К2=1/2, А:К4=3/4;
в случае (2.7) С: К3=1/4, А:К2=-1/4, В:К4=3/4;
в случае (2.8) А: К2—1/4, В:К3=-1/2,
Рассмотрим, например, (2.7). Имеет смнсл корректировать К\ от 1/4 (шу-
мовая модель) до 1 (зволюционная); К4 найдется из условия К|+К4=1;
К3=1/4; К2+К3 от 0 (шумовая) до 1 (зволюционная), т. е. К2 от -1/4 до 3/4.
Таким образом, из (2.7) получается зволюционная модель при К\=1,
К2=3/4 и шумовая при Кі=1/4, К2= -1/4.
Упражнение. Каким будет синтез зволюционной и шумовой моделей в случаях
(2.6) и (2.7) ?
ЬРС в алгоритме РN(^
Для сжатия изображения можно ввібрать одну из следующих ЬРС-мо-
делей (назьіваемьіх также фильтрами):
1) Е=0 (нет фильтра);
64
ййр:/Лууууу.сошрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
2) Е=В (злемент слева);
3) Е=В (злемент сверху);
4) Е=(В+О)/2;
5) вмшеописаннмй алгоритм РаеіЬ.
Все 5 моделей - вариантьі шумовой модели, и только последняя модель
является комбинированной, учитьівающей зволюцию.
ЬРС в алгоритме Ьохзіею Ьре$
Может бьіть задан один из восьми предсказателей-фильтров:
1) Е=0 (нет фильтра);
2) Е=В (злемент сверху);
3) Е=В (злемент слева);
4) Е=А (вьіше и левее);
5) Е=В+І)-А;
6) Е=В+(О-А)/2;
7) Е=О+(В-А)/2;
8) Е=(В+О)/2.
Пятьій, шестой и седьмой - вариантьі зволюционной модели, осталь-
нме - шумовой.
Вьібор фильтра
Итак, имеем множество фильтров 5рп[Х1У]=5п(.^-5[А'-/,У-у]) дающих
оценки-предсказания 8рп для значення елемента в позиции (Х,¥) как функ-
цию 8п от значений злементов контекста, т. е. злементов, соседних с теку-
щим 5[ХУ]-
Два уже рассмотренньїх (в подразд. "Общий случай") пуги дальнейших
действий:
1) вибрать одно значение 8рп, даваемое той функцией 5П, которая точнеє
на заданном числе предидущих злементов;
2) вибрать значение, вмчисляемое как сумма всех 8рп, взятих с разньї-
ми весами: 8Р = Ь(ї¥п-8р„),
Кроме довольно очевидного способа - корректировки весов, с кото-
рмми берутся предсказания, даваемме разнмми фильтрами, єсть и еще ва-
риантьі:
Брать те К значений 8рп, которме дают 8П, лучшие на К (задаваемом чис-
ле) ближайших злементов контекста (некоторме из зтих 8П могут совпа-
дать, и их останется меньше чем К).
Все функции 8П сортируются по значенню точносте предсказания на
ближайших злементах контекста, и вмбирается несколько функций,
дающих лучшую точность.
65
Книга написана коллективом 1ійр:/Лууууу.сотрге88Іоп.ги/
Методи сжатия данньїх (7000+ файлов о сжатии)
Четвертий вариант является простим расширением первого. Третий же
предполагает постановку в соответствие каждому злементу одной 5П, даю-
щей для него самое точнеє предсказание. В обоих случаях, если требуетея
вибрать одну 5П из нескольких 5, с одинаковнм значением точности, можно
посмоїреть значення точности зтих 5, на большем числе злементов.
Во 2, 3 и 4-м часто полезно уменьшить шум вншеописанним способом.
И в конечном итоге сложить оставшиеся 5Р = В простейшем слу-
чае 1¥п=1/Н, где Я- количество оставшихся 5П.
И еще три простих, но важних замечания.
Во-первнх, сжатие обьічно лучше, если значення оценок-предсказаний
8рп не виходят за границьі диапазона допустимих значений злементов
входного потока 8[і]. Если Л<8 [/]<£, то и 8рп[/] должньї бить Л<8рп[і]<5.
Во-вторих, если известно, что доля шума постоянна во всем блоке
данньїх, очень полезно делать 8ЕМ до ЬРС, если нет другого метода для
отделения шума.
И в-третьих, в каждой точке (х,у) веса Клі) значений 5а,ь из (х-а, у-&)
должни зависеть от расстояния до (х,у), вичисляемого как К-(а2+Ь2)112. Зти
веса должни убивать с увеличением расстояния К. Из четирех ближайших
злементов контекста, рассмотренних в подразд. "Двумерний случай", В и В
находятея на расстоянии 1, а А и С на расстоянии 21/2. Позтому, если как в
формуле (2.3), шумовая модель складивает значення четирех ближайших
злементов контекста с разними весами К{:
Е=КҐВ + К2С + Лз-В + Х4А
имеет смисл задавать /Сі=/ч, Х2=^4> и еще из-за учета расстояний К2/Кі=2112
(и конечно, А?і+ЛГ2+Л?з+Л'4= 1).
. Точно так же при вичислении точностей фильтров на злементах контек-
ста ошибки их предсказаний (а точнеє, абсолютнме значення зтих оши-
бок) должни учитиваться с весами К^ь, зависящими от расстояний:
К^К^+Ь2)'12).
У зволюционной модели, использующей 4 злемента контекста (А, В, С,
В), приращения (В-А), (В-А) и (С-В) находятея на равном расстоянии и
имеют одинаковмй вес. Но если используется больше четирех злементов,
тоже необходимо вичислять расстояния.
Характеристики методов семейства ЬРС:
Степень сжатия: увеличиваетея примерно в 1.1-1.9 раза.
Типи данньїх: методи предназначени для сжатия количественних
данньїх.
Симметричность по скорости: в общем случае 1:1.
Характерньїе особенности: чем меньше доля "шума" в данньїх, тем
’ вигоднее применение методов ЬРС.
66
КНрі/Луууху.сотргекіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Субполосное кодирование
Английское название метода - ЗиЬЬаші Со<ііп§ (8С). Дословньїй пере-
вод - кодирование поддиапазонов.
Цель метода - сжатие потока К-битовьіх злементов в предположении,
что значение каждого из них отличается от значений соседних злементов
незначительно: 8і » 8ц.
Основная идея состоит в том, чтобн формировать два потока: для каж-
дой парн 82і , 82і+і сохранять полусумму (82і + 82і+і)/2 и разность (82, - 82і+і).
Далее зти потоки следует обрабативать раздельно, поскольку их характери-
стики существенно различнм.
В случае модели "аналоговий сигнал" физический смисл потока с полу-
суммами - низкие частоти, а с разностями - внсокие. Методи 8С предна-
значени для сжатия злементов с "количественними" данними, а не "качест-
венними". Самий распространенньїй вид количественннх данних - муль-
тимедийние. Но не единственннй: например, потоки смещений и длин,
формируемме методом семейства Ь277, тоже содержат количественние
данние.
Размер данних в результате применения 8С не изменяется. Более того, в
потоке с разностями размер злементов К может даже увеличиваться на
І бит: К'=К+1, поскольку для сохранения разностей К-битових злементов
требуется (К+1) бит.
Для сжатия результата работи метода может бить применена любая
комбинация методов - ВЬЕ, МТР, ВС, РВ8, НІІГР, АНІС, ЕЬШС, 8ЕМ...
Методи зтой группьі являются трансформирующими и поточними
(т. е. могут применяться даже в том случае, когда длина блока с данними не
задана). В общем случае скорость работи компрессора равна скорости де-
компрессора и зависит только от размера данньїх, но не от их содержания:
Скорость = О(Размер). Памяти требуется всего лишь несколько байтов.
Из краткого описання общей идеи видно, что
1) к обойм получающимся потокам можно повторно применять метод
зтого же семейства 8С;
2) метод можно применять и к параллельним потокам (например, левнй
и правий канали стереозвука);
3) при сжатии аналогового сигнала с потерями степень сжатия обратно
пропорциональна ширине сохраняемого диапазона частот;
4) можно сохранять не полусумми и разности, а сумми и полуразности
(поскольку сумма и разность двух чисел - либо обе четнн, либо обе
нечетни, одну из них можно делить на 2 без всяких осложнений).
67
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.ги/
Матодьі сжатия данньїх(7000+ файлов о сжатии)
Прямое преобразование
В базовом простейшем случае иллюстрируется тремя строками:
£ог (1=0; 1<И/2; і++)
Р[2*і]=(3[2*і]+5[2*і+1]) /2;
Р[2*і + 1]=3[2*1]-3 [2*і+1];
{ // цикл по длине исходного массива
// четнше - с полусуммами
// нечетнме - с разностями
// (1)
где 8[У] - исходньїй массив (Зоигсе, источник); В[7У] - вьіходной массив
преобразованньїх данньїх (Везііпаїіоп, приемник, с дельтами, т. е. разностя-
ми, и полусуммами).
Если результат пишем в тот же массив 8:
£ог (і=0; і<Н/2; і++) { //
а=5[2*і]-5[2*і+1]; //
5[2*і] = (3[2*і]+3 [2*і+1])/2;//
3[2*і+1]=а; //
) //
(2)
разность, и дальше так же:
четнме будут с полусуммами,
нечетнме злементм массива -
с разностями
Если же формируем два вьіходньїх массива:
£ог (і=0; КИ/2; і++) {
А[і]=(5[2*1]+5[2*1+1])/2;
Р[і]=5[2*і]-3[2*і+1];
// (3)
// полусумма (Ауегаде)
// разность (Реіба)
то каждьій из них - вдвоє короче, чем исходньїй 8.
Если его длина N нечетна, добавим к концу 8 злемент 8[//], равньїй по-
следнему 8[7У-1]; в результате он добавится к массиву А, а к В добавится
нуль:
А[N/2]=3[N-1]; // последняя полусумма
Р[М/2]=0; // последняя разность
Если известно, что в результате разности может возникнуть переполне-
ние, т. е. невозможно будет записать полученное значение, используя ис-
ходное число битов К (К - размер злементов исходного массива 8):
і£ ( (3 [2*і]-5 [2*і + 1 ] ) ! = (3 [2*і ]-3 [2*і+1 ]) тосі (п) )
{} // п=(2 в степени К)
то можем поступить одним из следующих четьірех способов:
1. Изначально отвести под разности массив злементов большего размера:
сИаг А[И]; // если под полусуммм 8 бит,
зЬогб Р[М]; // то под разности 9 бит, а реально даже 16
2. Формировать третин (битовьій) массив с флагами переполнений:
Р[і] = 3[2*1]-3[2*іч 1 ] ; //сохраним разность;
68
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
і£(б[і]!=5[2*і]-З[2*і+1] )
//если не хватило битов для записи,
Очег£1ом[і]=1; //установим флаг в 1
еізе Очег£1ои[і]=0; //иначе его значение - нуль
3. Использовать текущее значение разности для вьічисления полусуммм:
(4)
О[і]= 3[2*і]-3[2*і+1] ;
// реально 0[і] = (3[2*і]-З[2*і+1])той(п);
А[і] = 5[2*і]-Б[І]/2;
//зто полусумма, если не бьіло переполнения
4. Наоборот, использовать текущее значение суммш для вьічисления по-
луразности:
(5)
А[і]= 5[2*і]+5[2*і+1];
// реально А[і] = (8[2*і]+5[2*і+1] )тосі(п);
0[і]= 3[2*і]-А[і]/2;
// зто полуразность, если не бьшо переполнения
Упражнение. Можно ли использовать полуразности для вьічисления сумм?
А полусуммьі для вьічисления разностей?
Обратное преобразование
Обратное преобразование ничуть не сложнее прямого:
£ог (і=0; і<И/2; і++) { // (З')
5[2*і]= ( 2*А[і]+О[і] ) /2 ;
3[2*і+1]=( 2*А[і]-О[і] ) /2 ;
)
Если использовалась защита от переполнения и брались разности для
вьічисления полусумм:
3[2*і] = А[і]+О[і]/2; // (4')
5[2*і+1]= З[2*і]-0[і];
// реально 0[і]=(5[2*і]-3[2*і+1])тосЦп)
Пути улучшения степени сжатия
Общий случай
К получаеммм потокам можно и дальше рекурсивно применять разло-
жение на полусуммьі (Ауега§е) и разности (Веііа). При сжатии аналогових
сигналов, как правило, полезно дальнейшее разложение полусумм.
Есть два пути создавать 3 вьіходньїх потока или блока:
1. Огщіпаїі
Ауега§е1+Ве1іа1 Ф
ОА+ОО
69
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.пі/
ШтоДн сжатия данньїх(7000+ файлов о сжатии)
(ВА - Ауега§е2, получаемая при разложении разностей Веііаі, ВВ - Веііа2,
получаемая при разложении Векаї. Аналогично с остальннми обозначе-
ниями).
2. Огі^іпаїФ
Ауегаде 11+Веїіаі
АА+АВ
Пять вариантов создания четирех:
1. ОгІ£Іпа14-
Ауега£е1+Ве11а 11
ВА+ВВІ
ВВВ+ВВА
2. ОгІ£Іпа1і
Ауегаееі+Веїіа 1Ф
ВАІ+ВВ
ВАВ+ВАА
3. Огі£Іпа11і
уега£е1і+ ВекаїФ
АА+АВ ВА+ВВ
4. Огі£Іпа14'
Ауега£еФ+Ве1іа
аа4<+ав
ААА+ААВ
5. Огщіпаїі
Ауега§еФ+Ве1іа
АА+АВІ
АВА+АВВ
Чотирнадцять вариантов создания пяти и т. д.
Упражнение. Изобразите зти 14 вариантов.
При принятии решения о целесообразности разложения некоторого по-
тока или блока 8 на А и В оказнвается полезен следующий прием. Будем
заглядьівать на несколько шагов вперед: если непосредственньїе результати
разложения А и В сжимаемн суммарно хуже, чем исходннй 8, может вка-
заться, что если разложить дальше А и/или В, то только тогда результат -
три или четире потока, по котормм восстановим 8, - сжимаем лучше, чем 8.
Если же и зти АА, АВ, ВА, ВВ дают в сумме худшее сжатие, заглянем
еще на шаг вперед, т. е. попитаємся разложить зти вторичньїе результати,
70
КНрі/Луууху.сотргекіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
и т. д., пока глубина такого просмотра не достигнет заданного предела, или
же дальнейшее разложение окажется невозможнмм из-за уменьшения длин
в 2 раза на каждом шаге.
Еще одно усложнение - поиск границ фрагментов потока, разбивающих
его на такие блоки, чтобьі их дальнейшее субполосное кодирование давало
лучшее сжатие.
При сжатии параллельнюс потоков
Если имеем два параллельньїх потока X и ¥, каждая пара (Хь ¥;) описьі-
вает один обьект. Например, Х| - адрес, ¥і - длина или же X - угол, ¥ -
расстояние. В случае "аналоговий сигнал" пара (Хі,¥;) относится к одному
моменту времени й.
Число потоков и их длина N остаются неизменнмми. Можно оставлять
один из двух исходнмх потоков вместо потока с полусуммами (а при сжа-
тии с потерями и вместо разностей): Х+В или ¥+В вместо А+В.
Теперь можно искать границьі таких блоков, внутри которьіх один из
зтих четьірех вариантов - Х+¥, Х+В, ¥+В, А+В - существенно вмгоднее
остальнмх трех.
Заметим, что применение ЬРС, в том числе дельта-кодирования, к пото-
ку полусумм А вмгоднее, чем к X и/или ¥: первая производная потока с по-
лусуммами А'[і] не превосходит (по абсолютному значенню) максимуми
первнх производнмх Х'[і] и ¥'[і]:
А',=Аі+1-Аі = (Хж+¥і+1-аі+1)/2 - (Х^ра^, (2.9)
"издержки округлення" ак равнм единице, если сумма соответствующих
Хк+¥к нечетна, а арифметика используется целочисленная; иначе ак=0.
А',- = (Хі+і-Хі +¥і+і-¥і 4-а; -<Хі+і)/2 = ( Х'і+¥\ + а.-аі+І)/2. (2.10)
Таким образом, значение А'і лежит внутри интервала [Х\ ,¥\] (рис. 2.2).
Заметим также, что (при использовании целочисленной арифметики из-
за округлений) важен порядок действий: дельта-кодирование потока полу-
сумм А даст другой результат, чем полусумма результатов дельта-кодиро-
вания X и ¥: в первом случае (2.9) и (2.10), во втором А”і= (Х'і+¥'і)/2 .
Если сумма (Х'і+¥'і) нечетна, а аі-аі+і=1, то А\ * А”і, А'і=А"і+1.
Например, если Хі=0, Хі+і=¥і=±¥і+і=1, то А', =1 (по формуле (2.9)),
а А"і=(1+0)/2=0.
Если потоков более двух, например 5 (сжатие именно пятиканального
звука становится все актуальнеє), возникает задача нахождения оптималь-
них пар для применения к ним субполосного кодирования. Здесь тоже воз-
можньї оба вьішеописанньїх приема: и "просмотр на несколько шагов впе-
71
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.пі/
Методи сжатия данньїх (7000+ файлов о сжатии)
ред", еще более усложненнмй, и "поиск границ интервалов времени", опти-
мальних для вмделяеммх затем пар. Например, может виясниться, что сжа-
тие существенно лучше, если использовать знание того, что на интервале
между 32765-м и 53867-м злементами очень близки первая разность (при
первом разложении) внутри полусумми (1,4), т. е. полусуммн 1-го потока с
4-м, и первая разность внутри полусуммн (3,7).
Рис. 2.2. Значение А'/ лежиш внутри интервала[Х'іг¥^
Двумерньш случай
Раньше на каждом зтапе можно било принять одно из двух решений:
применить 8С-преобразование к блоку или не применять. Теперь же - одно
из пяти:
1) применить 8С к строкам блока;
2) применить 8С к столбцам блока;
3) применить 8С к строкам блока, а затем к столбцам;
4) применить 8С к столбцам блока, а затем к строкам;
5) не применять 8С к блоку вообще.
Пункти 3 и 4 не совсем зквивалентнм при использовании целочислен-
ной арифметики из-за округлений, но математическое ожидание расхожде-
ния их результатов равно нулю (рис. 2.3).
При сжатии аналогових сигналов
Появляются дополнительньїе возможности:
сжимая с потерями, округлять с заданной точностью: на каждом шаге 8С
и/или после всех зтапов 8С;
72
1Шр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
сохранять только заданную субполосу, многокрагно применяя 8С-
разложение и оставляв только верхнюю половину частот (разности) либо
нижнюю (полусуммьі);
использовать дискретное взйвлетное преобразование для нахождения
низкочастотной и вьісокочастотной компонент.
АА2 оа2 ОАі
АО2 ОВ2
АЛі
Рис. 2.3. Вариант применения 8С в двумерном случае
Дискретное взйвлетное преобразование
ДВП отличаетея от 8С лишь тем, что в нем для вьічнсления низко- и вьі-
сокочастотной компонента используется не два соседних злемента сигнала,
а произвольное задаваемое число злементов П>2. Причем в отличие от дру-
гих контекстних методов, в частности ЬРС, контекст злемента 8[х] состоит
из злементов по обе сторони от него: 8[х+і] и 8[х-і], і=1,2,3,...Д)/2.
Основная же идея - та же, что в 8С: сформировать два потока - с низки-
ми Н[х] и високими частотами Ь[х] - так, чтоби по половине значений Н[х]
и половине значений Ь[х] можно било восстановить исходний поток 8[х].
Оставляются либо четние Н[2-х] и нечетние Ь[2х+1], либо наоборот.
При разжатии сначала по Н[2х] и Ь[2-х+1] восстанавливаем четние
8[2-х], затем по 8[2-х] и Ь[2 х+1] находим нечетние 8[2-х+1].
Если І>=3, Ь[х]=8[х]-(8[х-1]+8[х+1])/2,
Н[х]=8[х]+Ьі(х).
Функция йі(8[і]) должна бить вибрана так, чтоби она била внражаема
через Ь[х+і], ]=2к+1. Например,
Ьі । (х)=(Е[х-1 ]+Ь[х+1 ])/2,
Ьі2(х)=(Цх-1]+Цх+1])/4,
Ьі3(х)= -<Ь[х-1]+Ь[х+1])/2,
Ьі4(х)= -(Ь[х-1 ]+Ь[х+1 ])/4,
ЬІ5(х)=(Цх-3]+Ь[х-1]+Цх+1]+Ь[х+3])/4, и т. д.
73
Книга написана коллективом 1Шр:/Лууууу.сотрге88Іоп.ги/
Методи сжатия данньїх (7000+ файлов о сжатии)
Возьмем вторую функцию /н2 (именно зтот вариант используется в алго-
ритме 1РЕО 2000) и посмотрим, каким образом Н вмражается через 8.
Н[х]=8[х]+(Ь[х-1]+Ь[х+1])/4 =
=8[х]+ ( 8[х-1 ] - (8[х-2]+8[х])/2 + 8[х+1] - (8[х]+8[х+2])/2 ) /4 =
=8[х]+ (2-8[х-1] - 8[х-2] - 8[х] + 2-8[х+1] - 8[х] - 8[х+2]) /8 =
=( -8[х-2] + 2-8[х-1] + 6-8[х] + 2-8[х+1] - 8[х+2]) /8.
ДВП обачно задается в виде набора козффициентов, в данном случае
(-1/8,2/8, 6/8, 2/8,-1/8).
Графически зто вьіглядит так, как на рис. 2.4 и 2.5.
Рис. 2.5. ДВП для набора
козффициентов (-1/2,1, -1/2)
(2.П)
Рис. 2.4. ДВП для набора
козффициентов (-1/8, 2/8, 6/8,
2/8, -1/8)
Упражнение. Каким будет набор козффициентов, если используем Ьі5(1_[і])?
Итак, при таком построении взйвлет-фильтров формируется два вмход-
ньіх потока:
Ь[2х+1]=8[2х+1]+1о(8[2-х+)]),) - четньїе: ]= ±2к;
Н[2х]=8[2х]+Ьі(Ь[2-х+і]), і - нечетнме: і= ±(2т+1).
Если сжимаем с потерями, функция 1о может использовать любме 8[х],
а не только четньїе.
Обратное преобразование: сначала найдем все четнме злементм:
8[2-х]=Н[2 х] - Ьі(Ц2 х+і]), і - нечетнме;
затем, на оснований найденнмх четнмх, восстановим все нечетнме злементм:
8[2х+1]=Ц2х+1] - 1о(8[2х+)]),) - четнме.
Если, наоборот, берем четнме Ь и нечетнме Н, зто ничего по сути не ме-
няет.
74
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методи сжатия без потерь
Заметим, что при сжатии с потерями существует и альтернативний путь.
В прямом преобразовании сначала вьічисляется
Н[2-х+1]=С-8[2-х+1]+ііі(8[2 х+]]), і - четньїе: )= ±2к, 0<С<1; затем
Ь[2-х]=8[2 х]+1о(Н[2-х+і]), і - нечетньїе: і= ±(2т+1). Сравните с (2.ГІ).
Например, если 0=3, Н[х]=( 8[х]+(8[х-1]+8[х+1])/2 ) /2.
И еще заметим, что для улучшения сжатия применимо все то, что написано
вьіше для 8С. Но, кроме того, здесь, как и в ЛПК, можно через каждьіе К зле-
ментов вибирать фильтр, оптимальний для последних М обработанньїх зле-
ментов (К, М - задаваемьіе параметри). Причем метод может даже не записи-
вать номер вибранного фильтра в поток в явном виде, поскольку аналогичньїй
анализ может вьшолняться на зтапе обратного преобразования.
Характеристики методов семейства 8С:
Степень сжатия: увеличивается обично в 1.1-1.9 раза.
Типьі данньїх: методи предназначени для сжатия количественннх
данньїх.
Симметричность по скорости: в общем случае 1:1.
Характерньїе особенности: может бить целесообразно многократное
применение.
Глава 3. Словарньїе методьі сжатия
данньїх
Идея словарньїх методов
Входную последовательность символов можно рассматривать как после-
довательность строк, содержащих произвольное количество символов. Идея
словарних методов состоит в замене строк символов на такие коди, что их
можно трактовать как индекси строк некоторого словаря. Образующие сло-
варь строки будем далее називать фразами. При декодировании осуществ-
ляется обратная замена индекса на соответствующую ему фразу словаря.
Можно сказать, что ми питаємся преобразовать исходную последова-
тельность путем ее представлення в таком алфавите, что его "букви" явля-
ются фразами словаря, состоящими, в общем случае из произвольного ко-
личества символов входной последовательности.
Словарь - зто набор таких фраз, которие, как мм полатаєм, будут встре-
чаться в обрабатмваемой последовательности. Индекси фраз должньї бить
построеньї таким образом, чтобьі в среднем их представление занимало
меньше места, чем требуют замещаемьіе строки. За счет зтого и происходит
сжатие.
75
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.пі/
Методи сжатия денних (7000+ файлов о сжатии)
Уменьшение размера возможно в первую очередь за счет того, что
обьічно в сжимаеммх данньїх встречается лишь малая толика всех возмож-
ньїх строк длиньї п, позтому для представлення индекса фразм требуетея,
как правило, меньшее число битов, чем для представлення исходной строки.
Например, рассмотрим количество взаимно различньїх строк длиньї от 1 до
5 в тексте на русском язьіке (роман Ф.М. Достоевского "Бесьі", обьічньїй
неформатированньїй текст, размер около 1.3 Мб):
Длина строки Количество различньїх строк Использовано комбинаций, % от всех возможньїх
5 196969 0.0004
4 72882 0.0213
3 17481 0.6949
2 2536 13.7111
1 136 100.0000
Иначе говоря, размер (мощность) алфавита равен 136 символам, но ре-
ально используется только 2536/(136-136)-100% ~ 13.7 % от всех возможньїх
двухсимвольньїх строк и т. д.
Далее, если у нас єсть заслуживающие доверия гипотезм о частоте ис-
пользования тех или иних фраз либо проводилея какой-то частотний анализ
обрабатьіваемих данньїх, то ми можем назначить более вероятним фразам
коди меньшей длини. Например, для той же злектронной версии романа
"Беси" статистика встречаемости строк длини 5 имеет вид:
N Количество строк длиньї 5, встретившихся ровно N раз Количество относительно общего числа всех различньїх строк длиньї 5, %
1 91227 46.3
2 30650 15.6
3 16483 8.4
4 10391 5.3
5 7224 3.7
>6 40994 20.7
Всего 196969 100.0
Заметам, что из всех 197 тис. различньїх строк длини 5 почти половина
встретилась лишь один раз, позтому они вообще не будут использовани как
фрази при словарном кодировании в том случае, если словарь строится
только из строк обработанной части потока. Наблюдаемие частоти остав-
шейся части строк бистро уменьшаютея с увеличением V, что указьівает на
вигодность применения статистического кодирования, когда часто исполь-
зуемьім фразам ставятся в соответствие коди меньшей длиньї.
Обично же просто предполагаетея, что короткие фрази используются
чаще длинннх. Позтому в большинстве случаев индекси строятся таким
76
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методи сжатия без потерь
образом, чтобьі длина индекса короткої) фразьі била меньше длиньї индекса
длинной фрази. Такої) прием обмчно способствует улучшению сжатия.
Очевидно, что процессьі моделирования и кодирования, рассматриваемие
в гл. 4, для словарньїх методов сливаются. Моделирование в явном виде может
вьіполняться уже только для индексов. Заметим, что апологети идеиунивер-
сального моделирования и кодирования последовательно изучают любой метод,
не вписьівающийся явно в их модель, и обьічно достаточно убедительно докази-
вают, что для него можно построить аналог в виде статистического метода.
Так, например, доказано, что несколько рассматриваемих ниже словарньїх ал-
горитмов семейства Зива - Лемпела могут бить воспроизведени в рамках кон-
текстного моделирования ограниченного порядка либо с помощью моделей со-
стояний [6,9].
Ниже будут рассмотрени алгоритми словарного сжатия, относимме к
классу методов Зива - Лемпела. В качестве примера словарного алгоритма
иного класса укажем [7].
Методи Зива - Лемпела ориентировани на сжатие качественних дан-
них, причем зффективность применения достигается в том случае, когда
статистические характеристики обрабативаемих данньїх соответствуют мо-
дели источника с памятью.
Классические алгоритмьі Зива - Лемпела
Алгоритми словарного сжатия Зива-Лемпела появились во второй поло-
вино 70-х гг. Зто били так називаемне алгоритми Ь277 и Ь278, разрабо-
таннме совместно Зивом (2іу) и Лемпелом (Ьетреї). В дальнейшем перво-
начальнне схеми подвергались множественннм изменениям, в результате
чего ми сегодня имеем десятки достаточно самостоятельннх алгоритмов и
бессчетное количество модификаций.
Ь277 и Ь278 являются универсальнмми алгоритмами сжатия, в которих
словарь формируется на оснований уже обработанной части входного пото-
ка, т. е. адаптивно. Принципиальним отличием является лишь способ фор-
мирования фраз. В модификациях первоначальних алгоритмов зто свойство
сохраняется. Позтому словарние алгоритми Зива - Лемпела разделяют на
два семейства - алгоритми типа Ь277 и алгоритми типа Ь278. Иногда так-
же говорят о словарних методах Ь21 и Ь22.
Публикации Зива и Лемпела носили чисто теоретический характер, так как
зти исследователи на самом деле занимались проблемой измерения "сложно-
сти" строки и применение вьіработанних алгоритмов к сжатию данних явилось
скореє лишь частним результатом. Потребовалось некоторое время, чтобм идея
организации словаря, часто в переложении уже других людей, достигла разра-
77
Книга написана коллективом К((р:/Лу\у\у.сотрге‘і‘ііоп.і'и/
Натодь! сжатия данньїх(7000+файлов о сжатии)
ботчиков программного и аппаратного обеспечения. Позтому пракгическое ис-
пользование алгоритмов началось спустя пару лет.
С тех пор методи данного семейства неизменно являются самими попу-
лярними среди всех методов сжатия данньїх, хотя в последнее время ситуа-
ция начала меняться в пользу В\УТ и РРМ, как обеспечивающих лучшее
сжатие. Кроме того, практически все реально используемие словарньїе ал-
горитми относятся к семейству Зива - Лемпела.
Необходимо сказать несколько слов о наименованиях алгоритмов и ме-
тодов. При обозначении семейства общепринятой является аббревиатура
Ь2, но расшифровиваться она должна как 2іу - Ьетреї, позтому и алгорит-
ми Зива - Лемпела, а не Лемпела - Зива. Согласно общепринятому обьяс-
нению зтого курьеза, Якоб Зив внес больший вклад в открьітие соответст-
вующих словарних схем и исследование их свойств и, таким образом, за-
служил, чтобн первим стояла его фамилия, что ми и видим в заголовках
статей [12, 13]. Но случайно била допущена ошибка, и прикрепилось со-
кращение Ь2 (букви упорядочени в алфавитном порядке). Иногда, кстати,
встречается и обозначение 2Ь (порядок букв соответствует порядку фами-
лий авторов в публикациях [12, 13]). В дальнейшем, если некий исследова-
тель существенно изменял какой-то алгоритм, относимий к семейству Ь2,
то в названий полученной модификации к строчке Ь2 обично дописьівалась
первая буква его фамилии, например: алгоритм Ь2В, автор Белл (Веіі).
Подчеркнем также наличие большой путаницн с классификацией алго-
ритмов. Обично она проявляется в нежелании признавать существование
двух самостоятельних семейств Ь2, а также в неправильном отнесении ал-
горитмов к конкретному семейству. Беспорядку часто способствуют сами
разработчики: многим невнгодно раскрнвать, на основе какого алгоритма
создана данная модификация из-за коммерческих, патентних или иньїх
меркантильних соображений. Например, в случае коммерческого про-
граммного обеспечения общепринятой является практика классификации
используемого алгоритма сжатия как "модификации Ь277". И в зтом нет
ничего удивительного, ведь алгоритм Ь277 не запатентован.
Алгоритм 1-277
Зтот словарньїй алгоритм сжатия является самнм старьім среди методов
Ь2. Описание бьіло опубликовано в 1977 г. [12], но сам алгоритм разработан
не позднее 1975 г.
Алгоритм Ь277 является родоначальником целого семейства словарньїх
схем - так назнваемнх алгоритмов со скользящим словарем, или скользя-
щим окном. Действительно, в 1,277 в качестве словаря используется блок
уже закодированной последовательности. Как правило, по мере вьіполнения
78
КНрі/Луууху.сотргекіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
обработки положение отого блока относительно начала последовательности
постоянно меняется, словарь "скользит" по входному потоку данньїх.
Скользящее окно имеет длину АГ, т. е. в него помещается N символов, и
состоит из двух частей:
последовательности длиньї IV =N-(1 уже закодированньїх символов, ко-
торая и является словарем;
упреждающего буфера, или буфера предварительного просмотра (Іоока-
Ьеаб), длиньї и; обьічно п на порядки меньше IV.
Пусть к текущему моменту времени мьі уже закодировали і символов 8/,
8 2, ..., 5 Тогда словарем будут являться IV предшествующих символов 8 ^игі),
З’г-ок-ц+і, •••> 81- Соответственно, в буфере находятея ожидающие кодирова-
ния символи 81+\, 8„і, 5І+п. Очевидно, что если IV > (, то словарем будет
являться вся уже обработанная часть входной последовательности.
Идея алгоритма заключаетея в поиске самого длинного совпадения меж-
ду строкой буфера, начинающейся с символа 8 м, и всеми фразами словаря.
Зти фрази могут начиняться с любого символа 5,^-1), ^цж-о+ь ..., 5і, и ви-
ходить за пределн словаря, вторгаясь в область буфера, но должни лежать В
окне. Следовательно, фрази не могут напинаться с 8 м, позтому буфер не
может сравниваться сам с собой. Длина совпадения не должна превишать
размера буфера. Полученная в результате поиска фраза 8 8 цм)+ь
8 ці- і)+(/-і) кодируетея с помощью двух чисел:
1) смещения (ойзеі) от начала буфера, /;
2) длини соответствия, или совпадения (таісЬ 1еп§Йі),у.
Смещение и длина соответствия играют роль указателя (ссьілки), одно-
значно определяющего фразу. Дополнительно в виходной поток записива-
етея символ з, непосредственно следующий за совпавшей строкой буфера. ,
Таким образом, на каждом шаге кодер вьідает описание трех обьектов:
смещения и длини соответствия, образующих код фрази, равной обрабо-
танной строке буфера, и одного символа з (литерала). Затем окно смещается
на 7+1 символов вправо и осуществляется переход к новому циклу кодиро-
вания. Величина едвига обьясняется тем, что ми реально закодировали
именно у+1 символов: 7 с помощью указателя на фразу в словаре и 1 с по-
мощью тривиального копирования. Передача одного символа в явном виде
позволяет разрешить проблему обработки еще ни разу не виденньїх симво-
лов, но существенно увеличивает размер ежатого блока.
Пример
Попробуєм ежать строку "кот_ломом_колол_слона" длиной 21 символ.
Пусть длина буфера равна семи символам, а размер словаря больше длиньї
ежимаемой строки. Условимся также, что:
79
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.пі/
Методи сжатия данньїх (7000+ файлов о сжатии)
нулевое смещение зарезервировали для обозначения конца кодирования;
символ 5, соответствует единичному смещению относительно символа
5,+і, с которого начинается буфер;
если имеется несколько фраз с одинаковой длиной совпадения, то виби-
раєм ближайшую к буферу;
в неопределенньїх ситуациях - когда длина совпадения нулевая - сме-
щению присваиваем единичное значение.
Таблиця 3.1
Шаг Скользящее окно Совпадаю- щая фраза Закодированньїе данньїе
Словарь Буфер І 1 3
1 - кот_лом - 1 0 ”к”
2 к от_ломо - 1 0 "о"
3 ко тломом - 1 0 ИуН
4 кот _ломом_ - 1 0 н п
5 кот_ ломом_к - 1 0 "л"
6 кот_л омом_ко 0 4 1 "м"
7 КОТ-ЛОМ ом_коло ом 2 2 II II
8 кот_ломом_ колол_с ко 10 2 "л"
9 КОТ-ЛОМОМ кол ол_слон ол 2 2 1) II
10 .. ,_л омомкол ол_ слона - 1 0 "с"
11 ... Л ОМОМ-КОЛ ол_с лона ло 5 2 "н"
12 .. .ОМ-КОЛ ол_сл он а - 1 0 "а"
Для кодирования і нам достаточно 5 бит, для у нужно З бита, и пусть симво-
ли требуют 1 байта для своєю представлення. Тогда всего ми потратим
12-(5+3+8) = 192 бита. Исходно строка занимала 21-8 = 168 бит, т. е. Ь277 коди-
рует нашу строку еще более расточительним образом. Не следует также заби-
вать, что ми опустили шаг кодирования конца последовательности, котормй
потребовал би еще как минимум 5 бит (размер поля і = 5 битам).
Процесе кодирования можно описать следующим образом.
иЬіІе ( ! ОаСаГіїе.ЕОГ() ){
/*найдем максимальнеє совпадение; в таСсИ_роз получим
смещение і, в таїсЬ_1еп - длину у, в иптаЬсЬед_зут -
первьій несовпавший символ Зці*], считаем также, что в
функции £іпд_таСсЬ учитьіваетея ограничение на длину
совпадения
*/
£іпд_таСсй (&таі:сЬ_роз, &таїсЬ_1еп, &иптаСсЬесі_зут) ;
/*запишем в файл сжатьіх данньїх описание найденной
80
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
фрази, при зтом длина битового представлений і
задается константой ОГГ5_ЬИ, длина представлений
у - константой ЬЕЛ_ЬМ, размер символа з принимаем
равнмм 8 битам
*/
СотргеззесІГіїе .ЮгіЬеВіЛз (таСсЬ_роз, ОГГ5_ЬМ);
СотргеззесІГіїе. ИгіЛеВібз (табсЬ_1еп, ЬЕМ_Ш);
СотргеззесІГіїе .ИгіЬеВіІіз (иптаїсЬесі_зут, 81;
іог (і - 0; і <= та£сЬ_1еп; і++){
// прочтем очередной символ
с = ВабаГіІе.ВеадЗутЬої();
//удалим из словаря одну самую старую фразу
ОеІеіеРЬгазе ();
/*добавим в словарь одну фразу, начинающуюся с
первого символа буфера
*/
АдйРЬгазе ();
/*сдвинем окно на 1 позицию, добавим в конец буфера
символ с
*/
МочеИіпсіои (с);
}
}
СотргеззедГіїе.МгіРеВіРз (0, ОГЕ5_ЬМ);
Пример подтвердил, что способ формирования кодов в И.Т1 незффекти-
вен и позволяет сжимать только сравнительно длинньїе последовгтельно-
сти. До некоторой степени сжатие небольших файлов можно улучтить, ис-
пользуя кодьі переменной длиньї для смещения і. Действительно, даже если
мьі используем словарь в 32 Кб, но закодировали еще только 3 Кб, то сме-
щение реально требует не 15, а 12 бит. Кроме того, происходит существен-
ньій проигрьіш из-за использования кодов одинаковой длиньї при указаний
длин совпадения у. Например, для уже упоминавшейся злектронной версии
романа "Бесьі" бьіли получсньї следующие частоти использования длин
совпадения:
І Количество раз, когда максимальная длина совпадения бьіла равна у
0 136
1 1593
2 4675
3 11165
4 20047
5 26939
6 28653
81
Книга написана коллективом 1ійр:/Лууууу.сотрге88Іоп.пі/
Методи сжатия данньїх(7000+файлов о сжатии)
і Количество раз, когда максимальная длина совпадения бьіла равна /
7 24725
8 19702
9 14767
10 10820
>11 27903
Из таблицьі следует, что в целях минимизации закодированного пред-
ставлення для у = 6 следует использовать код наименьшей длиньї, так как
зта длина совпадения встречается чаще всего.
Хотя автори алгоритме и доказали, что Ь277 может сжать данньїе не
хуже, чем любой специально на них настроенньїй полуадаптивний словар-
ньій метод, из-за указанних недостатков зто вьіполняется только для после-
довательностей достаточно большого размера.
Что касается декодирования сжатьіх данньїх, то оно осуществляется пу-
тей простой замени кода на блок символов, состоящий из фрази словаря и
явно передаваемого символа. Естественно, декодер должен виполнять Те же
действия по изменению окна, что и кодер. Фраза словаря елементарно опре-
деляется по смещению и длине, позтому важним свойством Ь277 и прочих
алгоритмов со скользящим окном является очень бистрая работа декодера.
Алгоритм декодирования может иметь следующий вид:
£ог (;;) {
// читаєм смещение
таЬсЬ_роз = СотргеззесіГіїе.КеадВіЬз (ОЕТ5_ЬМ) ;
і і (!таЬсИ_роз)
// обнаружен признак конца файла, виходим из цикла
Ьгеак;
// читаєм длину совпадения
таЬсЬ_1еп = СотргеззесІГіїе.КеасІВіЬз (ЬЕМ_ЬМ);
£ог (і - 0; і < таЬсЬ_1еп; і++) {
/*находим в словаре очередной символ совпавшей
фрази
*/
с = ВісЬ (таЬсЬ_роз + і);
/*сдвигаем словарь на одну позицию, добавляєм в его
начало с
*/
МочеБісЬ (с)
/*записиваем очередной раскодированнмй символ
в виходной файл
*/
ОаЬаГіїе.ИгіЬеВутЬоІ (с);
82
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
)
/*читаем несовпавший символ, добавляєм его в словарь
и записьіваем в вмходной файл
*/
с = СотргеззедГіїе. КеасіВі1:з (8) ;
МоуєВісР (с)
СаїаЕіІе.Игі£е8утЬо1 (с);
)
Алгоритми со скользящим окном характеризуются сильной несиммет-
ричностью по времени - кодирование значительно медленнее декодирова-
ния, поскольку при сжатии много времени тратится на поиск фраз.
"2^. Упражнение. Предложите несколько более зффективньїх способов кодирова-
ния результатов работьі 1277, чем использование простих кодов фиксирован-
ной длиньї.
Алгоритм і_255
Алгоритм Ь288 позволяет достаточно гибко сочетать в вмходной после-
довательности символи и указатели (коди фраз), что до некоторой степени
устраняет присущую Ь277 расточительность, проявляющуюся в регулярной
передаче одного символа в прямом виде. Зта модификация била
предложена в 1982 г. Сторером (Зіогег) и Жимански (Зтутапзкі) [10].
Идея алгоритма заключается в добавление к каждому указателю и сим-
волу 1-битового префикса/ позволяющего различать зти обьекти. Иначе
говоря, 1-битовий флаг/указмвает тип и, соответственно, длину непосред-
ственно следующих за ним данньїх. Такая техника позволяет:
записивать символи в явном виде, когда соответствующий им код имеет
большую длину и, следовательно, словарное кодирование только вредит;
обрабативать ни разу не встреченнме до текущего момента символи.
Пример
Закодируем строку "кот_ломом_колол_слона" из предьідущего примера
и сравним козффициент сжатия для Ь277 и Ь288.
Пусть ми переписнваем символ в явном виде, если текущая длина мак-
симального совпадения буфера и какой-то фрази словаря меньше или равна
единице. Если ми записьіваем символ,,то перед ним видаєм флаг со значе-
нием 0, если указатель - то со значением 1. Если имеется несколько совпа-
дающих фраз одинаковой длиньї, то вибираєм ближайшую к буферу.
83
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.ги/
Методи сжатия данньїх <7000+ файлов о сжатии)
Таблица 3.2
Шаг Скользящее окно Совпадающая фраза Закодированньїе данньїе
Словарь Буфер 1 І і 8
1 - КОТ-ЛОМ - 0 - "к"
2 к ОТЛОМО - 0 - "о"
3 ко тломом - 0 -
4 кот _Л0М0М_ - 0 - II II
5 кот_ ЛОМОМ-К - 0 - "л"
6 КОТ-Л ОМОМ_КО 0 0 - "о"
7 кот_ло мом_кол - 0 - "м"
8 котлом ом_коло ом 1 2 2 -
9 котломом -КОЛОЛ- 0 - - II «
10 КОТЛОМОМ- КОЛОЛ-С ко 1 10 2 -
11 КОТ_ЛОМОМ_КО ЛОЛ-СЛО ло 1 8 2 -
12 ...ОТ_ЛОМОМ_КОЛО л_слона л 0 - - "л"
13 ...Т_ЛОМОМ_КОЛОЛ _слона 0 - - Н II
14 ...ЛОМОМ-КОЛОЛ- слона - 0 - - ”с"
15 .. .ЛОМОМ-КОЛ ОЛ_С лона ло 1 5 2 -
16 ...МОМКОЛОЛ-СЛО на - 0 - - "н"
17 ...ОМ_КОЛОЛ_СЛОН а - 0 - - "а"
Таким образом, для кодирования строки по алгоритму ЬХ88 нам потре-
бовалось 17 шагов: 13 раз символи били передави в явном виде и 4 раза ми
применили указатели. Заметим, что при работе по алгоритму нам по-
требовалось всего лишь 12 шагов. С другой сторони, если задаться теми же
длинами для і иу, то размер закодированних по Ь288 данних равен 13-(1+8)
+ 4 (1+5+3) = 153 битам. Зто означает, что строка действительно била сжа-
та, так как ее исходньїй размер 168 бит.
Рассмотрим алгоритм сжатия подробнее.
сопзб іпб
// порог для включення словарного кодирования
ТНКЕЗНОЬО = 2,
// размер представлення смещения, в битах
ОЕГ5_ЬМ = 14,
// размер представлення длиньї совпадения, в битах
ЬЕМ_ЬМ = 4;
сопзб іпб
НІИ_8І2Е = (1 « ОГГЗ_ЬМ), // размер окна
ВиГ_5І2Е = (1 « ЬЕН_ЬИ) - 1; // размер буфера
//функция вьічисления реального положення символа в окне
84
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
іпііпе іпб МОВ (іп£ і) { гебигп і & (ИІМ_8І2Е-1) ; };
//собственно алгоритм сжатия
іп£ Ьи£_зг = ВВГ_ЗІ2Е;
/* инициализация: заполнение буфера, поиск совпадения
для первого шага
*/
мЬіІе ( Ьи£_зг ) {
і£ ( та£сЬ_1еп > Ьи£_зіге) та£сЬ_1еп = Ьи£_зіге;
і£ ( та£сИ_1еп <= ТНКЕЗНОЬВ ) {
/♦если длина совпадения меньше порога (2 в примере),
то запишем в файл сжатьіх данньїх флаг и символ;
роз определяет позицию начала буфера
*/
СотргеззесіЕі1е.Игі£еВі£ (0);
СотргеззесіЕі1е.Игі£.еВі£з (иіпсіом [роз], 8) ;
// зто понадобится при обновлений словаря
та£сЬ_1еп - 1;
}е1зе{
/*иначе запишем флаг и указатель, состоящий из
смещения и длиньї совпадения
*/
СошргеззесіГіІе.ИгібеВіб (1);
СогсргеззесіГіІе.Игі£еВі£з (та£сИ_о££з, ОЕГЗ_ЬМ);
Сотргеззес1Гі1е.Игі£еВі£з (та£сЬ_1еп, ЬЕМ_Ш);
}
£ог (іпб і = 0; і < та£сЬ_1еп; і++) {
/♦удалим из словаря фразу, начинающуюся в позиции
МОВ (роз+Ьи£_зг)
*/
Ве1е£еРЬгазе ( МОВ (роз+Ьи£_зг) ) ;
і£ ( (с = Ва£аГі1е.КеасіЗуіпЬо1 ()) == ЕОГ)
// ми в конце файла, надо сократить буфер
Ьи£_зг--;
еізе
/♦иначе надо добавить в конец буфера новий
символ
*/
иіпдозд [МОВ (роз+Ьи£_зг)] = с;
роз = МОВ (роз+1); // сдвиг окна на 1 символ
І£ (Ьи£_зг)
/♦если буфер не пуст, то добавим в
словарь новую фразу, начинающуюся в позиции роз;
считаем, что в функции АйсіРЬгазе одновременно
85
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.пі/
Методьі сжатия данньїх(7000+файлов о сжатии)
вьіполняется поиск максимального совпадения
между буфером и фразами словаря
*/
АсісіРЬгазе (роз, &та£сИ_о££з, &табсЬ_1еп)
}
}
СотргеззесіГіїе .ИгіЬеВіР (1);
СотргеззесІГіїе.ИгіРеВіРз (0, ОЕГЗ_ЬЬІ) ; // знак конца файла
Скользящее окно можно реализовьівать с помощью "циклического" мас-
сива, что и бьіло проделано в вьішеприведенном учебном фрагменте про-
граммьі сжатия. Использованньїй подход не является лучшим, но сравни-
тельно прост для понимания.
Алгоритм декодирования может бьіть реализован следующим образом:
£ог (;;) {
і£ ( ІСотргеззейГіІе.КеасіВіб () ){
/*зто символ, просто виведем его в файл и запишем в
конец словаря (символ будет соответствовать смещению
1 = 1)
*/
с = СотргеззесІГіїе . ВеасІВіЬз (8) ;
Ва£аГі1е .КгіРеЗутЬоІ (с) ;
міпсіом [роз] = с;
роз = МОВ (роз+1);
}е1зе{
// зто указатель, прочитаєм его
шаЬсЬ_роз = СотргеззедГіІе.КеадВіЬз (ОГГЗ_ЬИ);
і£ (!та£сЬ_роз)
Ьгеак; // конец файла
та£сй_роз = МОВ (роз - та£.сИ_роз) ;
та£сИ_1еп = СотргеззесіГіїе.ВеасіВі£з (ЬЕМ_ЬМ) ;
// цикл копирования совпавшей фрази словаря в файл
£ог (іп£ і = 0; і < та£сй_1еп; і++) {
//видаєм очередной совпавший символ с
с = міпсіом [МОВ (та£сЬ_роз+і) ];
ВаііаГіІе .ИгіРеЗутЬої (с) ;
иіпдои [роз] = с;
роз = МОВ (роз + 1) ;
)
86
1Шр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Упражнение. Из-за наличия порога ТНРЕЗНОЮ часть допустимих значений
длиньї реально не используется, позтому размер буфера ВІІЕ_ЗІ2Е может
бьіть увеличен при неизменном І_ЕМ_ІМ. Проделайте соответствующие моди-
фикации фрагментов программ кодирования и декодирования.
Алгоритм Ь278
Алгоритм Ь278 бьіл опубликован в 1978 г. [13] и впоследствии стал "от-
цом" семейства словарньїх методов Ь278.
Алгоритми зтой группьі не используют скользящего окна и в словарь по-
мещают не все встречаемьіе при кодировании строки, а лишь "перспекгивнме"
с точки зрения вероятности последующего использования. На каждом шага
в словарь вставляется новая фраза, которая представляє! собой сцепление (кон-
катенацию) одной из фраз 5 словаря, имеющей самое длинное совпадение со
строкой буфера, и символа з. Символ з является символом, следующим за стро-
кой буфера, для которой найдена совпадающая фраза 5. В отличие от семейства
Ь277 в словаре не может бить одинаковьіх фраз.
Кодер порождает только последовательность кодов фраз. Каждьій код
состоит из номера (индекса) п "родительской" фрази 8, или префикса, и
символа з.
В начале обработки словарь пуст. Далее, теоретически, словарь может
расти бесконечно, т. е. на его рост сам алгоритм не налагает ограничений.
На практике при достижении определенного обьема занимаемой памяти
словарь должен очищаться полностью или частично.
Пример
И еще раз закодируем строку "кот_ломом_колол_слона" длиной 21 сим-
вол. Для Ь278 буфер в принципе не требуетея, поскольку достаточно легко
так реализовать поиск совпадающей фрази максимальной длини, что по-
следовательность незакодированних символов будет просматриваться толь-
ко один раз. Позтому буфер показан только с целью большей доходчивости
примера. Фразу с номером 0 зарезервируем для обозначения конца ежатой
строки, номером 1 будем задавать пустую фразу словаря.
Таблица 3.3
Шаг Добавляемая в словарь фраза Буфер Совпадающая фраза £ Закодированньїе данньїе
Сама фраза Ее номер п $
1 к 2 КОТ-ЛОМ - 1 "к"
2 0 3 ОТ-ЛОМО - 1 "о"
3 т 4 т__ломом - 1 "т"
4 5 _ломом_ - 1 п н
87
Книга написана коллективом Й11р:/Лууууу.сошрге88іоп.пі/
Матодьі сжатия данньїх (7000+ файлов о сжатии)
Шаг Добавляемая в словарь фраза Буфер Совпадающая фраза 5 Закодированньїе данньїе
Сама фраза Ее номер п 8 і
5 л 6 ЛОМОМ-К - 1 "л" ;
6 ом 7 омомко 0 3 "М” І
7 ом_ 8 омколо ом 7 П 1»
8 ко 9 КОЛОЛ-С к 2 "о"
9 ло 10 ЛОЛ-СЛО л 6 "о"
10 л_ 11 л_слона л 6 II N
11 с 12 слона - 1 "с"
12 лон 13 лона ло 10 "н"
13 а 14 а - 1 "а" 1
Строку удалось закодировать за 13 шагов. Так как на каждом шаге вьіда-
вался один код, сжатая последовательность состоит из 13 кодов. Возможно
использование 15 номеров фраз (от 0 до 14), позтому для представлення п
посредством кодов фиксированной длиньї нам потребуется 4 бита. Тогда
размер сжатой строки равен 13 (4+8) = 156 битам.
Ниже приведен пример реализации алгоритми сжатия Ь278.
п = 1;
мітіїе ( ! ОаСаГіїе.ЕОЕ() ){
з = ВаЬаГіїе.КеадЗутЬої; // читаєм очередной символ
/*пмтаемся найти в словаре фразу, представляющую
собой конкатенацию родительской фразм с номером п и
символа з; функция возвращает номер искомой фразьі
в рЬгазе_пиш; если же фразьі нет, то рЬгазе_пит
принимает значение 1, т. е. указьівает на пустую фразу
*/
ГіпдРИгазе (&рНгазе_пит, п, з);
і£ (рЬгазе_пит 1=1)
/*такая фраза имеется в словаре, продолжим поиск
совпадающей фразьі максимальной длиньї
*/
п = рЬгазе_пит;
еізе {
/*такой фразьі нет, запишем в вьгходной файл код;
ІИОЕХ_ЬК - зто константа, определяющая длину
битового представлений номера п
*/
88
ййр:/Лулулу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
СотргеззедГіІе.НгіЛеВіСз (п, ІМБЕХ_ЬИ);
СотргеззесІЕіІе. НгіЬеВіїз (з, 8) ;
АскіРЬгазе (п, з); // добавим фразу в словарь
п = 1; // подготовимся к следующему шагу
)
)
// признак конца файла
СошргеззесіГіІе.НгібеВіЬз (0, ІИОЕХ_ЬМ) ;
При декодировании необходимо обеспечивать такой же порядок обнов-
лення словаря, как и при сжатии. Реализуем алгоритм следующим образом:
£ог (;;) (
// читаєм индекс родительской фрази
п = СотргеззесіГіїе.ВеасіВібз (ІМБЕХ_ЬМ) ;
і£ (!п)
Ьгеак; // конец файла
// читаєм несовпавший символ з
з = СотргеззесІГіїе.КеасІВібз (8) ;
/♦находим в словаре позицию начала фрази с индексом п
и ее длину
*/
СеЬРЬгазе (&роз, &1еп, п)
/♦записьіваем фразу с индексом п в файл
раскодированнмх данньїх
♦/
£ог (і =0; і < Іеп; і++)
ОаЬаЕіІе.ИгіСеЗутЬоІ (Віс£[роз+і]);
// записьіваем в файл символ з
ВаЬаГіІе.НгіСеЗутЬоІ (з);
АскіРЬгазе (п, з); // добавляєм новую фразу в словарь
}
Очевидно, что скорость раскодирования для алгоритмов семейства 1278
потенциально всегда меньше скорости для алгоритмов со скользящим ок-
ном, так как в случае последних затрати по поддержанию словаря в пра-
вильном состояний минимальньї. С другой сторони, для 1278 и его потом-
ков, например 125У, существуют зффекгивнне реализации процедур поиска
и добавлення фраз в словарь, что обеспечивает значительное преимущество
над алгоритмами семейства Ї.7Л1 в скорости сжатия.
Несмотря на относительную бистроту кодирования 1278, при грамотной
реализации алгоритма оно все же медленнее декодирования, соотношение
скоростей равно обично 3:2.
Интересное свойство 1278 заключается в том, что если исходньїе дан-
ньіе порожденьї источником с определенньїми характеристиками (он дол-
89
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.пі/
Матодьі сжатия данньїх(7000+ файлов о сжатии)
жен бьіть стационарньїм1 и зргодическим2), то козффициент сжатия при-
ближается по мере кодирования к минимальному достижимому [13]. Инач»
говоря, количество битов, затрачиваемьіх на кодирование каждого символа.
в среднем равно так назьіваемой знтропии источника. Но, к сожалению
сходимость медленная и на данньїх реальной длинм алгоритм ведет себя не
лучшим образом. Так, например, козффициент сжатия текстов в зависимо-
сти от их размера обьічно колеблется от 3.5 до 5 бит/символ. Кроме того
нередки ситуации, когда обрабатьіваемьіе данньїе порожденьї источником с
ярко вмраженной нестационарностью. Позтому при оценке реального пове-
дения алгоритма следует относиться с большой осторожностью к теорети-
ческим викладкам, обращая внимание на вьшолнение соответствующих ус*
ловий.
Доказано, что аналогичньїм свойством сходимости обладает и классиче-
ский алгоритм Ь277, но скорость приближения к знтропии источника
меньше, чем у алгоритма Ь278 [12].
Другие алгоритми 1.2
В табл. 3.4 приведень! несколько достаточно характерних алгоритмов
Ь2. Указанньїй список далеко не полон, реально существует в несколько раз
больше алгоритмов, основанньїх либо на Ь277, либо на Ь278. Известнн
и гибридньїе схеми, сочетающие оба подхода к построению словаря.
Таблица 3.4
№ Названий Автори, год Тип алгоритма
1 ьгмху Миллер (Міііег) и Узгнам (\Уе£тап), 1984 Алгоритм семейства Ь278
2 Ь2У/ Узлч (ЇУеІсЬ), 1984 Модификация Ь278
3 Ь2В Белл (Веіі), 1987 Модификация Ь288
4 Ь2Н Брент (Вгепі), 1987 Модификация Ь288
5 Ь2РС Файзлз (Ніаіа) и Грини (Сгеепе), 1989 Модификация Ь277
6 Ь2ВУ/ Бендер (Вепсіег) и Вулф (\Уо1Г). 1991 Способ модификация ал- горитмов семейства 1,277
7 ьгюуі Уилльямс (Мііііатз), 1991 Модификация Ь288
8 Ь2СВ Блум (Віоот), 1995 Модификация Ь277
1 Многомерньїе распределения вероятностей генерации последовательностен
(слов) из п символов не меняются во времени, причем п -любое конечнеє число.
2 Среднее по времени равно среднему по числу реализаций; иначе говоря, дл:
оценки свойств источника достаточно только одной длинной сгенерированной по
следовательности.
90
Шір:/Лулулу.сотрге88Іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздеп 1. Методи сжатия без потерь
№ Названий Автори, год Тип алгоритма
9 Ь2Р Блум (Віоот), 1995 Основан на Е277
Ю Е277-РМ, Е2РС-РМ, Е2ХУ-РМ Хоанг (Ноап§), Лонг (Ьоп§) и Виттер (Уіііег), 1995 Модификации алгоритмов Ь2
І. Ь2М¥У. Алгоритм семейства Ь278. Интересен способом построения
словаря: новая фраза создается с помощью конкатенации двух послед-
них использованньїх фраз, а не конкатенации фразьі и символа, т. е. сло-
варь наполняется "агрессивнее". Практические реализации Ь2М\У в про-
граммах универсального сжатия неизвестньї. Причина, по-видимому, со-
стоит в том, что усложнение алгоритма не приводит к адекватному
улучшению сжатия по сравнению с исходньїм Ь2\У. С другой сторони,
вигода от бистрого заполнения и обновлення словаря проявляется глав-
ним образом при обработке неоднородних данньїх. Но для сжатия дан-
ннх такого типа заведомо лучше подходит метод скользящего словаря
(семейство Ь277).
2. Ь2\¥. Модификация Ь278. За счет предварительного занесення в сло-
варь всех символов алфавита входной последовательности результат ра-
ботьі Ь2\У состоит только из последовательности индексов фраз слова-
ря. Из-за устранения необходимости регулярной передачи одного сим-
вола в явном виде Ь2ХУ обеспечивает лучшее сжатие, чем Ь278.
Подробнее об Ь2\¥ см. в разд. 2, атакже в [І І].
3. Ь2В. Модификация Ь288. Изменения затрагивают кодирование указа-
телей. Смещение задается переменннм количеством битов в зависимо-
сти от реального размера словаря (в начале сжатия он мал). Длина сов-
падения записивается у-кодами Злиаса. И первьій и второй механизм
часто применяются при разработке простих и обеспечивающих високую
скорость алгоритмов семейства Ь277.
4. Ь2Н. Модификация Ь288. Аналогична Ь2В, но для сжатия смещений и
длин соответствия используются коди Хаффмана. Заметам, что боль-
шинство современних архиваторов также применяют кодирование по
методу Хаффмана в зтих целях.
5. Ь2ГС. Модификация Ь277. На самом деле представляет собой несколь-
ко алгоритмов. Идея самого сложного (С2 в обозначении авторов Ь2Р6)
заключается в кодировании фрази не парой <длина, смещение>, а ин-
дексом соответствующего фразе узла дерева цифрового поиска. Одина-
ковие фрази словаря имеют один и тот же индекс, что и обеспечивает
более зкономное кодирование строк. Алгоритми Ь2РС не получили рас-
пространения на практике. В значительной степени атому способствова-
ли патентньїе ограничения.
91
Книга написана коллективом Шір:/Лууууу.сошрге88Іоп.ги/
Методи сжатия данньїх(7000+ файлов о сжатии)
6. Ь2В\¥. Способ модификации алгоритмов семейства Ь277. За счет учета
имеющихся в словаре одинаковьіх фраз позволяет уменьшить количест-
во битов, требуемьіх для кодирования длиньї совпадения. Подробнее см.
в подразд. "Пути улучшения сжатия алгоритмов Ь2".
7. Ь2В\¥1. Алгоритм является модификацией Ь288, точнеє, алгоритма А1
группьі Ь2ЕС и разработан с целью обеспечения максимальной скорости
сжатия и разжатия. Кодм фраз состоят из 16 бит: 12 бит указмвают сме-
щение і и 4 бита задают длину совпадения у, а символм 5 передаются как
байти (требуют 8 бит). Флаги / задаются сразу для последовательности
из 16 кодов и литералов, т. е. сначала вьідается 2-байтовое слово значе-
ний флагов, затем группа из 16 кодов и/или литералов. Для поиска в сло-
варе при сжатии используется хеш-таблица со смешиванием по трем
символам. Хеш-цепочки как таковьіе отсутствуют, т. е. каждая новая
фраза заменяет в таблице старую с таким же значением хеш-функции. За
счет устранения побитового ввода-вьівода и использования словаря ма-
лого размера достигается високая скорость кодирования и декодирова-
ния. Степень сжатия Ь2К\У1 равна примерно 1.5-2.
8. Ь2СВ. По сути, целая группа алгоритмов, являющихся той или иной
модификацией Ь277. Основная идея заключается во введений достаточ-
но сильного ограничения на минимальную длину совпадения - от четьі-
рех символов и более. Если фраза удовлетворяющей длини не найдена,
то кодируется один символ (литерал). Характер типичнмх данньїх таков,
что литералм и успешно закодированние с помощью словаря строки
имеют тенденцию обьединяться в группьі с себе подобньїми, т. е., на-
пример, на виходе Ь2СВ могут появиться 10 литералов подряд, затем 5
закодированних строк, затем опять несколько литералов и т. д. Ота осо-
бенность позволяет реализовать достаточно зффективное статистическое
кодирование потоков литералов и указателей фраз. Тем не менее, расте-
ряв преимущество в скорости, Ь2СВ уступает современнмм алгоритмам
РРМ по козффициенту сжатия.
9. Ь2Р. Основан на Ь277. Для каждого входного символа строка из пред-
шествующих Ь символов рассматривается как контекст С длини N. С
помощью хеш-функции в словаре находится одна из совпадающих с
контекстом С фраз, назовем зту фразу С’: С’= С. Строка 5 буфера срав-
нивается с фразой, непосредственно следующей за С’. Если длина совпа-
дения Ь > 0, то вьідается флаг успеха/= 1 и 5 кодируется через длину і.
Так как С находится детерминированнмм образом, то смещение коди-
ровать не надо. Если 2 = 0 или С не била найдена, то вьідается/= 0 и
первьій символ 5 кодируется непосредственно. Декодер должен исполь-
зовать такой же механизм для поиска С. Изложенньїй алгоритм спра-
92
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
ведлив для алгоритма Ь2Р1, достоинством которого является високая
скорость. В более сложньїх модификациях процесе поиска С повторяет-
ся для контекста длиньї N-1 и т. д. В Ь2Р1 литеральї просто копируютея,
а для кодирования флагов и длин используются коди переменной длиньї.
В Ь2РЗ применяетея достаточно сложная схема кодирования потоков
флагов, длин и литералов на основе алгоритма Хаффмана. В сочетании с
РРМ техника Ь2Р обеспечивает високую степень сжатия при неплохих
скоростннх характеристиках.
10. Б277-РМ, ЬХГС-РМ, Ь2\¥-РМ. Модификации алгоритмов Ь2. Исполь-
зуетея несколько контекстнозависимих словарей, а не один словарь.
В контекстнозависимий словарь порядка Ь с номером і попадают только
строки, встречаемие после контекста1 С,- длиньї £. Кодирование строки
буфера 8 производитея с помощью одного или нескольких словарей, но-
мера которих определяютея последними закодированними перед 8 сим-
волами. Учет контекста позволяет существенно улучшить сжатие исход-
них словарних схем. Подробнее см. в подразд. "Пути улучшения сжатия
алгоритмов Ь2".
В табл. 3.5 приведеньї результати сравнения нескольких алгоритмов по
степени сжатия на наборе Са1§СС. х
Таблиця 3.5
І.2Р1 1238 12В 121А/-РМ 12Р6 12Р6-РМ 12РЗ
ВіЬ 1.98 2.81 2.48 2.52 3.07 2.76 3.28 3.32
Воокі 1.42 2.33 2.52 2.07 2.92 2.21 2.44 2.50
Воок2 1.76 2.68 2.61 2.44 3.14 2.62 2.88 3.01
Оео 1.19 1.19 1.38 1.30 1.23 1.40 1.42 1.51
1.76 2.28 2.21 2.25 2.52 2.33 2.46 2.78
ОЬ]1 1.55 1.57 1.58 1.88 1.56 1.99 1.85 1.83
ОЬ]2 2.21 2.28 1.96 2.55 2.34 2.70 2.63 2.79
Рарегі 1.72 2.47 2.21 2.48 2.60 2.64 2.92 2.73
Рарег2 1.62 2.50 2.37 2.33 2.72 2.53 2.86 2.72
Ріс 6.30 3.98 8.51 7.92 8.16 9.20 8.60 9.30
РгО£С 1.86 2.44 2.15 2.60 2.52 2.77 2.92 2.73
РГО£І 2.66 3.28 2.71 3.79 3.38 4.06 4.44 4.19
Рговр 2.82 3.31 2.67 3.85 3.33 4.21 4.42 3.98
Тгапї 3.27 3.46 2.53 3.77 3.46 4.55 4.79 4.79
Итого 2,29 2.61 2.71 2.98 3.07 3.28 3.42 3.44
1 Контекст - зто в данном случае конечная последовательность символов. См.
также главу "Сжатие данньїх с помощью контекстних методов моделирования ".
93
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.пі/
Методи сжатия данних(7000+файлов о сжатии)
Видно, что за счет оптимизации структури словаря достигается значи-
тельное улучшение сжатия. Но, с другой сторони, сложние алгоритми по-
строения словаря обьічно существенно замедляют работу декодера, что сво-
дит на нет достоинства Ь2.
Приведенньїе ниже характеристики степени сжатия и скорости алгорит-
мов семейств Ь277 и Ь278 относятся к типичннм представителям се-
мейств - Ь2Н и Ь2\У соответственно.
Характеристики алгоритмов семейства Ь.277:
Степени сжатия: определяются даннмми, обмчно 2-4.
Типи данньїх: алгоритми универсальнн, но лучше всего подходят
для сжатия разнороднмх данньїх, например файлов ресурсов.
Симметричность по скорости: примерно 10:1; если алгоритм обес-
печивает хорошеє сжатие, то декодер обьічно гораздо бистреє кодера.
Характерньїе особенности: обмчно медленно сжимают вьісокоизбм-
точньїе даннме; из-за вмсокой скорости разжатия идеально подходят для
создания дистрибутивов программного обеспечения.
Характеристики алгоритмов семейства Ь278:
Степени сжатия: определяются даннмми, обмчно 2-3.
Типьі данньїх: алгоритми универсальнн, но лучше всего подходят
для сжатия текстов и тому подобних однородних данних, например ри-
сованнмх картинок; плохо сжимают разнороднне даннме.
Симметричность по скорости: примерно 3:2, декодер обмчно в пол-
тора раза бмстрее кодера.
Характерньїе особенности: из-за относительно небольшой степени
сжатия и невмсокой скорости декодирования уступают по распростра-
ненности алгоритмам семейства Ь277.
.....-.......—..............................—..........—......
Формат ОеЛаіе
Формат словарного сжатия ВеЯаІе, предложеннмй Кацем (Каіх), исполь-
зуется популярним архиватором РК2ІР [3]. Сжатие осуществляется с по-
мощью алгоритма типа Ь2Н, иначе говоря, указатели и литералм кодируют-
ся по методу Хаффмана. Формат специфицирует только работу декодера,
т. е. определяет алгоритм декодирования, и не налагает серьезньїх ограни
чений на реализацию кодера. В принципе в качестве алгоритма сжатия мо-
жет применяться любой работающий со скользящим окном, лишь бьі он ис-
ходил из стандартной процедури обновлення словаря для алгоритмов се-
мейства Ь277 и использовал задаваемьіе форматом типи кодов Хаффмана.
94
К((р://уууууу.сотрі'Є‘>‘>іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методи сжатия без потврь
Особенности формата:
является универсальньїм, т. е. не ориентирован на конкретний тип данньїх;
прост в реализации;
де-факто является одним из промьішленннх стандартов на сжатие данньїх.
Существует множество патентов, покрьівающих весь формат полностью
или какие-то детали его реализации. С другой сторони, ВеЯаіе используется
в огромном количестве программньїх и аппаратньїх приложений и отрабо-
таньї методи защитн в суде в случае предьявления соответствующего иска
от компании, обладающей патентом на формат или его часть.
Поучительнаяремарка. В 1994 г. корпорацію ІМзуз "вспомнила” о своем
патенте в США на алгоритм Ь21Р, зарегистрированном в 1985 г., и обьявила
о незаконності использования Ь21¥ без соответствующей лицензии. В частно-
сти, Ііпізуз заявила о нарушении своих прав как патентовладельца в случае не-
лицензированного использования алгоритма 1.2ТР в формате С1Е. Вілло обьявле-
но, что производители, программьі или аппаратное обеспечение которьіх чи-
тают или записувают файли в формате СІЕ, должньї покупать лицензию на
использование, а также вьіплачивать определенний процент с прибили при
коммерческом применении. Далее Ііпізуз в лучших традициях тоталитарной
пропаганди последовательно продолжала переписувать историю, неоднократ-
но меняя задним числом свои требования к лицензируемим продуктам и условия
оплату. В частности, було оговорено, что плата взимается только в случае
коммерческих продуктов, но влюбом случае требуется получить официальное
разреиіение от Ііпізуз. Но, с другой сторону, Ііпізуз требует у всех владельцев
Интернет (интранет)-сайтов, использующих рисунки в формате СІЕ, приобре-
сти лицензию стоимостью порядка $5000 в том случае, если ПО, с помощью
которого били создану зти файлу (НЕ, не имеет соответствующей лицензии
Ііпізуз. С точки зрения некоторух независимух зкспертов по патентному пра-
ву, чтение (декодирование) (НЕ-файлов не наруиіает права Ііпізуз, но, судя по
всему, сама корпорация придерживается другой точки зрения. Также доста-
точно странно поведение корпорации СотриЗегу, разработавшей формат СІЕ
и опубликовавшей его в 1987 г„ т. е. уже после регистрации патента на Ь21¥,
как открутуй и свободний от оплату. По состоянию на 2001 г., Ь21Узапа-
тентован Ііпізуз по меньшей мере в следующих странах: США, Канаде, Велико-
британии, Германии, Франции, Японии. Текущее состояние дел можно вуяс-
нить на сайте компании тті.ипізуз.сот. Срок действия основного патента
в США истекает не ранее 19 июня 2003 г.
ОБЩЕЕ ОПИСАНИЕ
Закодированние в соответствии с форматом Вейаіе данние представля-
ют собой набор блоков, порядок которнх совпадает с последовательностью
соответствующих блоков исходних данньїх. Используется 3 типа блоков за-
кодированннх данньїх:
95
Книга написана коллективом 1Шр:/Лууууу.сотрге88Іоп.ги/
(7000+ файлов о сжатии)
Мвтодьі сжатия данньїх
1) состоящие из несжатьіх данньїх;
2) использующие фиксированньїе кодьі Хаффмана;
3) использующие динамические кодьі Хаффмана.
Длина блоков первого типа не может превмшать 64 Кб, относительно
других ограничений по размеру нет. Каждьій блок типа 2 и 3 состоит из
двух частей:
описання двух таблиц кодов Хаффмана, использованньїх для кодирова-
ния данньїх блока;
" собственно закодированньїх данньїх.
Кодьі Хаффмана каждого блока не зависят от использованньїх в предьі-
дущих блоках.
Само описание динамически создаваемьіх кодов Хаффмана является,
в свою очередь, также сжатьім с помощью фиксированньїх кодов Хаффма-
на, таблица которьіх задается форматом.
Алгоритм словарного сжатия может использовать в качестве словаря
часть предьідущего блока (блоков), но величина смещения не может бьггь
больше 32 Кб. Данньїе в компактном представлений состоят из кодов зле-
ментов двух типов:
литералов (одиночних символов);
указателей имеющихся в словаре фраз; указатсли состоят из пари <дли-
на совпадения, смещение>.
Длина совпавшей строки не может превмшать 258 байт, а смещение
фрази - 32 Кб. Литералм и длини совпадения кодируются с помощью од-
но# таблицьі кодов Хаффмана, а для смещений используется другая табли-
ца; иначе говоря, литералм и длини совпадения образуют один алфавит.
Именно зти таблицм кодов и передаются в начале блока третьего типа.
Алгоритм декодирования
Сжатие данние декодируются по следующему алгоритму.
СІО{
ВІоск.КеасіНеасіег (); // читаєм заголовок блока
/*определяем необходимьіе действия по разжатию в
соответствии с типом блока
*/
зміїсН (ВІоск.Туре) {
сазе МО_СОМР:// данньїе не сжати, просто копируем их
/*заголовок блока не вьіровнен на границу байта,
сделаем зто
' */
Віоск.ЗеекКехЬВуСе ();
96
1Шр:/Лууууу.сошрге88Іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Віоск. ВеасіЬеп (); // читаєм длину блока
/*копируем данньїе блока из входного файла
сжатмх данньїх в результирующий ВабаГіІе
*/
РиЬВаиВаба (Ніпсіон, Віоск, СабаГіїе) ;
Ьгеак;
сазе ОУЛ_НОГ:
/*блок данньїх сжат с помощью динамически
построенньїх кодов Хаффмана, прочитаєм их
- */
Віоск.КеасІНи££іпапСос1ез ();
сазе ГІХЕВ-НОЕ:
£ог (;;) {
/♦прочтем один символ алфавита литералов и
длин совпадения
*/
уаіие = Віоск. ВесосІеЗуїпЬоІ ();
і£ ( уаіие < 256)
// зто литерал, запишем его в вьіходной файл
ВаЬаГіїе .ИгібеЗупіЬоІ (уаіие);
еізе і£ ( чаїие == 256)
// знак конца блока
Ьгеак;
еізе {
// зто закодированньїй указатель
та£сЬ_1еп = Віоск.ВесосіеЬеп ();
та£сЬ_роз = Віоск. БесосіеРоз ();
/*скопируем соответствующую фразу из словаря
в вьіходной файл
*/
СоруРЬгазе (Кіпсіои, та£сН_1еп, та£сЬ_роз,
ОаЬаГіїе);
)
};
Ьгеак;
де£аи1Ь:
// Ошибка в блоке данньїх
ЬЬгом ВасЮаба (Віоск);
)иИі1е ( ІІзЬазЬВІоск );
Предполагается, что используемме алгоритми поддерживают правиль-
неє обновление окользящего окна.
97
Книга написана коллективом 1ійр:/Лууууу.сотрге88Іоп.ги/
Методьі сжатия данньїх (7000+файлов о сжатии)
Кодирование длин и смещений
Как уже указувалось, литеральї и длини совпадения обьединеньї в єдиний
алфавит символов со значеннями {0, 1, 285}, так что 0-255 отведеньї под
литералм, 256 указьівает на конец текущего блока, а 257-285 определяют дли-
ньї совпадения. Код длиньї совпадения состоит из кода числа, лежащего в диа-
пазоне 257-285 (бази длиньї совпадения), и, возможно, дополнительно читае-
мьіх битов, непосредственно следующих за кодом зтого числа. База определяет
квантованную длину совпадения, позтому одному значенню бази может соот-
ветствовать несколько длин. Значение поля дополнительно читаемьіх битов ис-
пользуется для доопределения длиньї совпадения. Таблица отображения значе-
ний кодов в длини фраз приведена ниже (табл. 3.6).
Таблица 3.6
Значе- ние базьі Число доп. битов Длина сов- падения Значение бази Число доп. битов Длина совпа- дения
257 0 3 272 2 31...34
258 0 4 273 3 35...42
259 0 5 274 3 43...50
260 0 6 275 3 51...58
261 0 7 276 3 59...66
262 0 8 277 4 67...82
263 0 9 278 4 83...98
264 0 10 279 4 99...114
265 1 11,12 280 4 115...130
266 1 13,14 281 5 131...162
267 1 15,16 282 5 163...194
268 1 17,18 283 5 195...226
269 2 19...22 284 5 227...257
270 2 23...26 285 0 258
271 2 27...30
Поле дополнительньїх битов представляет собой целое число заданной
длиньї, в котором первьім записан самий старший бит. Длина совпадения
258 кодируется с помощью небольшого числа битов, поскольку зто макси-
мально допустимая в ОеПаїе длина совпадения, и такой прием позволяет
увеличить степень сжатия вьісокоизбьіточньїх файлов.
Таким образом, функция ВІоск.ОесосіеЗутЬої, упомянутая в предьі-
дущем подразд., читает символ, которьій может бить либо литералом, либо
знаком конца блока, либо базой совпадения. В последнем случае, т. е. когда
значение символа > 256, дополнительньїе битьі читаются с помощью функ-
ции ВІоск.ВесобеЬеп.
98
1іІІр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Представление смещений также состоит из двух полей: бази и поля до-
полнительньїх битов (табл. 3.7). Обьединение смещений в группьі позволяет
использовать достаточно зффективньїе кодьі Хаффмана небольшой длиньї,
канонический алгоритм построения которьіх обеспечивает бмстрое декоди-
рование. Обьединение целесообразно также потому, что распределение ве-
личин смещений в отдельной группе обьічно носит случайньїй характер.
Таблица 3.7
Зна- чение базьі Число ДОП. битов Значение смещения Значение базьі Число ДОП. битов Значение смещения
0 0 1 15 6 193...256
І 0 2 16 7 257...384
2 0 3 17 7 385...512
3 0 4 18 8 513...768
4 1 5,6 19 8 769... 1024
5 1 7,8 20 9 1025...1536
6 2 9...12 21 9 1537...2048
7 2 13...16 22 10 2049...3072
8 3 17...24 23 10 3073...4096
9 3 25...32 24 11 4097...6144
10 4 33...48 25 11 6145...8192
11 4 49...64 26 12 8193...12288
12 5 65...96 27 12 12289... 16384
13 5 97...128 28 13 16385.„24576
14 6 129...192 29 13 24577...32768
Функция віоск.ОесойеРоз должна вьшолнить два действия: прочитать
базу смещения и, на оснований значення бази, прочитать необходимое ко-
личество дополнительньїх битов. Как и в случае литералов/длин совпаде-
ния, дополнительньїе битм соответствуют целмм числам заданной длиньї,
в которьіх первьім записав самий старший бит.
Кодирование блоков фиксированньіми кодами Хаффмана
В зтом случае для сжатия символов алфавита литералов и длин совпаде-
ния используются заранее построенньїе коди Хаффмана, известньїе кодеру
и декодеру, т. е. нам не нужно передавать их описання. Длиньї кодов опре-
деляются значением символов (табл. 3.8).
99
Книга написана коллективом 1Шр:/Лууууу.сошрге88Іоп.ги/
Методи сжатия данних (7000+ файлов о сжатии)
Таблица 3.8
Значение символа Длина кода, бит Значение кода (в двоичной системо счисления)
0-143 8 00110000 10111111
144-255 9 110010000 111111111
256-279 7 0000000 0010111
280-287 8 11000000 11000111
Символи со значеннями 286 и 287 не должньї появляться в сжатмх дан-
ньїх, хотя для них и отведено кодовое пространство.
Бази смещений кодируются 5-битовьіми числами так, что 00000 соот-
ветствует 0, 11111 -31. При зтом запрещается использовать бази со значе-
ннями 30 и 31, так как их смисл не определен.
Пример
Покажем, как виглядит в закодированном виде такая последователь-
ность замещенньїх строк и литерала:
Злемент Смещение і Длина совпадения / Литерал
1 260 5 -
2 45 20 -
3 - - 3
Длина совпадения раскладьівается на два поля, позтому для у = 5 получа-
ем (см. табл. 3.6):
Длина совпадения Соответствующий символ в алфавите литералов/длин База Число дополнительньїх битов
5 259 259 0
Длина совпадения кодируется как 0000011 (см. табл. 3.8).
В общем случае смещение состоит также из двух полей, и для і = 260
получаем:
Смещение База Число дополнительньїх битов Значение дополнительньїх битов
260 16 7 3
100
1Шр:/Лууууу.сошрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздеп 1. Методи сжатия без потерь
Смещение 260 записьівается как последовательность битов
ЮООО ОООООІІ (подчеркиванием показана граница чисел), где первое чис-
ло - база, второе - поле дополнительнмх битов, равное 260 - 257 = 3.
Действуя аналогичнмм образом, на оснований табл. 3.6, 3.7, 3.8 находим
отображение всей последовательности:
Злемент Последовательность битов Комментарии
І 0000011 10000.0000011 База длиньї совпадения = 259. Поле дополнительнмх битов совпадения от- сутствует. База смещения =16. Поле дополнительнмх битов смещения = 3. Длина поля = 7
2 0001101_01 01010_1100 База длинм совпадения = 269. Поле дополнительнмх битов совпадения = 1. Длина поля = 2. База смещения = 10. Поле дополнительнмх битов смещения = 12. Длина поля = 4
3 00110011 Литерал = 3
Кодирование блоков динамически создаваемьіми кодами
Хаффмана
В зтом случае перед собственно сжатмми данньїми передается описание
кодов литералов/длин и описание кодов смещений. В методе ВеПаіе исполь-
зуется канонический алгоритм Хаффмана, позтому для указаним кода сим-
вола достаточно задать только длину зтого кода. Неявним параметром яв-
ляется положение символа в упорядоченном списке символов. Таким обра-
зом, динамические кодьі Хаффмана описьіваются цепочкой длин кодов,
упорядоченньїх по значенню соответствующего кодам числа (литера-
ла/длиньї совпадения в одном случае и смещения в другом). При зтом алфа-
вит СИТ (сосієхуогсі 1еп§0і8) длин кодов имеет вид, описанньїй в табл. 3.9.
Таблица 3.9
Значение символа алфавита <мі_ Что определяет
0...15 Соответствует длинам кодов от 0 до 15
16 Копировать предндущую длину кода х раз, где х определяется зна- чением 2 битов, читаемьіх после кода символа 16; можно указать необходимость повторить предьідущую длину 3-6 раз
101
Книга написана коллективом Шір:/Лууууу.сошрге88Іоп.ги/
Методи сжатия данини (7000+ файлов о сжатии)
Значение символа алфавита СУУ!_ Что определяет
17 Позволяет задать для х кодов, начиная с текущего, длину 0; х мо- жет принимать значення от 3 до 10 и определяется таким же обра- зом, как и для 16
18 Аналогично 17, но х может бьіть от 11 до 138
Например, если в результате декодирования описання кодов бьіла долу-
чена цепочка длин 2, 3, 16 (х = 4), 17 (х=3), 4,..., то длина кодов символов
будет равна:
Значение символа 0 1 2 3 4 5 6 7 8 9
Длина кода символа 2 3 3 3 3 3 0 0 0 4 ?
Обратите внимание, что символьї упорядоченьї по возрастанию их зна-
чений.
С целью увеличения сжатия сами зти цепочки длин кодируются с помо-
щью кодов Хаффмана. Если длина кода символа (т. е. длина кода длин ко-
дов) равна нулю, то зто значит, что соответствующий символ в данньїх не
встречается и код ему не отводится.
Формат блока с динамическими кодами Хаффмана описан в табл. 3.10.
Таблица 3.10
Поле Описание Размер
НЬІТ Хранит количество кодов литералов/длин минус 257 5 бит
НШ8Т Хранит количество кодов смещений минус 1 5 бит
НСЬЕК Хранит количество кодов длин кодов минус 4 4 бита
Таблица описання кодов длин ко- дов (кодьі 2) Содержит описание (последовательность длин ко- дов) длин кодов в следующем порядке: 16,17,18,0, 8,7,9,6,10,5,11,4, 12,3, 13,2,14,1,15. Иначе го- воря, зто порядок символов в алфавите С\УЬ. Длина кода любого символа С^Ь задается с помо- щью 3 бит; таким образом, длина кода длиньї кода может бьіть от 0 (соответствующий символ из С\УЬ не используется) до 23 - 1 = 7 бит. Длиньї однозначно задают совокупность кодов (НСЬЕК+4)- 3 бита
Таблица описання кодов ли- тералов/ длин (кодьі 1) Содержит описание НЬІТ+257 кодов литералов/длин совпадения, закодировано кодами длин кодов Перемен- НЬІЙ
102
ййр:/Лууууу.сошрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Поле Описание Размер
Таблица описання кодов сме- щений Содержит описание НОІ8Т+1 кодов смещений, за- кодировано кодами длин кодов Перемен- НЬІЙ
Сжатше данньїе Содержит данньїе, сжатьіе с помощью двух задан- ньіх вьіше совокупностей кодов II
Знак кон- ца блока Число 256, сжатое с помощью кодов литералов/длин и
На оснований вьшіесказанного можно дать такое описание алгоритма
кодирования литералов/длин:
литеральї/длиньї совпадения кодируются с помощью кодов Хаффмана
для литералов/длин, назовем их кодами 1;
описание кодов 1 передается в виде цепочки длин зтих кодов;
при указаний длин кодов могут использоваться специальньїе символи
(см. алфавит СИТ);
длиньї кодов, т. е. символи алфавита СИ2, кодируются с помощью ко-
дов Хаффмана для длин кодов, назовем их кодами 2;
кодм 2 также описмваются через последовательность их длин;
длиньї кодов 2 задаются с помощью 3-битовмх чисел.
Для кодирования смещений используется такой же подход, при зтом
длини кодов смещений также сжимаются с помощью кодов 2.
" 2^. Упражнение. Обьясните, почему размерьі полей, хранящих величиньї НІІТ,
НОІ5Т и НСІЕЬІ, именно таковьі, как зто указано в табл. 3.10.
Алгоритм словарного сжатия для Оегьате
Как уже указмвалось, формат ВеЯаїе не имеет четкой спецификации ал-
горитма словарного сжатия. Разработчики могут использовать какие-то
свои алгоритми, подходящие для решения специфических задач.
Рассмотрим свободньїй от патентов алгоритм сжатия для ОеЯаІе, ис-
пользуемий в разрабатьіваемой Іп£о-21Р §гоир утилите 2ір.
Для поиска фраз используется метод хеш-цепочек. Хеш-функция вьічисля-
ется на оснований 3 байт данньїх (напомним, что формат Вейаіе не позволяет
кодировать строки длиной менее 3 байт). Функция может принимать значення
от 0 до заданного числа НА8НМА8К - 1 и имеет вид вираження, последова-
тельно вьічисляемого для каждого очередного символа:
іпС ОРОАТЕ_НАЗН (іпЄ Ь, сЬаг с) {
геЬигп ( (Ь«Н_ЗНІЕТ) л с ) & НАЗН_МАЗК;
)
103
Книга написана коллективом К((р:/Лу\у\у.сотрге‘,‘,іоп.і'и/
Методи сжатия данньїх (7000+ Файлов о сжатии)
где Ь - текущее значение хеш-функции; с - очередной символ; Н 8НІРТ -
параметр сдвига значення функции.
Н 8НІРТ назначается таким образом, чтобьі после очередного сдвига
значение самого старого байта не влияло на значение хеш-функции.
На каждом шаге компрессор читает очередную 3-байтовую строку, рас-
полагающуюся в начале буфера. После соответствующего обновлення хеш-
функции производится обращение к первому злементу хеш-цепочки, адрес
которого определяется значением функции. Если цепочка пуста, то кодиру-
ется литерал, производится сдвиг окна на 1 символ и осуществляется пере-
ход к следующему шагу. Иначе хеш-цепочка анализируется с целью найти
самое длинное совпадение между буфером и фразами, на которие ссьілают-
ся злементи (узльї) хеш-цепочки. Обновление хеш-цепочек организовано
так, что поиск начинается с самих "нових" узлов, что позволяет сместить
распределение частот смещений кодируемих фраз в пользу коротких сме-
щений и, следовательно, улучшить сжатие, так как небольшие смещения
имеют коди малой длини.
Для ускорения кодирования в случае обработки избнточннх даннмх
очень длиннне хеш-цепочки обрубаются до определенной длини, задавае-
мой параметрами алгоритма. Усечение производится в зависимости от дли-
ньї уже найденного совпадения: чем оно длиннее, тем больше отрезаем.
Сжатие может бить улучшено за счет механизма "ленивого" сравнения
(Іаху таісЬіпе, или Іаху еуаіиаііоп). Зтот подход позволяет отойти от прямо-
линейного, "жадного" разбора входной последовательности и повисить зф-
фективность сжатия путем более аккуратного вьібора фраз словаря. После
того как определяется совпадающая фраза таіск (ґ+1) длини таіскіеп
(Ж) = £ для строки 5,+і, 5,+2, Зц-з, • •, находящейся в начале буфера, виполня-
ется поиск совпадения таіск (і+2) для строки 5^2, х1+3, .. Если
таісИ Іеп (/+2) > таіскіеп (/+1) = Ь, то отказнваемся от замещения строки
•5)+і, Уг+г, ^+з -. Решение о том, следует кодировать таіск (і+2) или нет, при-
нимается на шаге 1+3 по результатам аналогичной проверки. Иначе кодиро-
вание протекает обьічним образом, но с "запаздиванием" на один шаг. Под-
робнее:
// минимальная длина совпадения
сопзЬ іпС ТНКЕЗНОЬО = 3;
// смещение и длина совпадения для ліаСсй(С+1)
іпС ргеу_роз,
ргеу_1еп;
// смещение и длина совпадения для таі:сЬ (£+2)
іпС таСсЬ_ро5,
таЄсЬ__1еп = ТНКЕЗНОЬО - 1;
// признак отложенного кодирования фрази таСск(£+1)
104
Й11р:/Лууууу.сошрге88іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
іпб таСсИ_ачаі1аЬ1е = 0;
ргеч_роз = табсЬ_роз; ргеч_1еп = табсН_1еп;
/♦найдем максимальнеє (или достаточно длинное) совпадение
для позиции Е+2
*/
£іпсі_рИгазе (&табсН_роз, &таЬсН_1еп) ;
і£ ( ргеч_1еп >» ТНКЕЗНОЬО &&
табсЬ_1еп <= ргеч_1еп ) {
/* считаем, что вмгоднее закодировать фразу
ліа£сЛ(С+1)
*/
епсобе_рЬгазе (ргеч_роз, ргеч_1еп);
табсЬ_ачаііаЬ1е = 0;
таСсИ_1еп = ТНКЕЗНОЬП - 1;
// сдвинем окно на та£сЬ_1еп(С+1)-1 символов
точе_міп<іом (ргеч_1еп-1) ;
£ += ргеу_1еп-1;
} еізе {
// отложим решение о кодировании на один шаг
іГ (таЬсЬ_ачаі1аЬ1е) {
/♦кодирование литерала зс+1 или фрази таі:сЬ (£+1)
бьіло отложено; кодируем литерал зе+1
*/
епсоде_1ібега1 (иіп<іои[1:+1]) ;
}е1зе{
шаЬсИ_ачаі1аЬ1е = 1.;
)
точе міпдои (1);
С++;
)
Можно сказать, что зто одна из возможньїх реализаций схеми ленивого
сравнения с просмотром на один символ вперед. В зависимости от парамет-
ров алгоритма для обеспечения желаемого соотношения скорости и козф-
фициента сжатия механизм ленивого сравнения может запускаться при раз-
личньїх значеннях £.
Недостатком рассмотренной реализации ленивого сравнения является
порождение длинной цепочки литералов, если на каждом последующем ша-
га длина совпадения больше, чем на предьідущем.
Упражнение. Обьясните, почему использование ленивого сравнения при сжа-
тии не требует внесення изменений в алгоритм декодера.
105
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.пі/
Методьі сжатия данньїх(7000+ файлов о сжатии)
Кодер обривает текущий блок данньїх, если определяет, что изменение
кодов Хаффмана может улучшить сжатие, или когда происходит перепол-
нение буфера хранения блока.
Пути улучшения сжатия для методов Ь2
Улучшать сжатие алгоритмов семейства Зивц - Лемпела можно двумя
путями:
І) уменьшением количества указателей при неизменной или больіпей
общей длине закодированньїх фраз за счет более зффективного раз-
биения входной последовательности на фрази словаря;
2) увеличением зффективности кодирования индексов фраз словаря и
литералов, т. е. уменьшением количества битов, в среднем требуемьіх
для кодирования индекса или литерала.
Идея приемов, относящихся к первому пути, бьіла продемонстрирована на
примере ленивого сравнения при описании Пейаіе. Дейсгвительно, для одного
и того же словаря мьі имеем огромное количество вариантов построения набора
фраз для замещения им сжимаемой последовательности. Естественньїм являет-
ся так назьіваемьій "жадний" разбор (^геесіу раг8Іп§), при кагором на каждом
шаге кодер вьібирает самую длинную фразу. Заметим, что такой способ раз-
биения данньїх используют все рассмотренньїе нами классические алгоритми
Ь2. Если поиск ведется по всему словарю, то жадньш разбор обеспечивает наи-
большую скорость, но и пракгически всегда наихудшее сжатие. Стратегии оп-
тимального разбора позволяют значительно улучшить сжатие, до 10% и более,
но серьезньїм образом замедляют работу компрессора. Алгоритми оптимально-
го разбора для алгоритмов семейства 1.277 рассмотреньї, например, в [1, 10],
а для семейства Ь278 - в [8].
Добиваться большей компактносте представлення индексов словаря
можно за счет:
применения более сложнмх алгоритмов сжатия, например на базе кон-
текстних методов моделирования;
минимизации обьема словаря путем удаления излишних совпадающих
фраз.
В качестве способа увеличения зффективности кодирования литералов
может виступать явное статистическое моделирования вероятностей появ-
лення литералов в сочетании с арифметическим кодированием, которое
собственно и обеспечивает сжатие. При зтом, как показивают зксперимен-
ти, для улучшения сжатия целесообразно использовать контекстное моде-
лирование 1 -го или 2-го порядка.
106
1іІІр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Идеи нескольких способов увеличения степени сжатия для методов Зи-
ва - Лемпела достаточно подробно описань! ниже.
СТРАТЕГИЯ РАЗБОРА ЬЕЕ
Как возможную технику улучшения качества разбора входной последо-
вательности на фразьі словаря ЬХ77 укажем метод кодирования самой
длинной строки первой - Ьопдезі Рга§теп( Рігзї, или ЬРР. Суть ЬРР заклю-
чается в том, что рассматривается несколько вариантов разбиения буфера на
фразьі словаря и первой замещается строка, с которой совпала фраза макси-
мальной длиньї, причем строка может начинаться в любой позиции буфера.
Пример
Допустим, у нас в буфере находится строка "абракадабра". Пусть в сло-
варе для каждой позиции буфера можно найти следующие совпадающие
фразьі максимальной длиньї:
№ позиции Совпадающая фраза максимальной длиньї Длина фразьі
1 аб 2
2 брак 4
3 рак 3
4 ака 3
5 кадаб 5
6 адаб 4
7 даб 3
Поиск прерван на 7-й позиции, поскольку уже никакое совпадение не
может бьггь длиннее максимального встреченного 5. Так как способ коди-
рования самой длинной строки "кадаб" определен, то теперь для оставшейся
подстроки "абра" снова ищется самая длинная совпадающая фраза. Зто бу-
дет "бра". Оставшаяся слева строка "а" может бьіть закодирована как лите-
рал. Тогда разбор буфера будет иметь вид:
"абракадаб..." -> <а> <бра> <кадаб>.
Зта последовательность из литерала и двух фраз кодируется; окно смещает-
ся на 9 символов, а буфер приобретает вид "ра...
Заметам, что в случае жадного разбора буфер бьіл бьі разбит таким образом:
"абракадаб..." -> <аб> <рак> <адаб>.
ЬРР позволяет улучшить сжатие на 0.5-1% по сравнению с жаднмм раз-
бором.
107
Книга написана коллективом Шір:/Лууууу.сошрге88Іоп.пі/
Методи сжатия данньїх(7000+ файлов о сжатии)
Оптимальний разбор для методов 1.277
Звристические техники повмшения зффективности разбора входной по-
следовательности, например рассмотренньїе ленивое сравнение и метод
ЬРГ, не решают проблеми получения очень хорошего разбиения в общем
случае. Очевидно, что хотелось бьі иметь оптимальную стратегию разбора,
во всех случаях обеспечивающую минимизацию длиньї закодированной по-
следовательности, порождаемой компрессорами с алгоритмом словарного
сжатия типа Ь277 или Ь278.
Для алгоритмов семейства Ь277 зта задача била рассмотрена в [10] и
признана МР-полной, т. е. требующей полного перебора всех вариантов для
нахождения оптимального решения. В диссертации [1] бьіл изложен одно-
проходной алгоритм, которьій, как утверждается, позволяет получить опти-
мальное разбиение при затратах времени не больших, чем вносимьіх лени-
вьім сравнением.
Мьі рассмотрим алгоритм, обеспечивающий получение почти оптималь-
ного решения для методов Ь277. Похожая схема используется, например,
в компрессоре САВАКС.
В общем случае для каждой позиции і находим все совпадающие фрази
длиньї от 2 до максимальной мах ьем. На оснований информации о кодах,
используеммх для сжатия фраз и литералов, мьі можем оценить, сколько
примерно битов потребуется для кодирования каждой фразьі (литерала),
или какова цена ргісе ее кодирования. Тогда мьі можем найти близкое к оп-
тимальному решение за один проход следующим образом.
В массив ОІЇ8ЄІ8 будем записьівать ссьілки на фрази, подходящие для за-
мещения строки буфера, длиньї от 2 до тахіеп, где тахіеп является дли-
ной максимального совпадения для текущей позиции І. В поле оїї8[1еп] со-
храняем смещение фрази с длиной Іеп. Если имеется несколько вариантов
фраз с одной и той же Іеп, то вибираєм фразу с наименьшей ценой ргісе:
ОЇЇ8ЄІ8 [і].оІЇ5[1еп] = о££8еі_тіп_ргісе (і, Іеп). Размер обрабатмваемого блока
равен МАХ_Т. Для обеспечения зффективности разбора МАХ Т должно
бить достаточно большим - несколько сотен байт и более.
зЬгисї. Иосіе {
іпї тах_1еп;
іп£ о££з[МАХ_ЬЕМ+1];
} о££зеИз[МАХ_Т+1];
В ячейках ра+Ь [ Р ] массива раРЬ будем хранить информацию о том, как
добраться до позиции І, "заплатив" минимальную цену.
зСгисЬ {
/*цена самого "дешевого" пути до С (из дока известньїх путей)
108
ййр:/Лулулу.сотрге88Іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потврь
*/
іпі ргісе;
//с какой позиции мьі попадаєм в і:
іп£ ргеу_ї;
/*если мм попадем в С, кодируя фразу, то здесь
хранится смещение зтой фрази в словаре
*/
іп£ о££з;
} ра£Ь[МАХ_Т+1];
Основной цикл разбора:
раЬЬ[0].ргісе = 0;
£ог (Є - 1; і < МАХ_Т; £++){
//установим недостижимо большую цену для всех С
ра£.Ь[£] .ргісе = ІМГІМІТУ;
)
£ог (£ = 0; £ < МАХ_Т; £++){
/♦найдем все совпадающие фрази для строки,
начинающейся в позиции С
*/
£іпсі_та£сЬез (о££зе£з [£]);
£ог (Іеп = 1; Іеп <= о££зе£з[£].тах_1еп; 1еп++){
/♦определяем цену рассматриваемого перехода на іеп
символов вперед
*/
і£ (Іеп == 1)
// найдем цену кодирования литерала
ргісе = деС_1і£ега1_ргісе (£);
еізе
// найдем цену кодирования фрази длинм Іеп
ргісе = де£_та£сЬ_ргісе (Іеп,
о££зе£з[£],о££з[Іеп]);
// вичислим цену пути до і + Іеп
пеи_ргісе = ра£Ь[£.] .ргісе + ргісе;
і£ (пеи_ргісе < ра£Ь[£+1еп].ргісе){
/♦рассматриваемнй путь до і. + Іеп вигоднее
хранящегося в ра£Ь[£+1еп]
*/
ра£И[£+1еп].ргісе = пеи_ргісе;
ра£Ь[£+1еп].ргеч_£ = і;
і£ (Іеп > 1)
ра£Ь[£+1еп].о££з = о££зе£з[£].о££з[Іеп];
}
)
)
109
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.пі/
Методьі сжатия даннмх (7000+ файлов о сжатии)
В результате работьі алгоритма получаем почти оптимальнеє решение,
записанное в виде односвязного описка. Если предположить, что длина
тах іеп ограничиваетея в функции ГіпбтаісЬек так, чтобьі мьі не "пере-
прьігнули" позицию МАХ_Т, то головой списка является злемент
раіЬ[МАХ Т]. Путь записан в обратном порядке, т. е. фраза со смещением
раіЬ[МАХ_Т].оГГз и длиной МАХ_Т - раіЬ[МАХ_Т].ргеу_1 (или литерал в
позиции МАХ Т-1) должна кодироваться самой последней.
На практико применяетея несколько звристических правил, ускоряющих
поиск за ечет уменьшения числа рассматриваемьіх вариантов ветвления.
Описанньїй алгоритм позволяет улучшить сжатие для алгоритмов семейства
Ь277 на несколько процентов.
'Йк Упражнение. Придумайте алгоритм кодирования найденной последовательно-
сти фраз и литералов.
Алгоритм Бендера-Вулфа
Очевидно, что классические алгоритми семейства Ь277 обладают большой
избьггочностью словаря. Так, например, в словаре может бьггь несколько оди-
наковьіх фраз длиньї от таіск іеп и менее, совпадающих со строкой в начале
буфере. Но классический Ь277 никак не использует такую информацию и фак-
тически отводит каждой фразе одинаковьій обьем кодового пространства, счи-
тает их равновероятньїми. В 1991 г. Бендер (Вепбег) и Вулф (\¥о11) описали
прием, позволяющий до некоторой степени компенсировать данную "врож-
денную" избьпочность алгоритмов Ь2 со скользящим окном [2]. В зтом алго-
ритме (Ь2ВУ/) после нахождения фрази 5, имеющей самое длинное совпаде-
ние с буфером, производится поиск самой длинной совпадающей фрази 5° сре-
ди добавленньїх в словарь позже 5 и полностью находящихся в словаре (не
вторгающихся в область буфера). Длина 5 передаетея декодеру как разница
между длиной 5 и длиной 5”. Например, если 5= "абед" и 5’ = "аб", то длина 5
передаетея с помощью разностной длиньї 2.
Пример
Модифицируем Ь288 с помощью техники Бендера - Вулфа. Рассмотрим
процесе кодирования строки "колол кот ломом колесо" начиная с первого
появлення символа "м". В отличие от рассмотренного вьіше примера Ь288
словарное кодирование будем применять при длине совпадения 1 и более
(табл. 3.11).
110
ййр:/Лууууу.сотрге88Іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Таблица 3.11
Шаг Скользящее окно Совпа- дающая фраза Закодированньїе данньїе
Словарь Буфер г і і 3
к кололкотло МОМ-КОЛ - 0 - - "м"
НІ колол кот лом ом_коле ом 1 2 2 -
Н2 колол_кот_ломом -КОЛЄСО 1 6 1 -
к+3 колол_кот_ломом_ колесо кол 1 16 1 -
Н4 .. .л_кот_ломом_кол есо - 0 - - "є"
На шаге к мьі встретили символ "м", отсутствующий в словаре, позтому
передаєм его в явном виде. Сдвигаем окно на одну позицию.
На шаге НІ совпадающая фраза равна "ом", и в словаре нет никаких
других фраз, добавленньїх позже "ом". Позтому положим длину <5" равной
нулю, тогда передаваемая разностьу єсть 2. Сдвигаем окно на 2 символа.
На шаге А+2 совпадающая фраза состоит из одного символа послед-
ний раз встреченного 6 символов назад. Здесь, как и на шаге НІ, разностная
длина совпадающей фразьі равна ее длине, т. е. единице. Сдвигаем окно на
1 символ.
На шаге НЗ совпадающая фраза максимальной длиньї єсть "кол", но
среди фраз, добавленньїх в словарь после "кол", имеется фраза "ко", позто-
му длина "кол" кодируется как разница 3 и 2. Если би в части словаря, ог-
раниченной фразой "кол" слева и началом буфера справа, не нашлось бм
фразьі "ко" с длиной совпадения 2, а бшла бм обнаружена, например, только
фраза "к" с длиной совпадения 1, то длина "кол" бьіла бьі представлена как
3-1=2.
При декодировании необходимо подцерживать словарь в таком же виде,
что и при кодировании. После получения смещения таіск_роз декодер про-
изводит сравнение фрази, начинающейся с найденной позиции і-
(таїск_ро5-1) (/+1 - позиция начала буфера), со всеми более "новими" фра-
зами словаря, т. е. лежащими в области /-(таісЬ_ро8-1), ...,/. Длина фрази
восстанавливается как сумма максимального совпадения и полученной от
кодера разностной длиниу. Так, например, процедура декодирования для
шага Л+3 будет вмглядеть следующим образом. Декодер читает смещение
і = 16, разностную длинуу = 1 и начинает сравнивать фразу "колол_...", на-
чало которой определяется данним смещением і, со всеми фразами словаря,
начало которнх имеет смещение от 15 до 1. Максимальнеє совпадение име-
ет фраза "ко", расположенная по смещению 10. Позтому длина закодиро-
ванной фрази равна 2 +у = 2 + 1 = 3, т. е. кодер передай указатель на фразу
"кол".
111
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.пі/
Матодьі сжатия данньїх(7000+ файлов о сжатии)
Использование техники Бендера - Вулфа позволяет улучшить сжатие
для алгоритмов типа Ь2Н примерно на 1%. При зтом декодирование сильно
замедляется (в рази!), поскольку мьі вьінужденьї вьшолнять такой же до-
полнительньїй поиск для определения длиньї, что и при сжатии.
Алгоритм Файзлз - Грини
Еще один способ борьбьі с избьіточностью словаря Ь277 предложен
Файзлз (Гіаіа) и Грини (Сгеепе) [4]. В разработанном ими алгоритме Ь2Г6
для просмотра словаря используется дерево цифрового поиска, и любая
фраза кодируется не парой <длина, смещение>, а индексом узла, соответст-
вующего зтой фразе. Иначе говоря, всем одинаковьім фразам соответствует
один и тот же индекс. Устранение повторяющихся фраз из словаря позволя-
ет уменьшить среднюю длину кодов фраз. Обьічно козффициент сжатия
Ь2Е6 лучше козффициента сжатия Ь288 примерно на 10%.
КОНТЕКСТНО-ЗАВИСИМЬІЕ СЛОВАРИ
Обьем словаря и, соответственно, средняя длина закодированного ин-
декса могут бьггь уменьшеньї за счет использования приемов контекстного
моделирования. Било установлено, что применение контекстно-зависимьіх
словарей улучшает сжатие для алгоритмов семейства У.7Л1 и, в особен-
ности, семейства Ь278 [5]. Идея подхода состоит в следующем. Пусть мьі
только что закодировали последовательность символов 8 небольшой длиньї
Ь, тогда на текущем шаге в качестве словаря используются только строки,
встреченньїе в уже обработанной части потока непосредственно после
строк, равньїх 8. Зти строки образуют контекстно-зависиммй словарь по-
рядка £ для 8. Если в словаре порядка £ совпадение обнаружить не удалось,
то происходит уход к словарю порядка £-1. В конечном итоге если не бмло
найдено совпадающих фраз ни в одном из доступних словарей, то текущий
символ передается в явном виде.
Например, при использовании техники контекстно-зависимих словарей
порядка в сочетании с после обработки последовательности "абрака-
дабра" получаем следующий состав словарей порядков 2, 1 и 0 для текуще-
го контекста:
Порядок і Состав контекстно-зависимого словаря порядка £ (фразьі словаря могут начиняться только в лервой позиции указан- ньіх последовательностей)
2 (контекст "ра") кадабра
1 (контекст "а") бракадабра кадабра дабра бра
112
ййр:/Лул¥Л¥.сотрге88Іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
0 (пустой контекст) абракадабра бракадабра ракадабра акадабра кадабра адабра дабра абра бра ра а (обьічньїй словарь Ь277)
Зкспериментм показали, что наилучшие результати достигаются при £ =
=1 или 2, т. е. в качестве контекста достаточно использовать один или два
предмдущих символа. Применение контекстно-зависимнх словарей позво-
ляет улучшить сжатие Ь288 на 1-2%, Ь2Р0 - на 5%, Ь25¥ - примерно на
10%. Потери в скоросги в случае модификации Ь2Г6 сосгавляют порядка
20-30%. Соответствующие версии алгоритмов известнм как Б277-РМ,
Е2Г6-РМ, Ь2\У-РМ [5].
Недостатком техники является необходимость поддерживать достаточно
сложную структуру контекстно-зависимьіх словарей не только при кодиро-
вании, но и при декодировании.
Буферизация смещений
£сли била закодирована фраза со смещением і, то увеличивается веро-
ятность того, что вскоре нам может потребоваться закодировать фрази с
приблизительно таким же смещением і ± <5, где 6 - небольшое число. Зто
особенно часто проявляется при обработке двоичньїх данньїх (исполнимих
файлов, файлов ресурсов), поскольку для них характерно наличие сравни-
тельно длинних последовательностей, отличающихся лишь в нескольких
позициях.
Смещение обично представляется посредством двух (иногда более) по-
лей: бази (сегмента) и поля дополнительнмх битов, уточняющего значение
смещения относительно бази. Позтому в потоке закодированних даннмх,
порождаемом алгоритмами семейства Ь277, коди фраз с одним и тем же
значением бази смещения часто располагаются недалеко друг от друга. Зто
свойство можно использовать для улучшения сжатия, применив технику
буферизации баз смещений.
В буфере запоминается т последних использованньїх баз смещений,
различающихся между собой. Буфер обновляется по принципу списка ЬІШ,
т. е. самая последняя использованная база имеет индекс 0, самая "старая" -
113
Книга написана коллективом КНр:/Лу\у\у.сотрге‘і‘ііоп.і'и/
Методьі сжатия данньїх(7000+ файлов о сжатии)
индекс т-1. Если база В смещения текущей фразьі совпадает с одной из со-
держащихся в буфере баз то вместо В кодируется индекс і буфера. Затем
В, перемещается в начало списка ЬКІ), т. е. получает индекс 0, а все 2?о,
В]...Вм сдвигаются на одну позицию к концу списка. Иначе кодируется
собственно база В, после чего она добавляется в начало буфер как Во, а все
буферизованньїе бази смещаются на одну позицию к концу списка ЬК.11,
при зтом Вт.і удалйется из буфера. -,с
1 ііілї
Пример , .
Примем т равньїм двум. Если база не совпадает ни с одной содержащей-
ся в буфере, то кодируемое значение бази равно абсолютному значенню
плюс т. Пусть также содержимое буфера равно {0, 1}, тогда пошаговое
преобразование последовательности баз смещений 15, 14, 14, 2, 3, 2,... бу-
дет вьіглядеть следующим образом:
Номер шага Абсолютнеє значение бази Содержимое буфера в начале шага Кодируемое значение бази
Во в<
І 15 0 1 17
2 14 15 0 16
3 14 14 15 0
4 2 14 15 4
5 3 2 14 5
6 2 3 2 1
7 7 2 3 7
Обратите внимание на состояние буфера после шага 3. Оно не измени-
лось, поскольку все злементм буфера должнм бьіть различнм. Иначе ми
ухудшим сжатие из-за внесення избьіточности в описание баз смещений,
поскольку в зтом случае одна и та же база может задаваться несколькими
числами.
Как показмвают зкспериментм, оптимальнеє значение т лежит в преде-
лах4-8.
Стоимость кодирования индекса буфера обмчно ниже стоимости коди-
рования бази смещения непосредственно. Позтому имеет смисл принуди-
тельно увеличивать частоту использования буферизованньїх смещений за
ечет подбора фраз с "нужнмм" расположением в словаре.
Применение рассмотренной техники заметно улучшает сжатие двоичньїх
файлов - до нескольких процентов, но слабо влияет в случае обработки тек-
стов.
114
Щір:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Буферизация смещений используется практически во всех современньїх
архиваторах, реализующих алгоритми семейства Ь277, например: 7-2ір,
САВАКС, ХУіпКАК.
СОВМЕСТНОЕ КОДИРОВАНИЕ ДЛИН И СМЕЩЕНИЙ
Между величиной смещения и длиной совпадения имеется незначитель-
ная корреляция, величина которой возрастает в случае применения буфери-
зации смещений. Зто свойство можно использовать, обьединив в один ме-
тасимвол длину совпадения таЬсИ_1еп и базу смещения о££зег_Ьазе, и,
таким образом, кодировать метасимвол на оснований статистики совмест-
ного появлення определенньїх длиньї и смещения. Как и в случае смещения,
в метасимвол лучше включать не полностью длину, а ее квантованное зна-
чение.
Так, например, в формате Ь2Х (используется в компрессоре САВАКС)
длиньї совпадения от 2 до 8 входят в состав метасимвола непосредственно, а
все длиньї таГсИ_1еп > 8 отображаются в одно значение. В последнем слу-
чае длина совпадения доопределяется путем отдельной передачи величини
таЬсЬ_1еп — 9. Метасимвольї длина/смещение и литералм входят в один
алфавит, позтому в упрощенном виде алгоритм кодирования таков:
і£ (таїсЬ_1еп >= 2) {
// закодируем фразу
і£ ( та£сЬ_1еп <= 8 )
теїазутЬоІ = (о££зеС_Ьазе«3) і | (таСсЬ_1еп-2);
еізе
теЬазутЬо! = (о££зе£_Ьазе«3) | І 7;
/♦закодируем метасимвол, указав, что зто не литерал,
для правильного отображения значення метасимвола в
алфавит длин/смещений и литералов
*/
епсоде_зушЬо1 (тейазушЬоІ, МОН_ЬІТЕКАЬ);
і£ (гоа£сЬ_1еп > 8)
// доопределим длину совпадения
епсо<іе_1епдїН_£ооСег (таїсЬ_1еп - 9) ;
// закодируем младшие бити смещения
епсоде_о££зе£_£оо<іег (...);
)е1зе{
// закодируем литерал в текущей позиции £+1
епсос!е_зутЬо1 (міпсіои[ї+1 ] , ЬІТЕКАЬ)
Упражнение. Напишите упрощенньїй алгоритм декодирования.
115
Книга написана коллективом Шір:/Лууууу.сошрге88Іоп.ги/
Методи сжатия данньїх (7000+ файлов о сжатии)
Архиваторьі и компрессорьі, использующие
алгоритм ьі 12
Среди огромного количества Ь2-архиваторов отметим следующие:
3) 7-2ір, автор Игорь Павлов (Ряуіоу);
4) АСЕ, автор Маркел Лемке (Еешке);
5) АЮ, автор Роберт Джанг (Зип§);
6) АЮ2, автор Булат Зигацшин (2і§ап8Іііп);
7) САВАКС, корпорация Місгозоїї;
8) Ішр, фирма ТесЬпеІузішп Ріу Псі.;
9) ІАК, автор Роберт Джанг (Зшц»);
10)РК2ІР, фирма РКЛУАКЕ Іпс.;
11)КАК, автор Евгений Рошал (ЯозЬаІ);
12)\¥іп2ір, фирма ЬІісо Мак Сотри(іп§;
13)2ір, Іп£о-2ІР &гоир.
Зти архиваторьі являются или одними из самьіх зффективньїх в классе
применяющих методи Зива - Лемпела, или пользуются популярностью, или
оказали существенное влияние на развитие словарньїх алгоритмов, или ин-
тересньї с точки зрения нескольких указанньїх критериев. За исключением
7-2ір, словарние алгоритми всех указаннмх архиваторов можно рассматри-
вать как модификации Ь2Н. В алгоритме Ь2МА, реализованном в 7-2ір, со-
вместно со словарними заменами используется контекстнеє моделирование
и арифметическое кодирование.
В табл. 3.12 представленьї результати сравнения некоторьіх архиваторов
по степени сжатия файлов набора СаІ^СС.
Таблица 3.12
А Я) РК2ІР АСЕ КАК САВАКС 7-2ір
ВіЬ 3.08 3.16 3.38 3.39 3.45 3.62
Воокі 2.41 2.46 2.78 2.80 2.91 2.94
Воок2 2.90 2.95 3.36 3.39 3.51 3.59
Сео 1.48 1.49 1.56 1.53 1.70 1.89
Иешз 2.56 2.61 3.00 3.00 3.07 3.16
ОЬ]1 2.06 2.07 2.19 2.18 2.20 2.26
ОЬ)2 3.01 3.04 3.39 3.38 3.54 3.96
Рарегі 2.84 2.85 2.91 2.93 2.99 3.07
Рарег2 2.74 2.77 2.86 2.88 2.95 3.01
Ріс 9.30 9.76 10.53 10.39 10.67 11.76
Ргодс 2.93 2.94 3.00 3.01 3.04 3.15
116
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
РгодІ 4.35 4.42 4.49 4.55 4.62 4.76
Ргодр 4.32 4.37 4.55 4.57 4.62 4.73
Тгапз 4.65 4.79 5.19 5.23 5.30 5.56
Итого 3.47 3.55 3.80 3.80 3.90 4.10
Использованньїе версии архиваторов: АКІ 2.50а, РК2ІР 2.04§, 5¥іпКАК
2.71, АСЕ 2.04, 7-2ір 2.30 Ьеіа 7. Во всех случаях применялся тот алгоритм
Ь2, которьій обеспечивал наилучшее сзйітие. Заметим, чТо 7-2ір использует
специальньїе методи препроцессинга нетекстових данньїх, "отключить" ко-
торьіе не удалось, что до некоторой степени исказило картину. Тем не менее
преимущество зтого архиватора на данном тестовом наборе несомненно.
В случае УУіпКАК и АСЕ режим мультимедийной компрессии намеренно не
включался.
При сравнении програми 7-Хір версии 2.3 и КАК версии 3 с другими Ь2-
архиваторами необходимо следить, чтобн 7-2ір и КАК использовали алгоритм
типа 1,2, поскольку они имеют в своем арсенале алгоритм РРМП, обеспечиваю-
щии високую степень сжатия текстов.
При сравнении следует учитьівать, что скорость сжатия АКІ и РК2ІР
бьіла примерно в 4.5 раза вьіше, чем у КАК и АСЕ, которьіе, в свою очередь,
бьіли бистреє САВАКС и 7-2ір приблизительно на 30%. Размер словаря
в АКЗ и РК2ІР в десятки раз меньше, чем в остальних программах.
Вопросьі для самоконтроля1
1. Какие свойства данньїх определяют принципиальную возможность их
сжатия с помощью Ь2-методов?
2. В чем основная разница между алгоритмами семейства Ь277 и семейст-
ва Ь278?
3. Какие особенности строения словаря Ь277 позволяют создавать для од-
ного и того же входного файла несколько различних архивнмх, которие
затем можно разжать без потерь информации с помощью одного и того
же декодера Ь277? Возможно ли зто в случае алгоритма Ь278?
4. Почему в алгоритмах семейства 1.277 короткие строки часто вмгоднее
сжимать не с помощью словарной замени, а через кодирование как по-
следовательности литералов? Каким образом зто связано с величиной
смещения фрази, совпадающей со строкой?
5. Приведите пример блока данньїх, которие в общем случае вьігоднее
сжимать алгоритмом семейства Ь277, нежели семейства Ь278, а также
1 Ответьі на вопросьі, вьіполненньїе упражнения и исходньїе тексти программ
вьі можете найти на Нир.7/сотргеззіоп.§гарНісоп.ги/.
117
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.пі/
(7000+ файлов о сжатии)
Методи сжатия данних
обратньїй пример. На основаним каких критериев можно сделать пред-
варительньїй вьібор мсжду алгоритмами семейства Ь277 или семейства
Ь278, если задаваться только целью максимизации степени сжатия?
6. Почему дистрибутиви программного обеспечения целесообразно архи-
вировать с помощью алгоритмов семейства Ь277?
7. В каких случаях имеет смисл использовать методи кодирования цельїх
чисел - кодьі Злиаса, Голомба й'т. п. - для сжатия потоков смещений и
длин совпадения?
8. Применим ли алгоритм "почти оптимального" разбора для методов
Ь277, рассмотреннмй в подразд. "Пути улучшения сжатия для методов
Ь2", для обработки потоков? Можно ли однозначно сказать, что любая
стратсгия получения оптимального разбора требует поблочной обработ-
ки данньїх?
9. Почему примснение контекстно-зависимих словарей улучшает степень
сжатия для алгоритмов семейства Ь278 значительно больше, чем для ал-
горитмов семейства Ь277?
ЛИТЕРАТУРА
1. Кадач А. В. Зффективньїе алгоритми неискажающего сжатия текстовой
информации. - Дис. к. ф.-м. н. - Ин-т систем информатики им. А. П. Ер-
шова. М., 1997.
2. Вепдег Р. Е., ХУоІГ І. К. Ие\у авутріоііс Ьоипсів апд ітргоуетепів оп іЬе
Ьетре1-2іу сіаіа сотргеввіоп а1§огііЬт // ІЕЕЕ Тгапвасііопв оп ІпГоплаПоп
ТЬеогу. Мау 1991. Уоі. 37(3). Р. 721-727.
3. ВеиївсЬ Ь. Р. (1996) ВЕЕЬАТЕ Сотргеввеб Ваіа РогшаІ ЗресіГісаІіоп у.і .3
(КРС1951) йІф://восЬі.пеСги/~гпахіте/сіос/гГс 1951 ,рв.§г.
4. Ріаіа Е. В., Сгеепе В. Н. Ваіа сотргеввіоп хуііЬ Гтііе \уіп6о\ув. Соттип //
АСМ. Арг. 1989. Уоі. 32(4). Р. 490-505.
5. Ноап§ В. Т., Ьоп§ Р. М., УіПег 3.8. Миіііріе-бісііопагу сотргеввіоп ивіп£
рапіаі та(сйіп£ // Ргосеебіп^в оГ Ваіа Сотргеввіоп СопГегепсе. МагсЬ
1995. Р. 272-281, ЗпоууЬігсі, ВіаЬ.
6. Ьап^сіоп С. С. А поіе оп (Ье 2іу-Ьетре1 тосіеі Гог сотргеввіп^ іпбіуібиаі
вециепсев // ІЕЕЕ Тгапвасііопв оп Іпґогтаііоп ТЬеогу. МагсЬ 1983. Уоі.
29(2). Р. 284-287.
7. Ьагввоп І., МоґГаї А. ОГПіпе дісііопагу-Ьавед сотргеввіоп // Ргосеедіп^в
ІЕЕЕ. №у. 2000. Уоі. 88(11). Р. 1722-1732.
8. Маііав У., Ка]роо( N.. 8аЬіпа1р 8.С. Ітріетепіаііоп апб ехрегітепіаі
еуаіиаііоп оГ ПехіЬІе рагвіп§ Гог бупатіс бісйопагу Ьавеб сіаіа сотргеввіоп
//Ргосеесііп§8 5¥АЕ'98. 1998.
118
Шір:/Лулулу.сошрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методи сжатия без потерь
9. Кіззапеп З.)., Ьап§сіоп О.О. Ьіпіуегзаі тоде1іп§ апсі сосііп£ // ІЕЕЕ
Тгапзасііопз оп ІпЕогшаІіоп ТЬеогу. .Іап. 1981. Уоі. 27(1). Р. 12-23.
10. 8іогег 1. А., Зхушапзкі Т. О. Ваіа сотргеззіоп уіа іехйіаі зиЬзіійіііоп //
іоитаї оЕАСМ. Ос). 1982. Уоі. 29(4). Р. 928-951.
11. ХУеІсЬ Т. А. А ІесЬпіцие Еог Ьі§Ь-регЕогтапсе даіа сотргеззіоп І І ІЕЕЕ
Сотриіег. Іипе 1984. Уоі. 17(6). Р. 8-19.
12, 2іу І., Ьетреї А. А ипіуегзаі а1§огйЬт,(ог зециепгіаі даіа сотргеззіоп І І ІЕЕЕ
Тгапзасііопз оп ІпЕогтагіоп ТЬеогу. Мау 1977. Уоі. 23(3). Р. 337- 343.
13. 2ІУ І. апсі Ьетреї А. Сотргеззіоп оЕ ііиііуі<іиа1 зециепсез Уіа уагіаЬІе-гаїе
сосііп§ // ІЕЕЕ Тгапзасііопз оп ІпЕогтаііоп ТЬеогу. 8ері. 1978. Уоі. 24(5).
Р. 530-536.
Список архиваторов и компрессоров
1. ІпЕо-2ІР §гоир. ІпЕо-2ІР'з рогіаЬІе 2ір - С зоигсез. ЬИр:/Лу\у\¥.іпЕогір.ог§
2. Іип§ К. АКЗ агсЬіуег. ЬКр:/Лу\у\у.аіізо£Ьуаге.сот
3. Іип§ К. ІАК агсЬіуег. Йр://йр.е1Е.зіиЬа.зк/риЬ/рс/раск/)аг102х.ехе
4. Ьетке М. АСЕ агсЬіуег. Ьйр:/Лууу\у.ууіпасе.сот
5. Місгоіоб СаЬіпеї Мапа§ег 2001 Еог \Уіп9х/МТ - Сотргеззіоп Іооі Еог .саЬ
Гііез. йр://йр.е1Е.зіиЬа.зк/риЬ/рс/раск/саЬ2001 .гір
6. Місгозой Согрогаііоп. СаЬіпеї 8ой\уаге Веуеіортепі Тооі. Ьйр://тздп.
тісгозой.сот/ІіЬгагу/еп-из/сіпзатрІез/саЬ-зйк.ехе
7. №со Мак СотриІіп§. \Уіп2ір агсЬіуег. Ьйрі/Лухуху.хуіпгір.сот
8. Рауіоу І. 7-2ір агсЬіуег. Ьйр:/Лу\у\¥.7-гір.ог£
9. РКАУАКЕ Іпс. РК2ІР агсЬіуег. йр://йр.е1Е.зІиЬа.зк/риЬ/рс/раск /рк250(ІО8.ехе
10. КозЬаІ Е. КАК Еог УТпсіоууз. Ьйр:/Лу\у\¥.гагзой.сот
11. ТесЬпеїузіит Ріу ЬМ. ІМР агсЬіуег. Йр.7/Йр.е1Е.зіиЬа.зк/риЬ/рс/раск
/ітр112.ехе
12.2і§апзЬіп В. АКІ2 агсЬіуег. йр://йр.е1Е.8ЬіЬа.зк/риЬ/рс/раск/аіігО15.гір
Глава 4. Методьі контекстного
моделмрования
Применение методов контекстного моделирования для сжатия данньїх
опирается на парадигму сжатия с помощью универсального моделирования
и кодирования (шііуегзаі тосіеіііпе аші сосііпб), предложенную Риссаненом
(Кіззапеп) и Лзнгдоном (Ьапдсіоп) в 1981 г. [12]. В соответствии с данной
идеей процесе сжатия состоит из двух самостоятельньїх частей:
моделирования;
кодирования.
119
Книга написана коллективом Шір:/Лууууу.сошрге88Іоп.ги/
Методи сжатия данних (7000+ файлов о сжатии)
Под моделированием понимается построение модели информационного
источника, породившего сжимаемьіе данньїе, а под кодированием - отобра-
жение обрабатьіваемьіх данньїх в сжатую форму представлення на основа-
ний результатов моделирования (рис. 4.1). "Кодировщик" создает виход-
ной поток, являющийся компактаой формой представлення обрабатьіваемой
последовательности, на оснований информации, поставляемой ему "моде-
лировщиком".
Рис. 4.1. Схема процесса сжатия данньїх в соответствии с концепцией
универсального моделирования и кодирования
Следует заметать, что понятие "кодирование" часто используют в широ-
ком смисле для обозначения всего процесса сжатия, т. е. включая модели-
рование в данном нами определении. Таким образом, необходимо различать
понятие кодирования в широком смисле (весь процесе) и в узком (генера-
ция потока кодов на оснований информации модели). Понятие "статистиче-
ское кодирование" также используется, зачастую с сомнительной коррект-
ностью, для обозначения того или иного уровня кодирования. Во избежание
путаницьі ряд авторов применяет термин "знтропийное кодирование" для
кодирования в узком смисле. Зто наименование далеко от совершенства и
встречает вполне обоснованную критику. Далее в зтой главе процесе коди-
рования в широком смисле будем именовать "кодированием", а в узком
смисле - "статистическим кодированием" или "собственно кодированием".
Из теореми Шеннона о кодировании источника [13] известно, что сим-
вол лІг вероятность появлення которого равняетея />($,), внгоднее всего пред-
ставлять -1о£2 р(хі) битами, при зтом ередняя длина кодов может бить ви-
числена по приводившейся ранее формуле (1.1 и 1.2). Практачески всегда
истанная структура источника скрьіта, позтому необходимо строить модель
источника, которая позволила бьі нам в каждой позиции входной последо-
120
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методи сжатия без потерь
вательности найти оценку <?(.?,) вероятности появлення каждого символа 5,
алфавита входной последовательности.
Оценка вероятностей символов при моделировании производится на ос-
нований известной статистики и, возможно, априорньїх предположений, по-
зтому часто говорят о задаче статистического моделирования. Можно ска-
зать, что моделировщик предсказьівает вероятность появлення каждого
символа в каждой позиции входной строки, отсюда еще одно наименование
зтого компонента - "предсказатель" или "предиктор" (от ргеіісіог). На зтапе
статистического кодирования вьіполняется замещение символа х, с оценкой
вероятности появлення ^(і/) КОДОМ ДЛИНОЙ -ІО§2 9(5,) бит.
Рассмотрим пример. Предположим, что мьі сжимаем последовательность
символов алфавита {"0",'Т*}, порожденную источником без памяти, и веро-
ятности генерации символов следующие: р("0") = 0.4, р("1") = 0.6. Пусть
наша модель дает такие оценки вероятностей: <7("0") = 0.35, ^("1") = 0.65.
Знтропия Н источника равна
-/>С0’)1о82р(’0’)-р(’1<)1о82р(’1’) =
= -0.41о§2 0.4 - 0.61о§2 0.6 » 0.971 бита.
Если подходить формально, то "знтропия" модели получается равной
-?('0')1О82 9(,0,)-9СГ)іо82 9С1’) =
= -0.351о8г 0.35 - 0.651о8а 0.65 » 0.934 бита.
Казалось бм, что модель обеспечивает лучшее сжатие, чем зто позволяет
формула Шеннона. Но истиннме вероятности появлення символов не изме-
нились! Если исходить из вероятностей р, то "0" следует кодировать -
1о§20.4 я 1.322 бита, а для "1" нужно отводить -1о820.6 я 0.737 бита. Для
оценок вероятностей ц ми имеем -1о§20.35 ~ 1.515 бита и -1о§20.65 « 0.621
бита соответственно. При каждом кодировании на оснований информации
модели в случае "0" мм будем терять 1.515 - 1.322 = 0.193 бита, а в случае
"1" вмигрьівать 0.737 - 0.621 =0.116 бита. С учетом вероятностей появле-
ння символов средний проигрьіш при каждом кодировании составит
0.4 0.193 - 0.6 0.116 = 0.008 бита.
Вьівод. Чем точнеє оценка вероятностей появлення символов, тем
больше коди соответствуют оптимальним, тем лучше сжатие.
Правильносте декодирования обеспечивается использованием точно та-
кой же модели, которая бьіла применена при кодировании. Следовательно,
при моделировании для сжатия данньїх нельзя пользоваться информацией,
которая неизвестна декодеру.
121
Книга написана коллективом К((р:/Лу\у\у.сотрге‘і‘ііоп.і'и/
Методьі сжатия данньїх (7000+ файлов о сжатии)
Осознание двойственной природи процесса сжатия позволяет осуществ-
лять декомпозицию задач компрессии данньїх со сложной структурой и не-
тривиальнмми взаимозависимостями, обеспечивать определенную само-
стоятельность процедур, решающих частньїе проблеми, сосредоточивать
больше внимания на деталях реализации конкретного злемента.
Задача статистического кодирования била в целом успешно решена к
началу 80-х г. Арифметический кодер позволяет сгенерировать сжатую по-
следовательность, длина которой обично всего лишь на десятме доли про-
цента превмшает теоретическую длину, рассчитанную с помощью формули
(1.1). Более того, применение современной модификации арифметического
кодера - интервального кодера - позволяет осуществлять собственно коди-
рование очень бистро. Скорость статистического кодирования составляет
миллионьї символов в секунду на современних ПК.
В свете вишесказанного повишение точности моделей является факти-
чески единственнмм способом существенного улучшения сжатия.
Классификация стратегии моделирования
Перед рассмотрением контекстних методов моделирования следует сказать
о классификации стратегий моделирования источника данньїх по способу по-
строения и обновлення модели. Виделяют 4 варианта моделирования:
статическое;
полуадаптивное;
адаптивнеє (динамическое);
блочно-адаптивное.
При статическом моделировании для любих обрабатнваемих данних*
используется одна и та же модель. Иначе говоря, не производитея адаптация ;
модели к особенностям сжимаемьіх данних. Описание заранее построенной,
модели хранитея в структурах данних кодера и декодера; таким образом;
достигается однозначность кодирования, с одной сторони, и отсутствие не-і
обходимости в явной передаче модели, с другой. Недостаток подхода также;
очевиден: ми можем получать плохое сжатие и даже увеличивать размер;
представлення, если обрабатмваемие данние не соответствуют вьібранной;
модели. Позтому такая стратегия используется только в специализирован-і
них приложениях, когда тип ежимаемих данньїх неизменен и заранее из->
вестен. ;
Полуадаптивное сжатие является развитием стратегии статического мо-!
делирования. В зтом случае для сжатия заданной последовательности виби*^
раетея или строится модель на оснований анализа именно обрабатнваемих;
данньїх. Понятно, что кодер должен передавать декодеру не только зако-
122
1ійр:/Лууууу.сотрге88Іоп.іті/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
дированньїе данньїе, но и описание использованной модели. Если модель
вьібирается из заранее созданньїх и известньїх как кодеру, так и декодеру,
то зто просто порядковий номер модели. Иначе если модель бьіла нас-
троєна или построена при кодировании, то необходимо передавать либо
значення параметров настройки, либо модель полностью. В общем случае
полуадаптивньїй подход дает лучшее сжатие, чем статический, так как обес-
печивает приспособление к природе обрабатьіваемьіх данньїх, уменьшая ве-
роятность значительной разницьі между предсказаниями модели и реаль-
ним поведением потока данньїх.
Адаптивное моделирование является естественной противоположностью
статической стратегии. По мере кодирования модель изменяется по задан-
ному алгоритму после сжатия каждого символа. Однозначності, декодиро-
вания достигается тем, что, во-первьіх, изначально кодер и декодер имеют
идентичную и обьічно очень простую модель и, во-втормх, модификация
модели при сжатии и разжатии осуществляется одинаковьім образом. Опит
использования моделей различннх типов показьівает, что адаптивное моде-
лирование является не только злегантной техникой, но и обеспечивает по
крайней мере не худшее сжатие, чем полуадаптивное моделирование. По-
нятий, что если стоит задача создания "универсального" компрессора для
сжатия даннмх несходних типов, то адаптивний подход является естествен-
ним вибором разработчика.
Блочно-адаптивное моделирование можно рассматривать как частнмй
случай адаптивной стратегии (или наоборот, что сути дела не меняет). В за-
висимости от конкретного алгоритма обновлення модели, оценки вероят-
ностей символов, метода статистического кодирования и самих данньїх из-
менение модели после обработки каждого символа может бить сопряжено
со следующими неприятностями:
лотерей устойчивости (робастности) оценок, если данние "зашумленм",
или имеются значительнме локальнме изменения статистических взаи-
мосвязей между символами обрабатмваемого потока; иначе говоря, че-
ресчур бистрая, "агрессивная" адаптация модели может приводить к
ухудшению точности оценок;
большими вмчислительньїми расходами на обновление модели (как при-
мер - в случае адаптивного кодирования по алгоритму Хаффмана);
большими расходами памяти для хранения структур данньїх, обеспечи-
вающих биструю модификацию модели.
Позтому обновление модели может вьшолняться после обработки цело-
го блока символов, в общем случае переменной длиньї. Для обеспечения
правильности разжатия декодер должен виполнять такую же последова-
тельность действий по обновленню модели, что и кодер, либо кодеру необ-
123
Книга написана коллективом Кйр:/Лу\у\у.сотрге‘і‘ііоп.і'и/
Методі» сжатия данньїх (7000+ файлов о сжатии)
ходимо передавать вместе со сжатими данньїми инструкции по модифика-
ции модели. Последний вариант достаточно часто используется при блочно-
адаптивном моделировании для ускорения процесса декодирования в ущерб
козффициенту сжатия.
Понятно, что приведенная классификация является до некоторой степе-
ни абстрактной, и на практике часто используют гибридньїе схеми.
Контекстное моделирование
Итак, нам необходимо решить задачу оценки вероятностей появлення
символов в каждой позиции обрабатьіваемой последовательности. Для того
чтобьі разжатие произошло без потерь, ми можем пользоваться только той
информацией, которая в полной мере известна как кодеру, так и декодеру.
Обьічно зто означает, что оценка вероятности очередного символа должна
зависеть только от свойств уже обработанного блока данньїх.
Пожалуй, наиболее простой способ оценки реализуется с помощью по-
луадаптивного моделирования и заключается в предварительном подсчете
безусловной частоти появлення символов в сжимаемом блоке. Полученное
распределение вероятностей используется для статистического кодирования
всех символов блока. Если, например, такую модель применить для сжатия
текста на русском язьікс, то в среднем на кодирование каждого символа бу-
дет потрачено примерно 4.5 бита. Зто значение является средней длиной
кодов для модели, базирующейся на использовании безусловного
распределения вероятностей букв в тексте. Заметим, что уже в зтом простом
случае достигается степень сжатия 1.5 по отношению к тривиальному
кодированию, когда всем символам назначаются коди одинаковой длиньї.
Действительно, размер алфавита русского текста превьішает 64 знака, но
меньше 128 знаков (строчньїе и заглавньїе букви, знаки препинания,
пробел), что требует 7-битовьіх кодов.
Анализ распространенньїх типов данньїх, - например, тех же текстов на
естественних язиках, - вьіявляет сильную зависимость вероятности появ-
лення символов от непосредственно им предшествующих. Иначе говоря,
большая часть данньїх, с которьіми мьі сталкиваемся, порождается источни-
ками с памятью. Допустим, нам известно, что сжимаемьій блок является
текстом на русском язьіке. Если, например, строка из трех только что обра-
ботанньїх символов равна "_цьі" (подчеркиванием здесь и далее обозначает-
ся пробел), то текущий символ скореє всего входит в следующую группу:
"г" ("цьіган"), "к" ("цикать"), "п" ("цмпочки"), "ц" ("цьщ"). Или, в случае
анализа сразу нескольких слов, если предьідущая строка равна "Вста-
вай,_проклятьем_заклейменньій,", то продолжением явно будет "весь_мир_".
Следовательно, учет зависимости частоти появлення символа (в общем
124
КНрі/Луууху.сотрге^іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методи сжатия без потерь
случае - блока символов) от предьідущих должен давать более точньїе
оценки и в конечном счете лучшее сжатие. Действительно, в случае посим-
вольного кодирования при использовании информации об одном непосред-
ственно предшествующем символе достигается средняя длина кодов в 3.6
бита для русских текстов, при учете двух последних - уже порядка 3.2 бита.
В первом случае моделируются условньїе распределения вероятностей сим-
волов, зависящие от значення строки из одного непосредственно предшест-
вующего символа, во втором - зависящие от строки из двух предшествую-
щих символов.
Любопьітно, что модели, оперирующие безусловньїми частотами и часто-
тами в зависимости от одного предшествующего символа, дают примерно оди-
наковие результати для всех европейских язиков (за исключением, бить мо-
жет, самих зкзотических) -4.5 и 3.6 бита соответственно.
Улучшение сжатия при учете предьідущих злементов (пикселов, сзмп-
лов, отсчетов, чисел) отмечается и при обработке данньїх других распро-
страненннх типов: обьекгньїх файлов, изображений, аудиозаписей, таблиц
чисел.
Терминология
Под контекстним моделированием будем понимать оценку вероятности
появлення символа (злемента, пиксела, сзмпла, отсчета и даже набора каче-
ственно разнмх обьектов) в зависимости от непосредственно ему предшест-
вующих, или контекста.
Заметим, что в биту понятие "контекст" обично используется в глобаль-
ном значений - как совокупность символов (злементов), окружающих те-
кущий обрабатнваемнй. Зто контекст в широком смисле. Внделяют также
"левосторонние" и "правосторонние" контексти, т. е. последовательности
символов, непосредственно примнкающих к текущему символу слева и
справа соответственно. Здесь и далее под контекстом будем понимать
именно классический левосторонний: так, например, для последнего симво-
ла "о" последовательности "...молоко..." контекстомявляется "...молок".
Если длина контекста ограничена, то такой подход будем називать кон-
текстньїм моделированием ограниченного порядка (Ппііе-сопіехі то<іе1іп§),
при зтом под порядком понимается максимальная длина используемнх кон-
текстов N. Например, при моделировании порядка 3 для последнего симво-
ла "о" в последовательности "...молоко..." контекстом максимальной длиньї
З является строка "лок". При сжатии зтого символа под "текущими контек-
стами" могут пониматься "лок", "ок", "к", а также пустая строка Все зти
контексти длини от N до 0 назовем активними контекстами в том смисле,
125
Книга написана коллективом 1Шр:/Лууууу.сотрге88Іоп.пі/
Методьі сжатия данньїх (7000+ файлов о сжатии)
что при оценке символа может бьіть использована накопленная для них ста
тистика.
Далее вместо "контекст длиньї о, о < V мм будем обмчно говоритг
"контекст порядки о".
В силу обьективнмх причин - ограниченности вьічислительньїх ресут-
сов - техника контекстного моделирования именно ограниченного порядки
полупила наибольшее развитие и распространение, позтому далее под коь
текстньїм моделированием будем подимать именно ее. Дальнейшее изложс-
ниє также учитьівает специфику того, что контекстнеє моделирование праі-
тически всегда применяется как адаптивное.
Оценки вероятностей при конгекстном моделировании строятся на о<
новании обьічньїх счетчиков частот, связанньїх с текущим контекстом. Еслі
мьі обработали строку "абсабвбабс",то для контекста "аб" счетчик символь
"с" равен двум (говорят, что символ "с" появился в контексте "аб" 2 раза),
символа "в" - единице. На основаним зтой статистики можно утверждать,
что вероятность появлення "с" после "аб" равна 2/3, а вероятность появле-
ння "в" - 1/3, т. е. оценки формируются на основе уже просмотренной части
потока.
В общем случае для каждого контекста конечной длиньї о <14, встречае-
мого в обрабатьіваемой последовательности, создается контекстная модель
(КМ). Любая КМ включает в себя счетчики всех символов, встреченньїх в
соответствующем ей контексте, т. е. сразу после строки контекста. После
каждого появлення какого-то символа з в рассматриваемом контексте про-
изводится увеличение значення счетчика символа з в соответствующей кон-
тексту КМ. Обьічно счетчики инициализируются нулями. На практике счет-
чики обьічно создаются по мере появлення в заданном контексте нових
символов, т. е. счетчиков, ни разу не виденньк в заданном контексте симво-
лов, просто не существует.
Под порядком КМ будем понимать длину соответсгаующего ей контек-
ста. Если порядок КМ равен о, то будем обозначать такую КМ как "КМ(о)".
Кроме обьічньїх КМ, часто используют контекстную модель минус 1-го
порядка КМ(-1), присваивающую одинаковую вероятность всем символам
алфавита сжимаемого потока.
Понятно, что для 0-го и минус 1-го порядка контекстная модель одна, а
КМ большего порядка может бьпь несколько, вплогь до с^, где д - размер
алфавита обрабатьіваемой последовательности. КМ(0) и КМ(-1) всегда ак-
тивньї.
Заметам, что часто не делается различий между понятиями "контекст" и
"контекстная модель". Автори зтой книги такое соглашение не поддержи-
вают.
126
1Шр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1, Методьі сжатия без потерь
Часто говорят о "родительских" и "дочерних" контекстах. Для контекста
"к" дочерними являются "ок" и "лк", поскольку они образованьї сцеплением
(конкатенацией) одного символа и контекста "к". Аналогично для контекста
"лок" родительским является контекст "ок", а контекстами-предками - "ок",
"к", Очевидно, что "пустой" контекст "" является предком для всех. Ана-
логичньїе терминьї применяются для КМ, соответствующих контекстам.
Совокупность КМ образует модель источника данньїх. Под порядком
модели понимается максимальний порядок используеммх КМ.
Видьі КОНТЕКСТНОГО МОДЕЛИРОВАНИЯ
ІІример обработки строки "абсабвбабс" иллюстрирует сразу две пробле-
ми контекстного моделирования:
как вибирать подходящий контекст (или контексти) среди активних
с целью получения более точной оценки, ведь текущий символ может
лучше предсказиваться не контекстом 2-го порадка "аб", а контекстом
1-го порядка "б";
как оценивать вероятность символов, имеющих нулевую частоту (на-
пример, "г").
Више били приведень! цифри, в соответствии с которими при увеличе-
нии длини используемого контекста сжатие данних улучшается. К сожале-
нию, при кодировании блоков типичной длини - одного или нескольких
мегабайтов и меньше - зто справедливо только для небольших порядков
модели, так как статистика для длинних контекстов медленно накапливает-
ся. При зтом также следует учитивать, что большинство реальних данних
характеризуется неоднородностью, нестабильностью сили и вида статисти-
ческих взаимосвязей, позтому "старая" статистика контекстно-зависимих
частот появлення символов малополезна или даже вредна. Позтому модели,
строящие оценку только на оснований информации КМ максимального по-
рядка У, обеспечивают сравнительно низкую точность предсказания. Кроме
того, хранение модели большого порядка требует много памяти.
Если в модели используются для оценки только КМ(А), то иногда такой
подход називают "чистим" (риге) контекстним моделированием порядка N.
Из-за вишеуказанного недостатка "чистие" модели представляют обмчно
только научнмй интерес.
Действительно, реально используемме файли обмчно имеют сравни-
тельно небольшой размер, позтому для улучшения их сжатия необходимо
учитивать оценки вероятностей, получаемне на оснований статистики кон-
текстов разнмх длин. Техника обьединения оценок вероятностей, соответ-
ствующих отдельннм активним контекстам, в одну оценку назьівается
127
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.пі/
Методь, сжатия даниьнг(7000+файлов о сжатии)
смешиванием (Ь1еп<ііп§). Известно несколько способов виповнення смеши-
вания.
Рассмотрим модель произвольного порядка N. Если 0(5,|о) єсть вероят-
ность, присваиваемая в активной КМ(о) символу 5,- алфавита сжимаемого
потока, то смешанная вероятность д(ї,) вмчисляется в общем случае как
N
=Е і °) >
о^-І
где и'(о) - вес оценки КМ(о).
Оценка 0(5,|о) обьічно определяется через частоту символа 5,- по триви-
альной формуле
0(^|о)= -
/(о)
где/(5,|о) - частота появлення символа 5, в соответствующем контексте по-
рядка о; До) - общая частота появлення соответствующего контекста поряд-
ка о в обработанной последовательности.
Заметим, что правильнеє бьіло бм писать не, скажем, Д5,| о), а Д5,| С^),
т. е. "частота появлення символа 5, в КМ порядка о с номером /(о)", по-
скольку контекстних моделей порядка о может бить огромное количество.
Но при сжатии каждого текущего символа мм рассматриваем только одну
КМ для каждого порядка, так как контекст определяется непосредственно
примьїкающей слева к символу строкой определенной длиньї. Иначе говоря,
для каждого символа мьі имеем набор из Х+1 активних контекстов длини
от N до 0, каждому из котормх однозначно соответствует только одна КМ,
если она вообще єсть. Позтому здесь и далее используется сокращенная за-
пись.
Если вес 1) > 0, то зто гарантирует успешность кодирования любого
символа входного потока, так как наличие КМ(-1) позволяет всегда долучать
ненулевую оценку вероятности и, соответственно, код конечной длини.
Различают модели с полним смешиванием (йіПу Ьіепбеф, когда предска-
зание определяется статистикой КМ всех используемих порядков, и с час-
тинним смешиванием (рагііаііу Ьіепбед) - в противном случае.
Пример 1
Рассмотрим процесе оценки отмеченного на рисунке стрелкой символа
"л", встретившегося в блоке "молочное молоко". Считаем, что модель рабо-
тает на уровне символов.
128
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
м о л 0 ч н о е м 0 л о к о
І
Пусть мьі используем контекстнеє моделирование порядка 2 и делаем
полное смешивание оценок распределений вероятностей в КМ 2-го, 1-го и
0-го порядка с весами 0.6, 0.3 и 0.1. Считаем, что в начале кодирования в
КМ(0) еоздаютея ечетчики для всех символов алфавита {"м", "о", "л", "ч",
"н", "е","к"} и инициализируютея единицей; ечетчик символа после его
обработки увеличиваетея на единицу.
Для текущего символа "л" имеютея контекстьі "мо", "о" и пустой (0-го
порядка). К данному моменту для них накоплена статистика, показанная в
табл. 4.1.
Таблица 4.1
Символьї нм" "о" ил" V "н" "е" "к"
КМ порядка 0 (контекст ІНІ) Частоти 3 5 2 2 2 2 2 1
Накоплен- ньіе частоти 3 8 10 12 14 16 18 19
КМ порядка 1 (контекст "о") Частоти - - 1 1 1 - -
Накоплен- ньіе частоти - - 1 2 - 3 - -
КМ порядка 2 ("мо") Частоти - - 1 - • - - -
Накоплен- ньіе частоти - - 1 - - - - -
Тогда оценка вероятности для символа "л" будет равна
2 1 1
дСл^О.І — + 0.3- —+ 0.6 —= 0,71.
19 З 1
В общем случае для однозначного кодирования символа "л" такую оцен-
ку необходимо проделать для всех символов алфавита. Действительно, с
одной сторони, декодер не знает, чему равен текущий символ, с другой сто-
рони, оценка вероятности не гарантирует уникальности кода, а лишь задает
его длину. Позтому статистическое кодирование вьіполняетея на оснований
накопленной частота (см. подробности в примере 2 и в подразд. "Арифме-
тическое сжатие" гл. 1). Например, если кодировать на оснований статисти-
ки только 0-го порядка, то существует взаимно-однозначное соответствие
между накопленньїми частотами из диапазона (8,10] и символом "л", что не
имеет места в случае просто частоти (частоту 2 имеют еще 4 символа). По-
129
Книга написана коллективом К((р:/Лу\у\у.сотрге‘і‘ііоп.і'и/
Методи сжатия данньїх (7000+ файлов о сжатии)
нятно, что.аналогичньїе свойства остаются в силе и в случае оценок, полу-
чаемьіх частичньїм смешиванием.
Упражнение. Предложите способьі увеличения средней скорости вьічисления
оценок для методов контекстного моделирования со смешиванием, как пол-
ньім, так и частичньїм.
Очевидно, что успех применения смешивания зависит от способа вьібора
весов и^о). Простой путь состоит в использовании заданного набора фиксиро-
ванньїх весов КМ разньїх порядков при каждой оценке; зтот способ бьіл при-
менен в примере 2. Естественно, альтернативой является адаптация весов по
мере кодирования. Приспособление может заключаться в придании все боль-
шей значимости КМ все больших порядков или, скажем, попитає вибрать наи-
лучшие веса на оснований определенньїх статистических характеристик по-
следнего обработанного блока данньїх. Но так исторически спожилось, что ре-
альнеє развитие получили метода неявного взвешивания. Зто обьясняется в
первую очередь их меньшей вьічислительной сложностью.
Техника неявного взвешивания связана с введением вспомогательного сим-
вола ухода (езсаре). Символ ухода является квазисимволом и не должен при-
надлежать к алфавиту ежимаемой последовательности. Фактически он исполь-
зуетея для передачи декодеру указаний кодера. Идея заключаетея в том, что ес-
ли используемая КМ не позволяет оценить текущий символ (его ечетчик равен
нулю в зтой КМ), то на вьіход посьілается закодированнмй символ ухода и
производится попьггка оценить текущий символ в другой КМ, которой соответ-
ствует контекст иной длиньї. Обачно попьггка оценки начинаетея с КМ наи-
большего порадка И, затем в определенной последовательности осуществляет-
ся переход к контекстним моделям меньших порядков.
Естественно, статистическое кодирование символа ухода вьшолняетея на
оснований его вероятности, так назьіваемой вероятности ухода. Очевидно,
что символи ухода порождаютея не источником данньїх, а моделью. Следо-
вательно, их вероятность может зависеть от характеристик ежимаемих дан-
ньїх, свойств КМ, с которой производится уход, свойств КМ, на которую
проиеходит уход, и т. д. Как можно оценить зту вероятность, имея в виду,
что конечний критерий качества - улучшение сжатия? Вероятность ухода -
зто вероятность появлення в контексте нового символа. Тогда фактически
необходимо оценить правдоподобность наступления ни разу не происхо-
дившего собития. Теоретического фундамента для решения зтой проблеми,
видимо, не существует, но за время развития техник контекстного модели-
рования било предложено несколько подходов, хорошо работающих в
большинстве реальних ситуаций. Кроме того, зкепериментн показнвают,
что модели с неявним взвешиванием устойчивьі относительно используе-
мого метода оценки вероятности ухода, т. е. вьібор какого-то способа ви-
130
Шір:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методи/ сжатия без потерь
числення зтой величини не влияет на козффициент сжатия кардинальним
образом.
Алгоритми РРМ
Техника контекстного моделирования Ргедісііоп Ьу Рагііаі МаісЬіп£
(предсказание по частинному совпадению), предложенная в 1984 г. Клири
(Сіеагу) и Уитгеном (У/ійеп) [5], является одним из самих известних под-
ходов к сжатию качественннх данньїх и уж точно самим популярним среди
контекстних методов. Значимосте подхода обусловлена и тем фактом, что
алгоритми, причисляемне к РРМ, неизменно обеспечивают в среднем наи-
лучшее сжатие при кодировании данньїх различннх типов и служат стан-
дартом, "точкой отсчета" при сравнении универсальньїх алгоритмов сжатия.
Перед собственно рассмотрением алгоритмов РРМ необходимо сделате
замечание о корректности используемой терминологии. На протяжении
примерно 10 лет - с середини 80-х гг. до середини 90-х - под РРМ понима-
лась группа методов с вполне определенними характеристиками. В послед-
ние годи, вероятно из-за резкого увеличения числа всевозможннх гибрид-
них схем и активного практического использования статистических моде-
лей для сжатия, произошло смешение понятий и термин "РРМ" часто
используется для обозначения контекстних методов вообще.
Ниже будет описан некий обобщенний алгоритм РРМ, а затем особен-
ности конкретних распространенньїх схем.
Как и в случае многих других контекстних методов, для каждого кон-
текста, встречаемого в обрабативаемой последовательности, создается своя
контекстная модель КМ. При зтом под контекстом понимается последова-
тельносте злементов одного типа - символов, пикселов, чисел, но не набор
разнородннх обьектов. Далее вместо слова "злемент" ми будем использо-
вать слово "символ". Каждая КМ включает в себя счетчики всех символов,
встреченних в соответствующем контексте.
РРМ относится к адаптивним методам моделирования. Исходно кодеру
и декодеру поставлена в соответствие начальная модель источника данньїх.
Будем считать, что она состоит из КМ(-1), присваивающей одинаковую ве-
роятность всем символам алфавита входной последовательности. После об-
работки текущего символа кодер и декодер изменяют свои модели одинако-
вьім образом, в частности наращивая величину оценки вероятности рас-
сматриваемого символа. Следующий символ кодируется (декодируется) на
оснований новой, измененной модели, после чего модель снова модифици-
руется и т. д. На каждом шаге обеспечивается идентичносте модели кодера
и декодера за счет применения одинакового механизма ее обновлення.
131
Книга написана коллективом Кйр:/Лу\у\у.сотрге‘і‘ііоп.і'и/
Методи сжатия данньїх(7000+ файлов о сжатии)
В РРМ используется неявное взвешивание оценок. Попьітка оценки сим-
вола начинается с КМ(7У), где N является параметром алгоритма и назьівает-
ся порядком РРМ-модели. В случае нулевой частоти символа в КМ текуще-
го порядка осуществляется переход к КМ меньшего порядка за счет
использования механизма уходов (ехсаре 8ігаіе§у), рассмотренного в
предьідущем подразд.
Фактически, вероятность ухода - зто суммарная вероятность всех сим-
волов алфавита входного потока, еще ни разу не появлявшихся в контексте.
Любая КМ должна давать отличную от нуля оценку вероятности ухода. Ис-
ключения из зтого правила возможнм только в тех случаях, когда значення
всех счетчиков КМ для всех символов алфавита отличнм от нуля, т. е. лю-
бой символ может бить оценен в рассматриваемом контексте. Оценка веро-
ятности ухода традиционно является одной из основних проблем алгорит-
мов с неявним взвешиванием, и она будет специально рассмотрена ниже
в подразд. "Оценка вероятности ухода".
Вообще говоря, способ моделирования источника с помощью классических алго-
ритмов РРМ опираєшся на следующие предположения о природе источника:
1) источник является марковским с порядком N. т. е. вероятность генерации
символа зависит от N предидущих символов и только от них;
2) источник имеет такую дополнительную особенность, что чем ближе распо-
лагается один из символов контекста к текущему символу, тем больше корре-
ляция между ними.
Таким образом, механизм уходов первоначально рассматривался лишь
как вспомогательимй прием, позволяющий решить проблему кодирования
символов, ни разу не встречавшихся в контексте порядка N. В идеале, дос-
тигаемом после обработки достаточно длинного блока, никакого обращения
к КМ порядка меньше N происходить не должно. Иначе говоря, причисле-
ние классических алгоритмов РРМ к методам, производящим взвешивание,
пусть и неявним образом, является не вполне корректньїм.
При сжатии очередного символа виполняются следующие действия.
Если символ 5 обрабативается с использованием РРМ-модели порядка М
то, как ми уже отмечали, в первую очередь рассматривается КМ(А/). Если
она оценивает вероятность л числом, не равним нулю, то сама и использу-
ется для кодирования з. Иначе вндается сигнал в виде символа ухода, и на
основе меньшей по порядку КМ(АМ) производится очередная попитка оце-
нить вероятность х. Кодирование происходит через уход к КМ меньших по-
рядков до тех пор, пока з не будет оценен. КМ(-1) гарантирует, что зто в
конце концов произойдет. Таким образом, каждьій символ кодируется сери-
ей кодов символа ухода, за которой следует код самого символа. Из зтого
132
1ііір:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
следует, что вероятность ухода также можно рассматривать как вероятность
перехода к контекстной модели меньшего порядка.
Если в процессе оценки обнаруживается, что текущий рассматриваеммй
контекст встречается в первьій раз, то для него создается КМ.
При оценке вероятности символа в КМ порядка о < N можно исключить
из рассмотрения все символи, которьіе содержатся в КМ(о+1), поскольку ни
один из них точно не является символом 5. Для зтого в текущей КМ(о) нуж-
но замаскировать, т. е. временно установить в нуль, значення счетчиков
всех символов, имеющихся в КМ(о+1). Такая техника називается методом
исключения (ехсіизіоп).
После собственно кодирования символа обьічно осуществляется обнов-
ление статистики всех КМ, использованньїх при оценке его вероятности, за
исключением статической КМ(-1). Такой подход назьівается методом ис-
ключения при обновлений. Простейшим способом модификации является
инкремент счетчиков символа в зтих КМ. Подробнее о стратегиях обновле-
ння будет сказано в подразд. "Обновление счетчиков символов".
Пример работьі алгоритма РРМ
Рассмотрим подробнее работу алгоритма РРМ с помощью примера.
Пример 2
Имеется последовательность символов "абвавабввбббв" алфавита {"а",
"б", "в", "г"}, которая уже бьіла закодирована.
| а | б | в | а | в | а | б| в| в| б| б| б| в]~?]
1
Пусть счетчик символа ухода равен единице для всех КМ, при обновле-
ний модели счетчики символов увеличиваются на единицу во всех актив-
них КМ, применяется метод исключения и максимальная длина контекста
равна трем, т. е. #= 3.
Первоначально модель состоит из КМ(-1), в которой счетчики всех че-
тьірех символов алфавита имеют значение 1. Состояние модели обработки
последовательности "абвавабввбббв" представлено на рис. 4.2, где прямо-
угольниками обозначеньї контекстнне модели, при зтом для каждой КМ
указан курсивом контекст, а также встречавшиеся в контексте символи и их
частоти.
Пусть текущий символ равен "г", т. е. "?" = "г", тогда процесе его коди-
рования будет виглядеть следующим образом.
133
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.пі/
Мвтодьі сжатия данньїх _________________________(7000+ файлов о сжатии)
Рис. 4.2. Состояние модели после обработки последовательности "абвавабввбббв"
Сначала рассматривается контекст 3-го порядка "ббв". Ранее он не встре-
чался, позтому кодер, ничего не послав на вьіход, переходит к анализу ста-
тистики для контекста 2-го порядка. В зтом контексте ("бв") встречались
символ "а" и символ "в", счетчики которьіх в соответствующей КМ равньї 1
134
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
_______________________________________ Раздел 1. Методьі сжатия без потерь
каждьій, позтому символ ухода кодируется с вероятностью 1/(2+1), где в
знаменателе число 2 - зто наблюдавшаяся частота появлення контекста
"бв", І - зто значение счетчика символа ухода. В контексте 1-го порядка "в"
дваждьі встречался символ "а", которьій исключается (маскируется), один
раз также исключаемьій "в" и один раз "б", позтому оценка вероятности
ухода будет равна 1/(1+1). В КМ(0) символ "г" также оценить нельзя, при-
чем все имеющиеся в зтой КМ символьї "а", "б", "в" исключаются, так как
уже встречались нам в КМ более високого порядка. Позтому вероятность
ухода гіолучается равной единице. Цикл оценивания завершается на уровне
КМ(-1), где "г" к атому времени остается единственньїм до сих пор не по-
падавшимся символом, позтому он получает вероятность 1 и кодируется
посредством 0 бит. Таким образом, при использовании хорошего статисти-
ческого кодировщика для представлення "г" потребуется в целом примерно
2.6 бита.
Перед обработкой следующего символа создается КМ для строки "ббв" и
производится модификация счетчцков символа ”г" в созданной и во всех
просмотренньїх КМ. В данном случае требуется изменение КМ всех поряд-
ков от 0 до N.
Табл. 4.2 демонстрирует оценки вероятностей, которьіе должнм били
бьіть использованьї при кодировании символов алфавита {"а", "б", "в", "г"}
в текущей позиции.
Таблица 4.2
Сим- ВОЛ 8 Последовательность оценок для КМ каждого порядка от 3 до -1 Общая оценка ве- роятности я(8) Представле- ние требует битов
3 2 1 .0 -1
"ббв" "бв" "в" нм
"а" - 1 2 + 1 - £ 3 1.6
"б" * 1 2 + 1 1 1+1 - - _1_ 6 2.6
"в" - 1 2 + 1 - - - 2 3 1.6
ИрН - 1 2 + 1 1 1+1 1 1 _і_ 6 2.6
Алгоритм декодирования абсолютно симметричен алгоритму кодирова-
ния. После декодирования символа в текущей КМ проверяется, не является
ли он символом ухода;. если зто так, то вьіполняется переход к КМ поряд-
ком ниже. Иначе считается, что исходньїй символ восстановден, он записьі-
135
Книга написана коллективом 1ійр:/Лууууу.сотрге88Іоп.пі/
Методи, сжатия даннь.х(7000+файлов о сжатии)
вается в декодированньїй поток и осуществляется переход к следующему
шагу. Содержание процедур обновлення счетчиков, создания нових кон-
текстних моделей, прочих вспомогательних действий и последовательность
их применения должньї бить строго одинаковнми при кодировании и деко-
дировании. Иначе возможна рассинхронизация копий модели кодера и де-
кодера, что рано или поздно приведет к ошибочному декодированию како-
го-то символа. Начиная с зтой позиции вся оставшаяся часть сжатой после-
довательности будет разжата неправильно.
Разница между кодами символов, оценки вероятности которнх одинако-
вн, достигается за счет того, что РРМ-предсказатель передает кодировщику
так назнваемне накопленнне частоти (или накопленньїе вероятности) оце-
ниваемого символа и его соседей или кодовме пространства символов. Так,
например, для контекста "бв" из примера 2 можно составить табл. 4.3.
Таблица 4.3
Символ Частота Оценка вероятности Накопленная веро- ятность (оценка) Кодовое пространство
"а" 1 1/3 1/3 [0...0.33)
"б” 0 - - -
"в" 1 1/3 2/3 [0.33 ...0.66)
МрИ 0 - -
Уход 1 1/3 1 [0.66 ... 1)
Хороший кодировщик должен отобразить символ "5" с оценкой вероят-
ности д(т) в код длини ІовдСД что и обеспечит сжатие всей обрабатьівае-
мой последовательности в целом.
В обобщенном виде алгоритм кодирования можно записать так.
/*инициализация контекста длиньї N (в смисле строки предидущих
символов), зта строка должна содержать N предидущих
символов, определяя набор активних контекстов длини о £ N
*/
сопДехб =
иЬіІе ( ! БаІіаГіІе.ЕОГО ){
с = ОабаЕіІе. КеасІЗутЬої () ; // текущий символ
огдег = И; // текущий порядок КМ
зиссезз =0; // успешность оценки в текущей КМ
до {
// найдем КМ для контекста текущей длини
СМ = СопбехСМойеІ.ГіпдМодеї (сопбехб, огбег);
/*попробуем найти текущий символ с в зтой КМ, в
СитГгед получим его накопленную частоту (или
накопленную частоту символа ухода), в соипбег -
ссилку на счетчик символа; флаг зиссезз указивает
136
К((р:/Лу\у\у.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
на отсутствие ухода
*/
зиссезз = СМ.ЕVа1иа£е5утЬо1 (с, &СитГгед, соипСег);
/*запомним в стеке КМ и указатель на счетчик для
последующего обновлення модели
*/
5£аск.РизЬ (СМ, соипЬег);
// закодируем с или символ ухода
ЗкаЬСодег.Епсоде (СМ, СитГгед, соипїег);
огдег—;
}мИі1е ( ! зиссезз );
/♦обновим модель: добавим КМ в случае необходимости,
изменим значення счетчиков и т. д.
*/
Срсіа£еМосіе1 (ЗЬаск) ;
// обновим контекст: сдвинем влево, справа добавим с
МоуєСоп£єх£ (с);
}
Пример реализации РРМ-компрессора
Рассмотрим основньїе моменти реализации компрессора РРМ для про-
стейшего случая с порядком модели N = 1 без исключения символов. Будем
также исходить из того, что статистическое кодирование вьіполняется ариф-
метическим кодером.
При контекстном моделировании 1-го порядка нам не требуются слож-
ньіе структури данннх, обеспечивающие зффективное хранение и доступ к
информации отдельних КМ. Можно просто хранить описання КМ в одно-
мерном массиве, размер которого равен количеству символов в алфавите
входной последовательности, и находить нужную КМ, используя символ ее
контекста как индекс. Ми используем байт-ориентированное моделирова-
ние, позтому размер массива для контекстних моделей порядка 1 будет ра-
вен 256. Чтоби не плодить лишних сущностей, ми, во-первих, откажемся от
КМ(-1) за счет соответствующей инициализации КМ(0) и, во-вторих, будем
хранить КМ(0) в том же массиве, что и КМ(1). Считаем, что КМ(0) соответ-
ствует индекс 256.
В структуру контекстной модели Сопьех^МосіеІ включим массив счет-
чиков соипЬ для всех возможньїх 256 символов. Для символа ухода введем
в структуру КМ специальний счетчик езс, а также добавим поле То^Гг,
в котором будет содержаться сумма значений счетчиков всех обичних сим-
волов. Использование поля То+Гг не обязательно, но позволит ускорить об-
работку данньїх.
137
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.пі/
Методи сжатия данньїх (7000+ файлов о сжатии)
С учетом сказанного структура данньїх компрессора будут такими:
зЬгисС.СрпЬехСМойеІ{
іпС езс,
ТоСЕг;
іпЬ соипЬ[256];
};
СопбехСМодеї сш[257];
Если размер типа іпь равен 4 байтам, то нам потребуется не менее
257 Кб памяти для хранения модели.
Опишем стек, в котором будут храниться указатели на требующие мо-
дификации КМ, а также указатель стека ЗР и контекст сопеехе.
СопСехТМосіеІ *з£аск[2] ;
ІпЬ ЗР,
сопСехЬ [1]; //контекст вьірождается в 1 символ
Больше никаких глобальних переменньїх и структур данньїх нам не
нужно.
Инициализацию модели будем вьіполнять в общей для кодера и декоде-
ра функции іпі£_шо<3е1.
\лоій іпі£_шоде1 (уоій) {
/*Так как сш является глобальной переменной, то значення
всех полей равни нулю. Нам требуется только распреде-
лить кодовое пространство в КМ(0) так,, чтобьі
все символьї, в ключ а я символ ухода, всегда бьі имели
ненулевме оценки.
Пусть также символьї будут равновероятньїми
*/
£ог ( іп£ з = 0; 3 < 256; ]++ )
сш[256].соипбЕЛ = 1 ;
сш[256].ТоСГг = 256;
/*Явно запишем, что в начале моделирования мьі считаем
контекст равньїм нулю. Число не имеет значення, лишь бьі
' кбдер и декодер точно следовали принятьім
соглашениям. Обратйте на зто внимание
*/
сопСехС [0] = 0;
ЗР = 0;
}
Функции обновлення модели также будут общими для кодера и декоде-
ра. В ирсіаіе тосіеі производится инкремент счетчиков просмотренньїх КМ,
а в гезсаіе осуществляется масштабирование счетчиков. Необходимость
масштабирования обусловлена особенностями типичньїх реализаций ариф-
138
ййр:/Лууууу.сотрге88Іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Р«зД<п 1. Мвтодьі сжатия бея потерь
метического кодирования и заключается в делении значений счетчиков по-
полам при достижении суммьі значений всех счетчиков ТоіРг+езс некоторо-
го порога. Подробнее об зтом рассказано в подразд. "Обновление счетчиков
символов" зтой главьі.
сопзС іпї МАХ_ТоСГг = ОхЗГЕГ;
уоід гезсаіе (СопЬехкМобеІ *СМ){
СМ->То£Ег = 0;
Еог (іпС і = 0; і < 256; і++){
/*обеспечим отличие от нуля значення
счетчика после масштабирования
*/
СМ->соипї[і] -= СМ->соипС[і] » 1;
СМ->То£Ег += СМ->соипЄ(і];
)
)
уоід ирсІаСе_тосІе1 (іпС с) {
мЬіІе (ЗР) {
ЗР--;
і£ ((зСаск[ЗР]->ТокЕг + зСаск[ЗР]->езс) >= МАХ_ТоСГг)
гезсаіе (з£аск[ЗР]);
і£ (!зЬаск[ЗР]->соипґ[с])
/*в зтом контексте зто новий символ, увеличим
счетчик уходов
*/
зСаск[ЗР]—>езс += 1;
з£аск[ЗР]->соип£[с] += 1;
з£аск[ЗР]->То£Гг += 1;
)
}
Собственно кодер реализуем функцией епсосіе. Зта функция управляет
последовательностью действий при сжатии данньїх, вьізьівая вспомогатель-
ньіе процедури в требуемом порядке, а также находит нужную КМ. Оценка
текущего символа производится в функции епсойе зут, которая передает
результати своей работи арифметическому кодеру.
іп£ епсосіе_зут (СопкехїМосіеІ *СМ, іпї с) {
11 КМ потребует инкремента счетчиков, заломним ее
зЬаск [ЗР++] = СМ;
і£ (СМ->соип£[с]){
/♦счетчик сжимаемого символа не равен нулю, тогда
его можно оценить в текущей КМ; найдем
накопленную частоту предмдущего в массиве соипЬ
символа
139
Книга написана коллективом 1йір:/Лууууу.сотрге88Іоп.ги/
Мятодм сжатия даннмх(7000+файлов о сжатии)
*/
іпЬ СитЕгедОпсіег = 0;
£ог (іпї і = 0; і < с; І++)
СитЕгедПпсіег += СМ->соипЬ [і];
/*передадим описание кодового пространства,
занимаемого символом с, арифметическому кодеру
*/
АС.епсосіе (СшпЕгедСпсІег, СМ->соипб[с],
СМ->ТобЕг + СМ->езс);
гебигп 1; // возвращаемся в епсосіе с победой
}е1зе{
/*нужно уходить на КМ(0);
если текущий контекст 1-го порядка встретился первьій
раз, то заранее известно, что его КМ пуста (все
счетчики равньї нулю) и кодировать уход не только не
имеет смьісла, но и нельзя, так как ТобЕг+езс = 0
*/
і£ (СМ->езс)
АС.епсосіе (СМ->ТоЬЕг, СМ->езс, СМ->Тоґ.Гг + СМ->езс)
ге£игп 0; // закодировать символ не удалось
}
}
уоісі епсоде (уоій) {
іпЬ с, // текущий символ
зиссезз; // успешность кодирования символа в КМ
іпіЛ_тосіе1 ();
АС.5£агХЕпсосіе (); // проинициализируем арифм. кодер
мЬіІе (( с = ОаСаГіїе.КеадЗутЬої() ) != ЕОЕ) {
// попробуєм закодировать в КМ(1)
зиссезз = епсосіезуш (&ст(соп£ех£[0] ], с);
і£ (!зиссезз)
/*уходим на КМ(0), где любой символ получит
ненулевую оценку и будет закодирован
*/
епсосіе_зут (&ст(25б], с);
ирсіа£е_тосіе1 (с) ;
сопЬехї [0] = с; // сдвинем контекст
)
// закодируем знак конца файла символом ухода с КМ(0)
АС.епсосіе (ст[сопґехґ[0] ] .ТоїЕг, ст[соп£ехі: [0] ] .езс,
ст[сопЬехї. [0] ] .ТоЬЕг + ст [сопїехґ. [0]) .езс) ;
АС.епсосіе (ст[256] .ТоСЕг, ст(256].езс,
ст[256].ТоЬЕг + ст[256].езс);
// завершим работу арифметического кодера
АС. ЕіпізЬЕпсосіе () ;
140
ййр:/Лууууу.сошрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия бм потарь
Реализация декодера вьіглядит аналогично. Внимания заслуживает разве
что только процедура поиска символа по описанню его кодового пространства.
Метод £еі_&ец арифметического кодера возвращает число х, лежащее в /діапа-
зоне [СшпРгецІІшІег, СшпРгедІ)п(1ег+СМ->соипі[і]), т. е. СшпГгецІйкІег < х <
< СшпГгедипдег+СМ->сошіі[і]. Позтому искомьім символом является і, для
которого вьіполнится зто условие.
іпі сіесосіе_зут (СопїехіМосІєІ *СМ, іпЬ *с) {
зіаск [5Р++] = СМ;
і£ (!СМ->езс) геґигп 0;
іп£ сит_£гед = АС.де£_£гед (СМ->То£Ег + СМ->езс);
і£ (сит_£гед < СМ->То£Ег){
/♦символ бил закодирован в зтой КМ; найдем символ и
его точнеє кодовеє пространство
*/
іп£ СшпЕгедОпсіег = 0;
іп£ і = 0;
£ог (;;) {
і£ ( (СитЕгедСпсіег + СМ->соип£ [і]) <= сит_£гед)
СшпЕгедСпсіег += СМ->соип£[і] ;
еізе Ьгеак;
і++;
)
/♦обновим состояние арифметического кодера
на оснований точной накопленной частоти символа
*/
АС.сіесосіе_ирсіа£е (СшпЕгедОпсіег, СМ->соип£ [і],
СМ->То£Гг + СМ->езс);
*с = і;
геЬигп 1;
)е1зе{
/♦обновим состояние арифметического кодера на
оснований точной накопленной частоти символа,
оказавшегося символом ухода
*/
АС.<3есойе_ирс1а£е (СМ->То£Ег, СМ->езс,
СМ->То£Гг + СМ->езс);
ге£игп 0;
)
)
чоісі десоде (уоісі) {
іпі с,
зиссезз;
іпі£_піос1е1 ();
141
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.пі/
Методь, сжатия данньїх(7000+ файлов о сжатии)
АС. ЗЬагЬОесосіе ();
£ог (;;)(
зиссезз = <1есос1е_зуіп (&ст[сопі.ехЬ[0] ], &с) ;
ії (!зиссезз){
зиссезз = с1есо<іе_зут (&ст[256], &с) ;
і.£ (! зиссезз) Ьгеак; //признак конца файла
)
ирсіаСе_тосІе1 (с) ;
сопСехС [0] = с;
ОаЬаГіІе.ИгіСеЗутЬої (с);
}
)
Характеристики созданного компрессора, названного Оитту, приведе-
ньі в подразд. "Компрессорьі и архиватори, использующие контекстное мо-
делирование" (см. "Производительность на тестовом наборе Са1§агу
Сотргеззіоп Согрия"). Полньїй текст реализации Витту оформлен в виде
приложения 1.
Оценка вероятности ухода
На долю символов ухода обьічно приходится порядка 30% и более от
всех оценок, вьічисляемьіх моделировщиком РРМ. Зто определило при-
стальное внимание к проблеме оценки вероятности символов с нулевой час-
тотой. Львиная доля публикаций, посвященньїх РРМ, прямо касаются оцен-
ки вероятности ухода (ОВУ).
Можно вьіделить два подхода к решению проблеми ОВУ: априорньїе
методи, основанние на предположениях о природе сжимаемьіх данних,
и адаптивньїе методи, которие пьітаются приспособить оценку к данним.
Понятно, что первие призвани обеспечить хороший козффициент сжатия
при обработке типичньїх данних в сочетании с вьісокой скоростью вичис-
лений, а вторьіе ориентированьї на обеспечение максимально возможной
степени сжатия.
Априорньїе методьі
Введем обозначения:
С - общее число просмотров контекста, т. е. сколько раз он встретился
в обработанном блоке данних;
5 - количество разньїх символов в контексте;
- количество таких разньїх символов, что они встречались в контек-
сте ровно і раз;
- значение ОВУ по методу х.
142
К((р://уууууу.сотрге88Іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Изобретатели алгоритма РРМ предложили два метода ОВУ: так нази-
ваемьіе метод А и метод В. Использующие их алгоритми РРМ бьіли назва-
ньі РРМА и РРМВ соответственно.
В дальнейшем било описано еще 5 априорньїх подходов к ОВУ: методи
С, О, Р, X и ХС [8, 10, 17]. По аналогии с РРМА и РРМВ алгоритми РРМ,
применяющие методи С и Б, полупили названим РРМС и РРМО соответст-
венно.
Идея методов и их сравнение представленьї в табл. 4.4 и табл. 4.5.
Таблица 4.4
Метод Е™ =
А 1 С + 1
В 5-5(І) С
С 8 С + 8
0 . 8 2С
Р 5(1) 5(2) 5(3) і ••• С С2 С3
X 5(|) С
ХС с(0 при 0 < 5(1) < С £<С), в противном случае
Кстати, в примере 2 бнл использован метод А, а в крмпрессоре Ощпхпу -
метод С.
При реализации метода В воздерживаются от оценки символов до тех
пор, пока они не появятся в текущем контексте более одного раза. Зто дос-
тигается за счет вьічитания единицм из счетчиков. Методи Р, X, ХС бази-
руются на предположении о том, что вероятность появлення в обрабати-
ваемих даннмх символа 5, подчиняется закону Пуассона с параметром А,. , ,
1ІЗ
Книга написана коллективом КНрі/Луууху.сотрге^іоп.ги/
(7000+ файлов о сжатии)
Методьі сжатия данньїх
Таблица 4.5
Тип файлов Точность предсказания
Лучше Хуже
Тексти ХС О Р X с в А
Двоичньїе файли С X Р ХС 0 в А
Места в табл. 4.5 очень условньї. Так, например, при сжатии текстов ме-
тоди ХС, Б, Р, X показьівают весьма близкие результати и многое зависит
от порядка модели и используемих для сравнения файлов. В большинстве
случаев существенним является только отставание точности ОВУ по спосо-
бам А и В от других методов.
Упражнение. Вьіполните действия, описанньїе в примере 2, используя ОВУ по
методу С. Если текущий символ "б", то точность его предсказания улучшится,
останется неизменной или ухудшится?
Адаптивньіе МЕТОДЬІ
Чтоби улучшить оценку вероятности ухода, необходимо иметь такую
модель оценки, которая би адаптировалась к обрабатьіваемим данним. По-
добннй адаптивний механизм получил название Зесопбагу Езсаре
Езіітаііоп (8ЕЕ), т. е. дополнительной оценки ухода или вторичной оценки
ухода. Метод заключается в тривиальном вичислении вероятности ухода из
текущей КМ через частоту появлення нових символов (или, что то же, сим-
волов ухода) в контекстних моделях со схожими характеристиками:
л(.
где /^е5с) - число наблюдавшихся уходов из контекстних моделей типа і;
Пі ~ число просмотров контекстних моделей типа і.
Вразумительние обоснования вибора зтих характеристик и критериев
"схожести" при отсутствии априорних знаний о характере сжимаемой по-
следовательности дать сложно, позтому известние алгоритми адаптивной
оценки базируются на змпирическом анализе типових данних.
Метод 2
Одна из самих ранних попнток реализации 8ЕЕ известна как метод 2,
а использующая его разновидность алгоритма РРМ - РРМ2 [3]. Для точно-
сти описання зтой техники 8ЕЕ обьект "контекст" ниже будет также имено-
ваться "РРМ-контекстом".
Для нахождения ОВУ строятся так назьіваемие контексти ухода (езсаре
сопісхіз) (КУ), формируемме из четнрех полей. В полях КУ содержится ин-
формация о значеннях следующих величин: последние 4 символа РРМ-
144
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
контекста, порядок РРМ-контекста, количество уходов и количество успеш-
ньіх оценок в соответствующей КМ. Нескольким КМ может соответство-
вать один КУ.
Информация о фактическом количестве уходов и успешньїх кодирова-
ний во всех контекстних моделях, имеющих общий КУ, запоминается в
счетчиках контекстной модели уходов КМУ, построенной для данного КУ.
Зта информация определяет ОВУ для текущей КМ. ОВУ находится путем
взвешивания оценок, которме дают три КМУ (КМУ порядка 2, І и 0), отве-
чающие характеристикам текущей КМ.
КУ порядка 2 наиболее точно соответствует текущей КМ, контекстьі
ухода порядком ниже формируются главньїм образом путем вьібрасьівания
части информации из полей КУ порядка 2. Компоненти КУ порядка 2 опре-
деляются в соответствии с табл. 4.6 [3].
Таблица 4.6
Номер поля Размер, бит Способ формирования значений поля
Параметр и его значення Значение поля
І 2 Порядок КМ Порядок КМ/2 (с округлени- ем до младшего)
2 2 Количество уходов из КМ
1 0
2 1
3 2
>3 3
3 3 Количество успешньїх оценок в КМ
0 0
1 1
2 2
3,4 3
5,6 4
7,8,9 5
10,11,12 6
> 12 7
4 9 Х| = 7 младших бит по- следнего (только что обра- ботанного) символа РРМ- контекста; Х2 = шестой и пятмй битьі предпоследнего символа; т. е., если расписать байт как совокупность 8 бит хХХххххх, то зто битьі XX ((Х2&0х60)« 2) | X!
145
Книга написана коллективом К((р:/Лу\у\у.сотрге‘і‘ііоп.і'и/
Методь, сжатия данньїх (7000+ файлов о сжатии)
В состав КУ всех порядков входят поля 1, 2, 3. Для КУ порядка 1 поле 4
состоит из 8 бит и строится из шестьіх и пятьіх битов последних четьірех
обработанннх символов. У КУ порядка 0 четвертеє поле отсутствует. Оче-
видно, что алгоритм построения поля 4 для КУ порядков 1 и 2 призван
улучшить предсказание ухода для текстов на английском язьіке в кодировке
А8СІІ. Аналогичньїй прием, хотя и в не столь явном виде, используется
в адаптивних методах ОВУ 8ЕЕ-СІ1 и 8ЕЕ-СІ2, рассмотренньїх ниже.
При взвешивании статистики КМУ (я) используются следующие веса
1 1 ҐП /1 У 1 ( 1
— = е-1ов2 - +(1-е)-1о§2 -—
й'и \е У \1~Є
где е - ОВУ, которую дает данная взвешиваемая КМУ(л); формируется из
фактического количества уходов и успешньїх кодирований в контекстних
моделях, соответствующих зтой КМУ, или, иначе, определяется наблюдав-
шейся частотой ухода из таких КМ.
Окончательная оценка:
После ОВУ внполняется поиск текущего символа среди имеюіцихся в
КМ. По результатам поиска (символ найден или нет) обновляются счетчики
соответствующих трех КМУ порядка 0,1 и 2.
МЕТОДЬ) 8ЕЕ-0І и 8ЕЕ-02
Современним адаптивним методом является подход, предложенний
Шкариним и успешно применяемий в компрессорах РРМсі и РРМопзІг [1].
При каждой оценке используется КУ только какого-то одного типа (в мето-
де 2 их 3), но в зависимости от требований, предьявляемих к компрессору,
автор предлагает применять один из двух методов. Назовем первий метод
8ЕЕ-СІ1, а второй - 8ЕЕ-62.
Метод 8ЕЕ-СІ1 используется в компрессоре РРМсІ и ориентирован на хо-
рошую точность оценки при небольших вичислительних затратах. Рас-
смотрим его подробно.
Все КМ разобьем на 3 типа:
детерминированньїе (или бинарние), содержащие только один символ;
назовем их контекстними моделями типа сі;
с незамаскированними символами, т. е. ни один из символов, имеющих-
ся в данной КМ, не встречался в КМ больших порядков; обично зто КМ
146
К((р:/Лу\у\у.сотрге88Іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
максимального порядка или КМ, с которой началась оценка; назовем их
контекстними моделями типа пт;
• с замаскированньїми символами; назовем их контекстними моделями
типа т.
Как показали зксперименти, вероятность ухода из КМ разнмх типов
коррелирует с разними характеристиками.
Случай КМ типа <1 является наиболее простим, так как у такой модели
малое число степеней свободи. Естественно, наибольшее влияние на веро-
ятность ухода оказнвает счетчик частоти единственного символа.
Ниже изложен способ формирования КУ, при зтом описание полей от-
сортировано в порядке убивання степени их влияния на точность оценки
ухода.
І. Счетчик частоти символа квантуется до 128 значений.
2. Существует сильная взаимосвязь между родительскими и дочерними
КМ, позтому число символов в родительской КМ квантуется до четирех
значений.
3. При сжатии реальних данних характерно чередование блоков хорошо
предсказуемьіх символов с плохо предсказуемими. Включим в КУ оцен-
ку вероятности предидущего символа, чтоби отслеживать переходи ме-
жду такими блоками. Величина квантуется до двух значений.
4. Существует сильная статистическая взаимосвязь между текущим и пре-
дьідущим символами. Введем І-битовий флаг, принимающий значение
0, если 2 старших бита предидущего символа нулевие, и значение І в
прочих случаях.
5. Кроме чередования блоков хорошо и плохо предсказуемьіх символов,
часто встречаются длиннме блоки очень хорошо предсказуемих даннмх.
Зто обмчно бмвает в случае множественних повторов длиннмх строк в
сжимаемом потоке. Часто РРМ-модели небольших порядков плохо рабо-
тают в таких ситуациях. Введем І-битовмй флаг, свидетельствующий о
нахождении в таком блоке. Флаг принимает значение І, если при обра-
ботке предьідущих символов ни разу не происходил уход и оценки веро-
ятности превишали 0.5 для £ или большего количества зтих символов. Ь
обмчно равно порядку РРМ-модели.
6. Возможность ухода зависит от единственного символа КМ типа д. Пусть
соответствующий флаг равен нулю, если 2 старших бита символа нуле-
вме, и единице в остальнмх случаях.
Таким образом, всего возможно 128-4-2-2-2-2 = 8192 контекста ухода для
КМ типа б.
147
Книга написана коллективом Кйр:/Лу\у\у.сотрге‘і‘ііоп.і'и/
Методьі сжатия данньїх (7000+файлов о сжатии)
В случае КМ типа пш адаптивная оценка затруднена из-за небольшой
частоти их использования, что приводит к отсутствию представительной
статистики в большинстве случаев. Позтому применим полуадаптивнмй ме-
тод, доказавший на практике свою зффективность. Допустим, распределе-
ние символов геометрическое:
Р(5‘|О) = /(1-Р),
где /?(-$* | о) - вероятность появлення символа 5, в заданной КМ(о) после
серии из к иньїх символов.
ЗЙ Иначе говоря, | о) - вероятность успеха в первьій раз после ровно к ис-
пьітаний по схеме Бернулли при вероятности успеха (і -р).
Параметр р геометрического распределения может бить найден через
оценку для соответствующей КМ типа б. Получив р, можно оценить частоту
счетчика числа уходов. Зто делается только для КМ, содержащих 1 символ,
при добавлений нового символа, т. е. когда КМ перестает бить детермини-
рованной. Далее значение счетчика символа ухода изменяется только при
добавлений в КМ нових символов. Величина инкремента 6 счетчика равна
1/2, при 45(о) < 5(о-к)
< 1/4, при 25(о)<8(о-к) ,
0, для всех прочих случаев
где 5(о) - число символов в модифицируемой КМ(о); 5(о-£) - число симво-
лов в КМ(о-£), в которой реально бил оценен текущий символ.
Если новому символу соответствует небольшая вероятность, то д увели-
чивается на 1-/°(5; |о), где /0(5(|о) єсть наследуемая частота нового
символа 5, (см. подразд. "Наследование информации" в подразд. "Повнше-
ние точности оценок в контекстних моделях високих порядков").
Вероятность ухода из КМ типа т больше всего зависит от сумми значе-
ний всех счетчиков. Но зта сумма должна представляться достаточно точно,
что приведет к большому количеству используемих КМУ и, как следствие,
к недостатку статистики в каждой КМУ. Позтому будем моделировать не
вероятность ухода, а величину счетчика символа ухода, которая слабо зави-
сит от сумми частот. Поля КУ формируются следующим образом:
1. Имеется сильная взаимосвязь между частотой уходов и числом незамас-
кированних символов; произведем квантование зтого числа до 25 значе-
ний.
148
КНрі/Луууху.сотргекіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методь/ сжатия без потерь
2. Результат сравнения числа незамаскированньїх символов 5(о)-5(о+1) в
КМ(о) с числом символов 5(о+]) в дочерней КМ(о+1) запишем в виде
І-битового флага.
3. Аналогично полю 2 введем флаг результати сравнения числа незамаски-
рованньїх символов 5(о)-5(о+1) с числом символов 5(о-1)-5(о), кото-
рьіе останутся незамаскированньїми в родительской КМ(о-І), если те-
кущая КМ(о) не сможет оценить обрабатьіваемий символ.
4. Существует сильная статистическая взаимосвязь между текущим и пре-
дьідущим символами. Введем І-битовьій флаг, принимающий значение
0, если 2 старших бита предндущего символа нулевие, и значение 1 в
прочих случаях.
5. Существует статистическая взаимосвязь между частотой уходов и сред-
ней частотой символов । в включая символ ухода, где До)
єсть сумма значений всех счетчиков текущей КМ(о).
Всего может использоваться до 25-2-2-2-2 = 400 контекстов ухода для
КМ типа ш.
Метод 8ЕЕ-д2, используеммй в компрессоре РРМопзІг, отличается от
ЗЕЕ-сії следующим образом:
1) добавлено 4 поля в КУ для КМ типа д;
2) добавлено 2 поля в КУ для КМ типа т;
3) для КМ типа плі используется адаптивная оценка.
Данная модификация позволяет улучшить сжатие на 0.5-1%, но вьічис-
ление значений дополнительньїх полей существенно замедляет работу ком-
прессора.
Как 8ЕЕ-д2, так и 8ЕЕ-Л обично зффективнее 8ЕЕ по методу 2 с точки
зрения точности оценок и вьічислительной сложности.
ПРИМЕР РЕАЛИЗАЦИИ АДАПТИВНОЙ ОВУ
Заменим в нашем компрессоре Вшиту априорньїй метод ОВУ на адап-
тивний. С целью максимального упрощения контекст ухода будем форми-
ровать на оснований только частоти появлення контекста ТоїГг.
Рассмотрим, как изменится программа. Для подсчета числа успешних
кодировании и числа уходов создадим структури данних:
збгисС ЗЕЕ_і£ет { //счетчики для контекста ухода
іпС е, з;
};
іпС ТГ2ІПСІЄХ [МАХ_То1:Ег+1 ]; //таблице квантования ТобГг
ЗЕЕ іСет *ЗЕЕ;
149
Книга написана коллективом 1Шр:/Лууууу.сошрге88Іоп.ги/
Методьі сжатия данньїх (7000+ Файлов о сжатии)
Алгоритм квантования ТоЬГг описьівается следующим образом:
Значение Тоьгг Номер КУ
1 1
2...3 2
4...7 3
8...15 4
Иначе говоря, по мере роста ТоіРг диапазон возможньїх значений ТоіРг
группм КМ, относимнх к одному и тому же КУ, в 2 раза больше предьіду-
щего. Если МАХ_ТоіРг = 0x3їїї, то всего может использоваться до 14 КУ.
Изменим соответствующим образом функцию іпіе_шо<іе1.
уоій іпі£_то<іе1 (уоісі) {
... // ранее описанньїе действия по инициализации
іпЬ іпд = 0, //номер КУ
і = 1, //значение ТоСГг
зіге =1; //размер диапазона
до {
іп£ і = 0;
до{
ТР2ІПСІЄХ [і+Л = ідеї;
)нИі1е (++Ї < зіге);
і +•= і;
зіге «= 1;
ілд++;
}нЬі!е ( (і + зіге) <= МАХ_То£Ег) ;
£ог (; і <= МАХ_То£Ег; І++)
ТЕ2ІПСІЄХ [і] = іпд;
/*на всякий случай отнесем КМ с ТоСГг = 0 к КУ
с номером 0
*/
ТЕ2ІПСІЄХ [0] = 0;
8ЕЕ = (5ЕЕ_і£ет*) пеи ЗЕЕ_і£ет[іпд+1);
//проинициализируем счетчики КМУ
£ог (і = 0; і <= ідеї; і++) {
ЗЕЕ[і].е = 0;
//зто предотвратит деление на 0, хотя и сместит оценку
ЗЕЕ[і].3 = 1;
}
}
Функция епсобе зулі примет такой вид (изменения вьіделеньї жирньїм
шрифтом):
150
ййр:/Лууууу.сошрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
іп£ епсосіе_зут (СопкехЬМосіеІ *СМ, іпк с) {
іпк езс;
зкаск [2Р++] = СМ;
8ЕЕ_іЬет *Е ;
Е ж са1с_ЗЕЕ (СМ, безе); //находим адаптивную ОВУ
і£ (СМ->соипЬ[с]){
іпк СитЕгедОпсіег = 0;
£ог (іп£ і = 0; і < с; і++)
СитЕгедСпсіег += СМ->соип£ [і];
АС.епсосіе (СитЕгедСпсіег, СМ->соип£[с],
СМ->То£Ег + езс);
/* увеличиваем счетчик успешньж кодировании для
текуіцего КУ
*/
Е->з++;
геЬигп 1;
}ЄІ5Є{
і£ (СМ->езс){
АС.епсосіе (СМ->ТоЬЕг, езс, СМ->То£Ег + езс);
//увеличиваем счетчик уходов для текуіцего КУ
Е->е++;
}
геЬигп 0;
}
)
В функции декодирования символа аесосіе зуш произведем аналогич-
ньіе изменения.
іпЬ десоде_зуш (СопЬехЬМосіеІ *СМ, іпЬ *с) {
зкаск [ЗР++] = СМ;
і£ (!СМ->езс) гекигп 0;
іпк езс;
8ЕЕ_іЬет *Е = са1с_ЗЕЕ (СМ, безе) ;
іпС сит_£гед = АС.де£_£гед (СМ->То£Ег + езс);
і£ (сит_£гед < СМ->То£Ег){
іпк СитГгедОпсіег = 0;
іп£ і = 0;
£ог (;;){
і£ ( (СитГгедОпсіег + СМ->соип£ [і]) <= сит_£гед)
СитЕгедСпдег += СМ->соип£[і];
еізе Ьгеак;
і++;
)
АС . сіесосіе_ирсіа1іе (СитЕгедЦпсіег, СМ->соип£ [ і ] ,
151
Книга написана коллективом Шір:/Лууууу.сошрге88Іоп.пі/
Методьі сжатия данньїх(7000+ файлов о сжатии)
СМ->То£Ег + езс);
*с = і;
Е->з++;
геїигп 1;
)е1зе(
АС. сіесосіе_ирсіаРе (СМ->ТоЬЕг, езс,
СМ->ТоїГг + езс);
Е->е++;
геЬигп 0;
}
)
Зависимость между требуемьім значением счетчика уходов, с одной сто-
роньї, и количеством уходов и успешньїх кодирований, с другой сторони,
имеет вид
езс _ е
ТоїЕг + езс е+з’
откуда
езс = — • ТоіЕг.
з
Позтому функцию саІс ЗЕЕ, в которой собственно и осуществляется
адаптивная ОВУ, реализуем так:
СОПЗЇ. іпе ЗЕЕ_ТНКЕЗН1 = 10;
сопзС іпС ЗЕЕ_ТНКЕЗН2 = 0х7££;
ЗЕЕ_іЬет* са1с_ЗЕЕ (СопґехРМосіеІ* СМ, ілЬ *езс) {
ЗЕЕ_іЄет* Е = &ЗЕЕ [ТЕ2Іп<Дех [СМ->То£Гг] ] ;
((Е->е + Е->з) > ЗЕЕ_ТНКЕ5Н1){
*езс = Е->е * СМ->ТоРГг / Е->з; //адаптивная оценка
(! (*езс)) *езс = 1;
І£ ( (Е->Є + Е->з) > ЗЕЕ_ТНКЕЗН2){
Е->е -= Е->е » 1;
Е->з -= Е->з » 1;
)
}
еізе *езс = СМ->езс; //априорная оценка
геСигп Е;
}
Константа 8ЕЕ ТНКЕ5Н1 определяет порог частоти использования КУ,
ниже которого предпочтительнее все же применение априорного метода
оценки, так как не набралось еще значительного обьема статистики для те-
кущего КУ. Константа 8ЕЕ ТНК.Е8Н2 налагает ограничение на значення
152
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
счетчиков успешньїх кодирований 8 и ухода е чтобьі, с одной стороньї, пре-
дотвратить переполнение при умножений Е->е * СМ->ТоіГг, а с другой -
улучшить адаптацию к локальним изменениям характеристик сжимаемого
потока.
Предложенная реализация вьічисления средней частоти уходов крайнє
незкономна. Так, например, можно избежать умноження на СМ->ТоіРг, так
как обмчно в пределах группи КМ, относимих к одному КУ, зта величина
изменяется не сильно, позтому имеет смисл залежить неявное умножение
на соответствующую константу в сам алгоритм изменения счетчиков е и 8.
Практичная реализация адаптивной оценки ереднего изложена в [І].
Также необходимо следить за величиной езс, поскольку достаточно
большая сумма СМ->ТоіРг + езс может привести к переполнению в арифме-
тическом кодере. Ми не делали соответствующих проверок лишь с целью
упрощения описання.
Упражнение. Добавление адаптивного метода ОВУ требует изменения
действий по кодированию знака конца файла. Предложите вариант такой
модификации.
Если сравнивать с помощью Са!§СС, то применение описанного метода
адаптивной ОВУ улучшает сжатие всего лишь приблизительно на 0.3%. Не-
большой зффект обьясняется не только простим механизмом вичислених
ОВУ, но и малим порядком используемой модели.
Заключение. Даже сложние адаптивние методи ОВУ улучшают сжатие
обично лишь на 1-2% по сравнению с априорннми методами, но требуют
существенних вичислительннх затрат.
Обновление счетчиков символов
Модификация счетчиков после обработки очередного символа может
бить реализована по-разному. После кодирования каждого символа естест-
венно изменять соответствующие счетчики во всех КМ порядков 0, 1,..., У,
что и предлагаетея, в частности, делать в алгоритмах РРМА и РРМВ. Такой
подход назьівается полним обновлением (Гиіі ирдаіез). Но в случае класси-
ческого, не использующего наследование информации РРМ лучшие резуль-
тати достигаются, когда счетчики оцененного символа увеличиваютея
только в КМ порядков о, о+І, где о - порядок КМ, в которой символ
бил закодирован. Иначе говоря, счетчик обработанного символа не увели-
чиваетея в какой-то активной КМ, если он бил оценен в КМ более високого
порядка. Зта техника имеет самостоятельное название- исключение при
обновлений (ирдаїе ехсіизіоп).
153
Книга написана коллективом 1Шр:/Лууууу.сотрге88Іоп.пі/
Методи сжатия данньїх (7000+ файлов о сжатии)
Термин "исключение при обновлений" не следует путать с исключением
(ехсіизіоп), под которьім понимают сам механизм уходов с маскированием
счетчиков тех символов, которме встречались в контекстах большего по-
рядка.
Применение исключения при обновлений позволяет улучшить сжатие
обачного РРМ-компрессора примерно на 1-2% по сравнению с тем случа-
ем, когда производится обновление счетчиков символа во всех КМ. Одно-
временно ускоряется работа компрессора. В случае применения наследова-
ния информации, а также для алгоритма РРМ* (описание РРМ* приведено
ниже) польза от исключения при обновлений не столь очевидна.
Роль контекстов-предков сравнительно небольших порядков значитель-
но возрастает при использовании техники наследования информации, по-
зтому необходимо более бьістрое обновление их статистики. Как показмва-
ют зкспериментьі, полное обновление работает все же плохо и в зтом слу-
чае. Позтому обьічно следует использовать решение, промежуточное между
исключением при обновлений и полньїм обновлением. Например, ломимо
увеличения с весом 1 в рамках реализации исключения при обновлений,
имеет смисл инкрементировать с весом 1/(о-/+1) счетчики символа в кон-
текстних моделях меньших порядков і. Под КМ(/) понимаются предки той
КМ(о), в которой символ бмл оценен. Например, в компрессоре РРМсІ дела-
ется модификация счетчика с весом 1/2 только в родительской КМ и только
в определенньїх случаях. При зтом основное условие вьіполнения такой мо-
дификации требует, чтобьі счетчик оцененного символа в КМ(о) бьіл мень-
ше некоторого порога.
В алгоритме РРМ* применяется частичное исключение при обновлений
(рагііаі ирдаіе ехсіизіоп). В зтом случае производится увеличение счетчиков
во всех так назьіваемьіх детерминированньїх КМ, а если же их нет, то толь-
ко в недетерминированной КМ с самим большим порядком. Под детерми-
нированной понимается такая КМ, что в соответствующем ей контексте до
данного момента встречался только один символ (любое число раз). Анало-
гично такой контекст називается детерминированнмм.
Для собственно сжатия в связке с РРМ практически всегда используется
арифметическое кодирование. Увеличение значений счетчиков КМ может
привести к ошибке переполнения в арифметическом кодере. Во избежание
зтого обмчно производят деление значений пополам при достижении за-
данного порога. Максимальная величина порога определяется особенностя- і
ми конкретной реализации арифметического кодера. С другой сторони, і
масштабирование счетчиков дает побочнмй зффект в виде улучшения сжа-
154
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
тая при кодировании данньїх с достаточно бистро меняющейся статастакой
контекстних моделей. Чем нестабильнее КМ, тем чаще следует масштаби-
ровать ее счетчики, отбраснвая таким образом часть информации о поведе-
ний данной КМ в прошлом. В свете зтого естественной является идея об
увеличении счетчиков с неравним шагом так, чтобн недавно встреченние
символи получали большие веса, чем "старне" символи. В качестве полу-
мерьі можно применять масштабирование счетчика последнего встреченно-
го символа, которое зксплуатирует такую же особенность типичних данних
(см. ниже "Масштабирование счетчика последнего встреченного символа" в
подразд. "Различнме способи повншения точности предсказания"). Суще-
ственному улучшению сжатия в таких случаях также способствует вторич-
ная оценка вероятности символов (см. "Увеличение точности предсказания
наиболее вероятньїх символов" в том же подразд.).
Использование в качестве шага прироста счетчиков величин, больших
единици, необходимо для успешной работи сложних методов обновлення,
а также способствует лучшей адаптации модели при масштабировании.
В качестве добавки веса 1 хорошо работают 4 или 8, при зтом все еще от-
сутствует проблема переполнения даже при использовании для счетчиков
16-битових машинних слов. Например, если шаг прироста равен четирем,
то счетчик символа может принимать значення: 4 (инициализация при пер-
вом появлении символа в контексте), 8, 12, 16... В компрессоре Пилипу ис-
пользуется единичний шаг прироста.
Повьішение точности оценок в контекстньїх моделях
вьісоких порядков
Наряду с задачей оценки вероятности ухода серьезной проблемой РРМ
является недостаточний обьем статистики в КМ високих порядков, что
приводит к большим погрешностям оценок. Как побочний результат имеет-
ся неприятная зависимость порядка обичной РРМ-модели, обеспечивающе-
го наилучшее сжатие, от вида данньїх. Как правило, оптимальний порядок
обичной модели колеблется от 0 до 16 (для текстов в районе 4-6), кроме то-
го, часто существуют значительние локальньїе изменения внутри файла.
Например, на рис. 4.3 приведен типичний для классического РРМ-
алгрритма график зависимости степени сжатия текста от порядка модели.
Видно, что максимум достигается при N = 4...5, после чего наблюдается
плавное падение степени сжатия.
155
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.пі/
Методи сжатия данньїх <7000+ файлов о сжатии)
Рис. 4.3. Зависимость степени сжатия от порядка модели
для классического РРМ-алгоритма
Можно вьіделить два подхода к решению проблеми:
вьібор порядка модели, обеспечивающего наилучшее сжатие, при оцени-
вании каждого символа;
использование статистики контекстов-предков.
Вьібор локального порядка модели
Механизм вьібора порядка модели для кодирования каждого символа
получил название Ьосаі Огбег Езіітаїіоп (ЬОЕ) - оценки локального поряд-
ка. Схеми ЬОЕ носят чисто звристический характер и заключаются в том,
что ми задаєм некую функцию "доверия" и пробуєм предсказать с ее помо-
щью зффективность кодирования текущего символа в той или иной доступ-
ной - соответствующей активному контексту и физически существующей -
КМ порядка от 0 до заданного N. Можно виделить 3 типа схем ЬОЕ:
1) ищем оптимальний порядок сверху вниз от КМ максимального по-
рядка N к КМ минимального порядка; прекращаем поиск, как только
КМ меньшего порядка кажется нам более "подозрительной", чем те-
кущая, которую и используем для оценки вероятности символа;
2) поиск снизу вверх;
3) оценка всех доступних КМ.
Если в вибранной КМ закодировать символ не удалось, то, вообще гово-
ря, процедуру поиска следующей оптимальной по заданному критерию КМ
можно повторить. Тем не менее обмчно ищут только начальний порядок,
а в случае ухода просто спускаются на уровень ниже, т. е. дальше исполь-
зуют обмчнмй алгоритм РРМ.
156
1Шр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Вьібор той или иной функции доверия зависит от особенностей конкрет-
ной реализации РРМ, характеристик данньїх, для сжатия которьіх разраба-
тьівается компрессор, и, как нередко бьівает, личньїх пристрастей разработ-
чика. Как показал опит, различньїе "наивньїе" знтропийньїе оценки надеж-
ности КМ работают плохо. Зти оценки основмваются на сравнении средней
длиньї кодов для текущей КМ(о) и родительской КМ(о-І). Неудача обьяс-
няется, видимо, тем, что в силу чистой случайности функция распределения
в КМ(о) может бьггь более плоской, чем в следующей рассматриваемой
КМ(о-І). Позтому для получения правдоподобной оценки надо сравнивать
среднюю длину кодов для всех дочерних контекстних моделей текущей
КМ(о) со средней длиной кодов для всех дочерних контекстних моделей
родительской КМ(о-І).
В [3] бьіл предложен зффектевний и простой метод, дающий оценку на-
дежности КМ исходя из оценки вероятности 0, наиболее вероятного в КМ
символа (Мові РгоЬаЬІе ЗушЬоГя РгоЬаЬіІііу, МР8-Р) и количества уходов Е
из КМ. Обобщенно формулу можно записать так:
а • (?1о§2 ^ + Ь^ £(1о§2 Е - с) + <1 • (1 - 0)(1о§2 Е - с), (4.1)
где константи а, Ь, с, сі подбираются змпирическим путем.
Критерием вибора КМ является минимальное значение вираження (4.1)
среди всех доступних КМ.
К счастью, оценка только по дает хорошие результати уже в том слу-
чае, когда просто вибираєм КМ с максимальним <2 (соответствует варианту
обобщенной формули при Ь = а = 0).
Можно дать следующий пример, демонстрирующий недостатки "наив-
ного" знтропийного подхода и подхода МР8-Р. Пусть ми кодируем с помо-
щью РРМ-моделирования порядка 2 последовательность алфавита {"0",
"1"}, порожденную источником с такими вероятностями генерации симво-
лов:
/>(0|00) = 0,р(1|00)=1,
р(0|Ю) =р(1|10) = 0.5.
Пусть появление строк "00" и "10" равновероятно. Если уже обработан
большой блок входной последовательности и контекст текущего символа
равен "10", то в соответствии с заданним описанием источника в КМ(2)
оценки вероятностей
0(О|1О) = 9(1|1О) = О.5,
а в КМ(1) оценки составляют
9(0|0) = 0.25, «/(І |0) = 0.75.
157
Книга написана коллективом Шір:/Лууууу.сотрге88Іоп.ги/
Методь/сжатия данньїх (7000+ файлов о сжатии)
Средняя длина кодов для КМ(2) равна
-9(0110) 1оЙ2 ^(0110) - 9(1110) 1о§2 9(1110),
что составляет 1 бит. В то же время средняя длина для КМ(1) равна
-9(0|0)1о829(0|0)-9(1|0)1о829(1|0),
что соответствует примерно 0.8 бита. Позтому, если пользуемся "наивньїм"
знтропийньїм критерием, то мм должнм вибрать для кодирования КМ(1).
Критерий МР8-Р также указмвает на КМ(1). Зтот вмбор ошибочен. Дейст-
вительно, если мьі кодируем в КМ(2), то символи "0" и "1" требуют по -
1о§2 0-5 = 1 биту. Если в КМ(1), то для кодирования "0" нужно -ІО& 0-25 =
= 2 бита, а для "1" требуется -1о§2 0.75 ~ 0.4 бита. В соответствии с приня-
тьім описанием источника вероятности появлення "0" и "1" после строки
"10" одинаковм, позтому при каждом оценивании на оснований статистики
для контекста "0" вместо статистики для контекста "10" мм будем терять в
среднем 0.5-(2-1) + 0.5-(0.4-1) = 0.2 бита.
Добавим, что известнме варианти реализации подхода ЬОЕ плохо соче-
таются в смисле улучшения сжатия с механизиом наследованием информа-
ции, так как зти техники зксплуатируют примерно одинаковне недостатки
классического алгоритма РРМ.
Наследование информации
Метод наследования информации позволяет существенно улучшить точ-
ность оценок. На конец 2001 г. имеется по крайней мере одна очень зффек-
тивная реализация РРМ, обеспечивающая високую степень сжатия типових
данньїх, в особенности текстов, в первую очередь из-за применения насле-
дования информации [1].
Метод наследования информации, предложенньїй Шкаринмм в [1], бо-
рется с неточностью оценок символов в КМ большйх порядков и основан на
очень простой идее. Логично предположить, что распределения частот сим-
волов в родительских и дочерних КМ похожи. Тогда при появлении в до-
черней КМ(о) нового символа з,- целесообразно инициализировать его счет-
чику(5/|о) некоторой величиной /°(5, | о), зависящей от информации о дан-
ном символе в родительской КМ (или нескольких контекстних моделях-
предках). Пусть в результате серии уходов ми спустились с КМ(о) на
КМ(о-£), где символ и бьіл успешно оценен. Тогда начальнеє значение
счетчика символа в КМ(о) разумно вичислять, исходя из равенства
/У,» = Л*і\о-к) (42} •
/(О) +
158
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
где | о) - наследуемая частота;/(о)- сумма частот всех символов
КМ(о), включав символ ухода; Рак.о~ сумма частот всех символов, реально
встреченньїх в контекстах порядков о-к+1.. .о.
о ( 5(лі) '
т=о-А + І\ у=І У
гдеУ(е5с|т) - частота для символа ухода в КМ(т); 8(т) - количество симво-
лов в КМ(т), не включав символ ухода.
"&Ч Упражнение. Обьясните смьісл слагаемого Р^о в вьіражении (4.2).
Вьіражение (4.2) обладает большой вмчислительной сложностью и тре-
бует существенньїх затрат памяти для организации вьічисления. Кроме того,
имеет смисл учитмвать только статистику КМ(о-А), так как все равно в
большинстве случаев к равно единице, т. е. успешное кодирование происхо-
дит в родительской КМ, если же зто не так, то скореє всего контексти по-
рядков 0-1...О-А+1 являются "молодими" и для них еще не накоплено по-
лезной статистики. Позтому на практике целесообразно использовать при-
ближенную формулу
. )=——
/(О)-І(О) + /(О-Ч-Л5,|О-І)
При самой простой реализации величина /°(х,. | о) вичисляется и при-
сваивается сразу при создании нового счетчика в КМ(о). Но можно отло-
жить наследование частоти до следующего появлення символа 5, в зтом
контексте порядка о. Вероятнее всего, к тому времени родительская КМ бу-
дет обладать большим обьемом статистики, что должно дать более точную
оценку /°(5, | о) и в конечном итоге улучшить сжатие. Такое "отложенное"
наследование требует повторного поиска родительской КМ и символа 5/ в
ней, что может существенно замедлить обработку.
В зависимости от порядка модели, особенностей реализации и собствен-
но сжимаемьіх даннмх наследование информации позволяет улучшить сжа-
тие примерно на 1-10%. Типичной является цифра порядка 2-4%.
Заключение. Существующие реализации компрессоров, использующих
механизм наследования информации, обеспечивают лучшее сжатие, чем
компрессорьі с ЬОЕ.
159
Книга написана коллективом К((р:/Лу\у\у.сотрге‘і‘ііоп.і'и/
Методьі сжатия данньїх (7000+ файлов о сжатии)
Различньїе способьі повьішения точности предсказания
Масштабирование счетчика последнего встреченного символа
Если в последний раз в текущем контексте бьіл встречен некий символ х,
то вероятность того, что и текущий символ также 5, вьірастает, причем час-
то значительно. Зтот факт позволяет улучшить предсказание за счет умно-
ження счетчика последнего встреченного символа (ПВС) на некий.козффи-
циент. Судя по всему, впервьіе такая техника описана в [15], где она нази-
вается гесепсу зса1іп§" - масштабированием новизни.
Техника бьіла исследована М. А. Смирновьім при разработке компрессо-
ра РРМЬІ. По состоянию на 2001 г. неизвестньї другие программьі сжатия,
использующие гесепсу 8са1іп§.
В большинстве случаев хорошо работает множитель 1.1-1.2, т. е. при та-
ком значений наблюдается улучшение сжатия большинства файлов и мало-
вероятно ухудшение сжатия какого-то "привередливого" файла. Но часто
оптимальная величина,масштабирующего козффициента колеблется в рай-
оне 2-2.5, так что можно улучшить оценку за счет адаптивного изменения
множителя. Подходящее значение вмбирается на основе анализа сжимае-
ммх данньїх с помощью змпирически полученньїх формул. Исследования
показали, что величина наблюдаемой частоти совпадения последнего
встреченного и текущего символов в недетерминированних контекстах по-
зволяет подбирать козффициент с хорошей точностью.
Для повишения точности оценки также следует учитивать расстояние
между текущей позицией и моментом последней встречи текущего контек-
ста. Если расстояние больше 5000 символов, то скореє всего масштабирова-
ние счетчика ПВС только повредит. Но следует понимать, что учет зтой ха-
рактеристики требует существенних затрат памяти.
Рассмотрим реализацию простейшего алгоритма гесепсу зса1іп§ на при-
мере нашего компрессора Пшпшу.
В описание структури КМ внесем поле Іазс, описивающее ПВС для за-
данного контекста.
зСгисС Соп£ехі:Мосіе1 (
іпЬ езс,
ТоСГг,
1аз£;
іпї соипії [256] ;
};
Значение Іазі будем вичислять как сумму номера символа и 1, для того
чтоби нулевое значение Іакі указивало на отсутствие необходимости вьі-
160
ййр:/Лууууу.сошрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
полнять масштабирование. В начале работьі программьі Іазі будет равно ну-
лю, так как ст является глобальной переменной.
В начало функций епсоде зут и бесоде зут добавим действия по ум-
ноженню счетчика ПВС на постоянньїй козффициент 1.25.
іпЬ асісііХіоп;
і£ (СМ->1азС) {
асІсІіСіоп = СМ->соип1і [СМ->1аз£-1]>>2;
СМ->соипГ[СМ->1аз£-1] += аддіСіоп;
СМ->ТоСГг += аскііліоп;
}
Кроме того добавим сразу же после вьізова методов АС.епсобе и
АС.сіесосІеирсіаїе условньїе оператори, исправляющие значення счетчиков
на первоначальние.
і£ (СМ->1аз£){
СМ->соип£ [СМ->1аз1і-1 ] -= асісііЬіоп;
СМ->То£Гг -= асісіііііоп;
}
И, наконец, обеспечим правильнеє обновление Іазі в функции ирсіаіеіпосіеі.
і£ (!з£аск[8Р]->соипС[с])
зііаск [ЗР]->езс += 1;
еізе зЬаск[ЗР]->1азї - с+1;
Обращаем внимание, что необходимо контролировать величину асМіііоп,
так как масштабирование может привести к переполнению в арифметиче-
ском кодере. Ми не реализовали зту проверку лишь с целью упрощения
описання.
Описанная модификация компрессора позволяет улучшить степень сжа-
тия Са1§СС примерно на 0.5%. Но оптимальная величина козффициента
масштабирования существенно меняетея от файла к файлу. Так, например,
для файла ОЬ]2 максимальнеє улучшение сжатия - на 6% - било отмечено
при козффициенте 4.
Вьівод. Масштабирование счетчика последнего встреченного символа
(гесепсу 8са1іп§) позволяет улучшить сжатие в ереднем лишь на 0.5-1%, но
может дать существенньїй вьіигрьіш при обработке данньїх, статистические
характеристики которьіх подверженьї частим изменениям.
Масштабирование в детерминированньіх контекстах
Известно, что методи ОВУ А, В, С и, в меньшей степени, другие рас-
смотренньїе априорньїе методи назначают завьішенную вероятность ухода
из детерминированньіх контекстов [15]. Зто можно исправить, умножая
161
Книга написана коллективом 1ійр:/Лууууу.сотрге88Іоп.ги/
Методи сжатия данньїж(7000+файлов о сжатии)
счетчик единственного символа на определенньїй козффициент. Такой при-
ем бьїл впервьіе описан в [15] под наименованием "деіегтіпізііс зса1іп§" -
"детерминистического масштабирования". Нетрудно заметать, что зтот м<
ханизм єсть частньїй случай гесепсу 8са1іп§.
Зффект от сіеіегтіпізііс зса1іп§ увеличивается, если при зтом используе^-
ся частичное исключение при обновлений, а не обьічное исключение поі
обновлений [15].
Пеіеппіпізбс зса1іп§ имеет смьісл применять только в сочетании с апрі-
орними методами ОВУ, ведь чем точнеє вьічисляется вероятность уходг.
тем пользьі от зтого масштабирования меньше.
УВЕЛИЧЕНИЕ ТОЧНОСТИ ПРЕДСКАЗАНИЯ НАИБОЛЕЕ ВЕРОЯТНЬІХ
СИМВОЛОВ
Контексти большой длиньї встречаются редко, и статистика, набираемая
в соответствующих КМ, обьічно является недостаточной для получения на-
дежной оценки даже в случае использования механизма наследования ин-
формации. Наиболее негативно зто проявляется при предсказании наиболее
вероятних символов (НбВС) и наименее вероятнмх символов (НмВС), так
как нахождение их истинной частоти требует большого числа наблюдений.
Очевидно, что при зтом основную избиточность кодирования ми вносим
из-за неточной оценки не НмВС, а НбВС в силу их более частой встречае-
мости.
В зтих случаях естественнмм является учет информации родительской
КМ, что можно рассматривать как переход от неявного взвешивания к яв-
ному.
Под НбВС будем здесь понимать символи с оценками вероятностей
р(5і\о)>р(зтр!\о)/2, где р(зтр5\о) соответствует самому вероятному символу
(тозі ргоЬаЬІе зутЬої) зтр! в текущей КМ. Частоти НбВС будем корректи-
ровать, если У(о) < До-1). В зтих случаях КМ(о) "молода" и частота
Д5,|о) символа з, еще, как правило, меньше частоти Дї,[о-1). Уточненное
значение ЛкоррСФ) счетчика представляет собой среднее взвешенное/(5,|о)
и "приведенной" частоти /'(^ | о -1):
/(0)-/(5,.|0) + /(0-1)-/'(5,.|0-1)
/(о) + /(О-1)
где /'<5, |о~1) = /(5. |о-1) — - •
/(о -1) -Дз, І о-І)
В случае использования наследуемнх частот аналогичную коррекцию
имеет смисл применять при наследовании.
162
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методи сжатия без потерь
Очевидно, что степень сжатия сильно зависит от точности предсказания
НбВС, позтому после вмполнения коррекции частоти целесообразно делать
адаптивную оценку вероятности символа по аналогии с 8ЕЕ. Назовем такую
технику 8есоп<іагу 8утЬо! Езбтаііоп (88Е) - вторичной оценкой символа.
В компрессоре РРМопяіг версии Н вторинная оценка вьіполняется для КМ с
замаскированнмми символами (КМ типа т) и недетерминированньїх КМ с
незамаскированньїми символами (КМ типа шп). Поля контекстов для 88Е
строятся следующим образом.
Для КМ типа пт:
1) частота самого вероятного символа, квантуемая до 68 значе-
ний;
2) 1-битовьій флаг, указивающий, что било произведено масштабиро-
вание счетчиков контекстной модели;
3) 1-битовнй флаг, хранящий результат сравнения порядка о текущей
КМ со средним порядком контекстних моделей, в котормх били за-
кодировани последние 128 символов;
4) І-битовьій флаг, принимающий значение 0, если 2 старших бита пре-
дидущего обработанного символа нулевие, и значение 1 в прочих
случаях (аналог поля 4 контекста ухода для КМ типа <1 в 8ЕЕ-<11);
5) 1-битовий флаг, равньїй нулю, если 2 старших бита символа зтр5 ну-
левие, и единице в остальнмх случаях (аналог поля 6 КУ для КМ ти-
падв 8ЕЕ-61).
Для КМ типа т:
1) оценка вероятности р(5тді|о), квантуемая до 40 значений;
2) 1-битовмй флаг результата сравнения средней частоти замаскиро-
ваннмх и нсзамаскированнмх символов;
3) 1-битовмй флаг, указмвающий, что только один символ остался не-
замаскированнмм;
4) аналог поля 2 контекста 88Е для КМ типа пт (см. предмдущий спи-
сок);
5) аналог поля 4 в предьідущем списке.
Техника 88Е разработана Шкаринмм и используется для уточнення
предсказания НбВС в компрессоре РРМопзіг версии Н.
Заключение. Применение 88Е к НбВС дает вмигрьші в районе 0.5-1% и
особенно полезно при сжатии неоднороднмх данньїх, т. е. либо порожденнмх
источником, бистро меняющим свои характеристики, либо состоящих из фраг-
ментов, сгенерированньїх существенно отличающимися источниками.
163
Книга написана коллективом 1ійр:/Лууууу.сотрге88Іоп.ги/
Методьі сжатия данньїх(7000+ файлов о сжатии)
ОБЩИЙ СЛУЧАЙ ПРИМЕНЕНИЯ ВТОРИЧНОЙ ОЦЕНКИ СИМВОЛА
Естественной является идея применения 88Е ко всем символам контек-
ста. Действительно, зтот прием обеспечивает существенное улучшение сжа-
тия неоднородньїх данньїх.
Рассмотрим обобщенньїй алгоритм применения 88Е подробнее1. Пусть
символи КМ хранятся в виде упорядоченного списка, так что символ с наи-
большей частотой записав первьім, т. е. имеет ранг 1. Процедура оценки
очередного символа 5 приобретает вид цепочки последовательннх оценок
альтернатив "да"/"нет": "да" - символ с текущим рангом равен 5, "нет" -
символи различаются, необходимо увеличить ранг на единицу и продол-
жить поиск. Вероятность "да" для ранга і находится как
й(о) = /ж(5,.|о),
где <75Ж(5, і о) - оценка вероятности символа с рангом і, полученная с по-
мощью 88Е после оценивания символа с рангом і-1; вьічисляется на осно-
ваний обичной оценки <7(5,. | о) и значений и/о) полей контекста для 88Е:
<7^(5, | о) = 55^(5,. | о),^1(о),и'2(о),...и/До)),
Ч'г’і І - ,_|
До) -£/<5,| о)
г = |
Например, пусть список символов текущей КМ(о) имеет вид "в", "б", "а",
"г". Если обрабатьівается символ "а", то он будет оценен посредством це-
почки ответов "нет", "нет", "да" и получит вероятность (1 - £>|(о))(1 -
-&(о))&(о).
Дальнейшее улучшение сжатия обеспечивается соединением 88Е с тех-
никой гесепсу 8са1іп§. В зтом случае символом с рангом 1 считается послед-
ний встреченннй в контексте символ (ПВС), если, конечно, он не замаски-
рован. Такая "адаптация новизни" позволяет значительно улучшить при-
способляемость модели к потоку данних с меняющимися вероятностннми
характеристиками.
Положительннй зффект обеспечивает внесение в контексти для 88Е
флагов, указьівающих на совпадение ПВС текущего контекста и контек-'
стов-предков. Аналогично присваивать ПВС ранг 1 лучше только в том слу-
чае, если он равен ПВС "ближайших" предков.
В табл. 4.7 приведено сравнение характеристик сжатия компрессора
РРМопзІг версии Н и его модификации, использующей обобщенньїй алго-
1 Алгоритм разработан и реализован Д. Шкариньїм в ноябре 2001 г.
164
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
ритм 88Е в сочетании с адаптацией новизни. В сравнении бьіли использо-
ванм файли из наборов Са!§СС и У¥ССТ. Все файли, за исключением тек-
стового Воокі, содержат неоднородньїе бинарньїе даннме или смесь текста
и бинарнмх данних. Использовались модели 64-го порядка.
Таблиця 4.7
Название файла Размер сжатого файла, байт Улучше- ниє сжа- тия, % Падение скоро- сти сжатия, раз
для версии Н для модифика- ции версии Н
Воокі 205144 203669 0.7 2.0
Рііеіуаге.сіос 112111 100454 10.4 2.5
ОЬ)2 65093 58466 10.2 2.1
О82.іпі 94218 83405 11.5 2.2
Затріев.хів 70912 64666 8.8 2.0
\Усс386.ехе 278045 255719 8.0 3.3
Вьівод. Применение 88Е ко всем символам контекста в сочетании с
адаптацией новизни значительно улучшает сжатие неоднороднмх даннмх.
Зто позволяет получать стабильно наилучшую степень сжатия по сравне-
нию с другими универсальньїми методами (ВХУТ, Ь2) при обработке файлов
самих разнообразнмх типов, а не только текстов. Ценой увеличения степе-
ни сжатия является падение скорости в 2 и более раза.
РРМ и РРМ*
При фиксировании максимального порядка контекстов в районе
5-6 РРМ даже без наследования информации дает отличнне результати на
текстах, но не очень хорошо работает на вмсокоизбмточнмх данньїх с
большим количеством длиннмх повторяющихся строк. В середине 90-х гг.
бмл предложен метод борьбьі с зтим недостатком [6]. Предложеннмй алго-
ритм, РРМ* (произносится как "пи-пи-зм ста"), бмл основан на использова-
нии контекстов неограниченной длиньї. Автори алгоритма предложили
следующую стратегию вьібора максимального порядка на каждом шаге:
максимальний порядок соответствует порядку самого короткого детерми-
нированного контекста. Под детерминированньїм понимается контекст, в
котором до данного момента встречался только один символ (любое число
раз). Если детерминированньїх контекстов нет, то вьібирается самий длин-
ний среди имеющихся. После вьібора максимального порядка процедура
оценки вероятности символа в алгоритме РРМ* ничем не отличается от
применяемой в алгоритмах обмчного РРМ, т. е. РРМ-моделирования огра-
ниченного порядка.
Реализация РРМ*, описанная в [6], имела невпечатляющие характеристики:
сжатие на уровне РРМС порядка пяти, скорость кодирования, как утверждает-
ся, также сопоставима, но памяти расходуется значительно больше. Судя по
165
Книга написана коллективом Шір:/Лууууу.сошрге88Іоп.ги/
Методи сжатия данньїх (7000+ файлово сжатии)
всему, авторам очень хотелось доказать превосходство их схеми над другими
методами РРМ, и стандартним РРМС в частности. Читатель может самостоя-
тельно сравнить степень сжатия РРМ* с другими алгоритмами РРМ, пользуясь
табл. 4.8 и 4.9.
В принципе расходьі памяти для РРМ и РРМ* могут бмть одинаковьі,
что показано в [4].
Вьівод. Преимущество подхода РРМ* над обьічньїм РРМ не очевидно.
Достоинства и недостатки РРМ
Вот уже в течение полутора десятков лет представители семейства РРМ
остаются наиболее мощнмми практическими алгоритмами с точки зрения
степени сжатия. По-видимому, добиться лучших результатов смогут только
более изощренние контекстние (в широком смисле) методи, которме, не-
сомненно, будут появляться, так как производятся все более бнстрие про-
цессорм, а обьем оперативной памяти ЗВМ становится все больше.
Наилучшие результати алгоритми РРМ показивают на текстах: отлич-
ний козффициент сжатия при високой скорости, чему наглядним примером
являются компрессорм РРМб и РРМопвіг. Кроме того, если стоит задача
максимизации степени сжатия определенних даннмх, то скореє всего РРМ-
подобнмй алгоритм будет наилучшим вибором в качестве основи специа-
лизированного компрессора.
Если вийти за рамки частной проблеми сжатия даннмх, то несомненнмм
достоинством РРМ является возможность получения хорошей статистиче-
ской модели обработанной последовательности качественннх даннмх (или
сгенерировавшего ее источника). Действительно, модель, позволяющую зф-
фективно предсказмвать неизвестнме символи сообщения, можно приме-
нять не только для сжатия, но и для решения задач коррекции текста в сис-
темах ОСК., распознавания речи, классификации типа текста, семантическо-
го анализа текста, шифрованих [18].
Недостатки реализаций подхода РРМ заключаются в следующем:
медленное декодирование (обмчно на 5-10% медленнее кодирования);
несовместимость кодера и декодера в случае изменения алгоритма оцен-
ки; в то же время алгоритми семейства Ь277 допускают серьезную мо-
дификацию кодера без необходимости исправления декодера;
медленная обработка малоизбьіточнмх данньїх (скорость может падать в
рази);
наилучшее сжатие различньїх файлов достигается при порядках модели
РРМ в районе 4-12 для моделей, не применяющих технику наследования
информации и/или ЬОЕ, и при порядках 16-32 в противном случае; по-
зтому при виборе какого-то фиксированного порядка модели мм можем
166
1Шр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
терять либо в степени сжатия, либо использовать чересчур много ресур-
сов ЗВМ;
в общем случае недостаточно хорошеє сжатие файлов, статистические
характеристики которнх подверженьї частим изменениям такого типа,
что оценки распределений вероятностей в контекстних моделях бистро
устаревают (так назнваемая нестабильность статистик контекстов); с
точки зрения такой адаптацци обичньїе алгоритми РРМ уступают алго-
ритмам типа Ь277, хотя известни способи ослаблення или вообще уст-
ранения зтого неприятного зффекта при помощи вторичной оценки сим-
вола (см. "Общий случай применения вторичной оценки символа" в под-
разд. "Различние способи повншения точности предсказания");
большие запроси памяти - десятки мегабайт - в случае использования
сложних моделей високого порядка в сочетании с симметричностью ал-
горитма препятствуют организации зффективного доступа к сжатим
данним;
заметннй проигрмш в зффективности по сравнению с алгоритмами типа
Ь277 при сжатии файлов, имеющих длинние повторяющиеся блоки сим-
волов.
Практически всегда можно подобрать и настроить такую РРМ-модель,
точнеє, контекстную модель с неявним взвешиванием, что она будет давать
лучшее сжатие, чем Ь2 или ВУ/Т. Несмотря на зто, применение РРМ-
компрессоров целесообразно главним образом для сжатия текстов на есте-
ственних язиках и подобньїх им данних, поскольку при обработке малоиз-
биточннх файлов велики временньїе затрати. Избьіточние файли с длин-
ньіми повторяющимися строками (например, тексти програми) имеет
смисл сжимать с помощью В\УТ-компрессоров и даже словарних компрес-
соров, так как соотношение сжатие-скорость-память обично лучше. Для
сильно избьіточньїх данньїх предпОчтительнее все-таки использовать РРМ,
так как методи Ь2 и В\УТ, особенно не использующие предобработку, ра-
ботают при зтом сравнительно медленно из-за деградации структур данних.
Характеристики алгоритмов семейства РРМ:
Степени сжатия: определяются данними, для текстов обично 3-4, ;
для обьекгних файлов 2-3.
Типи данньїх: алгоритми универсальни, но лучше всего подходят
для сжатия текстов.
Симметричность: близка к единице; обично декодер немного мед- і
леннее кодера.
Характерньїе особенности: медленная обработка малоизбиточних
данних.
167
Книга написана коллективом 1Шр:/Лууууу.сотрге88Іоп.ги/
Методи сжатия данньїх (7000+ файлов о сжатии)
Компрессорьі и архиваторьі, использующие
контекстнеє моделирование
НА
Программа НА явилась, пожалуй, первьім публично доступним архива-
тором, использующим контекстное моделирование. Не исключено, что НА
стал бьі очень популярним архиватором, если бм его автор, Гарри Хирвола
(Нігуоіа), не прекратил работать над проектом.
В НА реализованм алгоритм семейства ЬХ77 и алгоритм типа РРМ.
Алгоритм РРМ представляет собой хорошо продуманную модификацию
классического РРМС. Метод ОВУ является априорнмм и основмвает оцен-
ку ухода из КМ на количестве имеющихся в ней символов с небольшой час-
тотой. ЬОЕ не производится, последовательность спуска с КМ високих по-
рядков является обмчной. Максимальний порядок КМ равен четмрем, ми-
нимальнмй- минус единице. Для организации поиска КМ применяютея
хеш-цепочки. Хеширование осуществляется по символам контекста и его
длине.
Результати тестирования на Са1§СС, представленнме в табл. 4.8, полу-
ченм для версии 0.999с. Сжатие файлов осуществлялось с помощью метода
2 программм, котормй как раз и соответствует РРМ.
Архиватор разрабатмвалея для работьі в М8 008, и размер используе-
мой памяти ограничен примерно 400 Кб, что, вообще говоря, мало для мо-
дели 4-го порядка, позтому сжатие можно существенно улучшить за счет
увеличения обьема доступной памяти.
СМ
СМ Булата Зиганшина (Хі^апзЬіп) является компрессором, применяю-
щим блочно-адаптивное контекстное моделирование.
Алгоритм работн кодера следующий. Читается блок входних данньїх, по
умолчанию до 1 Мб, и на оснований его статистики строится модель задан-
ного порядка N. Модель сохраняется в компактном виде в виходном файле,
после чего с ее использованием кодируется сам считанний блок данних. За-
тем, если еще не весь входной файл обработан, производятея аналогичнне
действия для следующего блока и т. д.
Идея построения модели заключаетея в следующем:
первоначально строится модель порядка N. содержащая статистику для
всех встреченннх в блоке контекстов длиной ОТ 0 ДО N
из модели удаляютея контекстние модели и ечетчики символов с часто-
той меньше порога/ті„, являющегося параметром алгоритма.
168
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Дерево оставшихся КМ записьівается в вьіходной файл, при зтом описа-
ння символов и их частот в определенньїх КМ сжимаются на оснований ин-
формации КМ-предков.
Оценка вероятности ухода из КМ при кодировании самих данньїх зави-
сит от количества ее дочерних КМ, удаленньїх при "прочистке" модели.
Собственно алгоритм оценки вероятности символов не отличается от клас-
сического РРМ.
Программа написана достаточно давно и не отвечает современнмм тре-
бованиям на соотношение скорости и степени сжатия. Тем не менее СМ де-
монстрирует интересньїй подход и при соответствующей доработке практи-
ческое использование такой техники может бьіть целесообразно.
Характеристики степени сжатия компрессора, приведенньїе в табл. 4.8,
бьіли полученм при запуске программьі с параметрами -о4 и -ш10000000,
т. е. бьіл задан порядок N = 4, а максимальний обьем памяти для хранения
модели бьіл увеличен с 5 Мб, используеммх по умолчанию, до 10 Мб, что
обеспечило отсутствие переполнения при обработке всех файлов Са1§СС.
ЯК и ЯКІІС
С точки зрения козффициента сжатия разрабатьіваемьій Малькольмом
Тейлором (Тауіог) архиватор КК является одним из лучших среди сущест-
вующих на момент написання зтой книги. Но достигается зто не столько за
счет очень хорошого РРМ-компрессора, сколько благодаря большому коли-
честву применяемьіх техник предварительного преобразования даннмх, по-
зволяющих значительно улучшить сжатие файлов определенньїх типов.
Именно грамотно реализованньїй препроцессинг и позволяет показмвать
КК стабильно хорошие результати при сжатии таких типових данньїх, как
обьектние файли, файли ресурсов, документи М8 5¥опі и таблицьі М8 Ех-
сеі, тексти на английском язьіке.
В КК реализовано два алгоритма: статистический типа РРМ и словарнмй
типа Зива - Лемпела. В качестве РРМ-компрессора в КК применяется об-
легченннй вариант программи ККІІС, созданной также Тейлором.
С учетом сказанного ми исключили КК из таблицн сравнения контекст-
них компрессоров по степени сжатия (табл. 4.8).
ККІІС реализует контекстное моделирование с максимальним порядком
16. Порядок КМ может бить равен 16, 12, 8, 5, ..., 0 и, вероятно, -1. Иначе
говоря, в ККІІС используется отличающийся от классического механизм
вьібора порядка следующей КМ в случае ухода. В дополнение к зтому в за-
висимости от параметров вьізова программи может виполняться ЬОЕ.
Еще одна из опций компрессора разрешает использовать при оценке ве-
роятности статистику, накопленную для разбросаннмх (зрагзе) контекстов,
169
Книга написана коллективом 1іНр:/Лууууу.сотрге88Іоп.пі/
Методи сжатия данньїх(7000+ файлов о сжатии)
или бинарньїх (Ьіпагу) в терминологии автора компрессора. Идея заклю-
чается в том, что несколько обьічньїх контекстов одинаковой длиньї могут
спитаться одним контекстом, если в определенньїх позициях их символи
одинаковьі. Например, если для контекстов длиньї 4 требуется совпадение
первого1 (последнего обработанного), второго и четвертого символов, то
строки "абсд" и "аасд" являются одним и тем же разбросанним контекстом
"аХсд", где X - любой символ. Таким образом, техника разбросанньїх кон-
текстов заключается в обьединении информации, собираемой для несколь-
ких классических контекстов. Применение зтого механизма часто позволяет
заметно улучшить сжатие блоков данньїх с регулярной структурой.
В КК.ІІС применяется улучшенньш вариант адаптивной ОВУ по методу 2.
При тестировании использовался ЯК17С версии 1.04, которнй запускай-
ся с параметрами -шЮ -о 16 -х -Ь, т. е. использовалась модель 16-го порядка,
ограниченная 10 Мб памяти, и бьіли включеньї механизмьі ЬОЕ и разбро-
санньїх контекстов. Если отказаться от использования разбросанньїх кон-
текстов, то степень сжатия текстових файлов улучшается примерно на 1 %,
а бинарньїх (Оео, ОЬ]1, ОЬ)2) - ухудшается на несколько процентов.
РРМИ
Компрессор РРМИ разработан Максимом Смирновьім (Зтігпоу) в зкс-
периментальньїх целях. Основная цель разработки состояла в создании
РРМ-компрессора, обеспечивающего степень сжатия на уровне компрес-
соров, использующих разновидности алгоритма РРМ2, и значительно более
високую скорость кодирования при меньших ограничениях на обьем ис-
пользуемой памяти.
В РРМИ реализован алгоритм РРМ с ограниченним порядком контек-
стов. Максимальний порядок N модели равен 7, но также реализовани ва-
рианти модели с "псевдопорядками" 8 и 9, при которнх каждой КМ(У), N ~
= 8-9, в действительности может соответствовать несколько контекстов по-
рядка N. Иначе говоря, осуществляется смешивание статистики, набираемой
для нескольких похожих контекстов.
Для ОВУ используется адаптивний механизм, которнй можно рассмат-
ривать как упрощенний метод 2. Используется только один тип контекста
ухода, поля которого определяются:
порядком КМ;
количеством просмотров КМ;
количеством символов в КМ;
последним обработанним символом;
1 Символи контекста обьічно нумеруются справа налево, позтому первьш сим-
вол контекста соответствует последнему обработанному.
170
КНрі/Луууху.сотргекіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
І -битовьім флагом, указивающим на то, что при кодировании строки по-
следних обработанньїх символов заданной длиньї £ = 16 ни разу не про-
исходил уход.
Если предьідущий символ бьіл закодирован в КМ меньшего порядка, чем
у текущей рассматриваемой, или величина оценки вероятности ухода зна-
чительно меньше вьічисленной для предидущего символа, то производится
увеличение оценки. Обновление счетчиков контекстной модели уходов
имеет следующую специфику: если рассматривается КМ максимального по-
рядка среди имеющихся активних, т. е. не производился уход, то шаг уве-
личения счетчиков КМУ имеет вес 4, иначе - 1. Как показьівают зкспери-
ментьі, используемая схема превосходит метод 2 по точности ОВУ и при
зтом требует меньших вмчислительних затрат.
Как и в компрессоре ККОС, последовательность вьібора порядка кон-
текстной модели в случае ухода отличается от классической - часть поряд-
ков просто не используется. Например, при N = 5 РРМ-модель состоит из
контекстних моделей 5, 3, 2, 1, 0, -1 порядков, позтому в случае ухода из
КМ(5) рассматривается КМ(3). Такой прием позволяет ускорить обработку,
а уменьшение степени сжатия либо незначительно, либо, наоборот, наблю-
дается ее увеличение.
Как уже упоминалось ранее, в РРМК используется масштабирование
счетчика последнего встреченного символа. Улучшению сжатия неоднород-
нмх файлов также способствует ограничение на количество КМ порядков 1
и 2, приводящее к интенсивному обновленню отих КМ - статистика
не используемих дольше всего контекстов просто удаляется.
В РРМ1Ч применяется упрощенний способ наследования информации:
при добавлений символа в КМ(о) начальнеє значение его счетчика опреде-
ляетея частотой символа в той КМ(о-£), к > 0, в которой он бмл закодиро-
ван. Механизм инкремента счетчиков соответствует обичному исключению
при обновлений.
По аналогии с НА в качестве структури данньїх для доступи к КМ ис-
пользуютея хеш-цепочки. Для ускорения поиска контекстних моделей каж-
днй сцмвол КМ(У) имеет внешний указатель на КМ(А), соответствующую
следующему символу обрабативаемого потока.
РРМИ содержит механизми предварительной обработки текстов на анг-
лийском и русском язиках и исполнимих файлов для процессоров типа Іпіеі
х86 (см. гл. 7). Кроме того, имеютея средства кодирования таблиц 8-, 16- и
32-битових злементов, а также кодирования длин повторов (КЬЕ). Пара-
метри 8ЕЕ, механизмов наследования информации и обновлення счетчиков
настроени на обеспечение наилучшей степени сжатия в режиме обработки
текстов с использованием средств препроцессинга.
171
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.пі/
Методи сжатия данньїх (7000+ файлов о сжатии)
В табл. 4.8 указаньї результати тестирования РРМИ версии 1.00 Ьеіа 1
в режиме сжатия без использования предварительной обработки (опция -ба
компрессора). Порядок модели равнялся 6 (опция -об), а ее размер бьіл
ограничен 20 Мб.
РРМо и РРМоизтв
Программи РРМсі и РРМопзІг Дмитрия Шкарина (ЗЬкагіп) реализуют
разработаннне им же алгоритми РРМП и сРРМІІ (сотріісаіеб РРМІІ, т. е.
"усложненннй" РРМІІ) [1]. Оба компрессора используют механизм насле-
дования информации. В РРМсі применяется адаптивний метод ОВУ 8ЕЕ-СІ1,
а в РРМопзіг - 8ЕЕ-62. Кроме зтого отличия, в РРМопзіг реализовано не-
сколько дополнительннх приемов улучшения сжатия, основними из кото-
рьіх являются отложенное наследование и улучшение точности предска-
зания наиболее вероятннх символов.
РРМІІ является одним из алгоритмов, используемнх в архиваторе КАК.
версии 3.
В тестировании били использовани версии Н компрессоров. РРМсі за-
пускайся с опцией -о8, а РРМопзіг- с опцией -оі, что соответствует моде-
лям 8-го и 64-го порядка. Максимальний размер модели бьіл ограничен
20 Мб (параметр -т20) в обоих случаях, что предотвратило сброс статисти-
ки модели, осуществляемьій при полном заполнении внделенного обьема
памяти.
РРМ¥
РРМУ является зкспериментальннм компрессором, разрабативаемьім
Евгением Шелвиньїм (8йеі\уіеп). Данная программа относится к немного-
численному классу компрессоров, использующих полное смешивание.
При обработке каждого символа производится смешивание оценок рас-
пределений вероятностей из КМ всех доступних порядков от некоторого N
до -1. Величина N ограничивается сверху значением одного из параметров
программи. Если позволяет данное ограничение, то в качестве КМ макси-
мального порядка внбирается КМ с самим длинньїм контекстом, ранее
встречавшимся по крайней мере один раз. Компрессор осуществляет моде-
лирование на уровне байтов, позтому КМ(-1) содержит счетчики для всех
256 возможньїх символов; значение каждого счетчика равно единице. Кроме
счетчиков встречаемнх в ее контексте символов, каждая КМ(о) содержит
еще две переменние:
число символов в контексте; будем обозначать здесь какДе5с|о); приня-
тое обозначение характеристики обусловлено тем, что ее значение сов-
падало би с количеством уходов из КМ(о), если би ми имели дело
с обичньїм алгоритмом РРМ;
172
ййр://луту.сотрге88Іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
число случаев, когда вероятность обрабатьіваемого символа в данной
КМ(о) бьіла максимальной по сравнению с прочими контекстними мо-
делями; обозначим как Орі(р).
Оценки вероятности символа, даваемьіе разнмми КМ некоторого поряд-
ка о, взвешиваются с помощью адаптивно вьічисляемьіх весов м>0. Процеду-
ру нахождения можно описать следующим образом:
= шіп(/(о),£Г)-/(єус|о)
/(о)
г0"'» - о^+Зр'О?))
0 м'(ор') +До) ’
И-, = +(1 _ *,(£)}. ^(«е) . ^«>/>0,
гдеДо) - общее количество просмотров соответствующей КМ(о); ЕТ, и'(чр,\
и/° - некоторьіе параметри.
Козффициентам и можно дать такую упрощенную интер-
претацию:
Ц/"с> _ зт0 вероятность того, что символ присутствует в текущей
КМ(о), или, в терминах классического РРМ, вероятность того, что ухода
не будет;
_ зт0 вероятность того, что именно данная КМ(о) имеет макси-
мальную оценку вероятности текущего символа.
Алгоритм нахождения значений параметров ЕТ, и'(£), обеспечи-
вающий хороший козффициент сжатия, бмл получен змпирическим путем,
и результати вичислений сведенн в таблици. Для каждой КМ(о) величини
параметров вьібираются из соответствующей таблици по адресу, опреде-
ляемому значением пари {о,
Вообще говоря, в версии РРМ¥ ЗЬ используется до 120 специально по-
добранньїх параметров. Возможно, использование других функций по-
строения весов позволит уменьшить количество параметров без ущерба для
степени сжатия.
В табл. 4.8 приведенні результати сжатия набора файлов Са!§СС для
РРМУ версии ЗЬ. Кодер запускался с опцией /о64.
Производительность натестовом наборе Саюаяу
СОМРКЕ85ІОМ СОКРІІ8
Все рассмотренньїе компрессорм и архиваторм били протестировани на
наборе Са!§СС, описанном в Введений в подразд. "Сравнение алгоритмов
173
Книга написана коллективом 1Шр:/Лууууу.сотрге88Іоп.ги/
(7000+ файлов о сжатии)
Методьі сжатия данньїх
по степени сжатия". Для сравнения добавленьї характеристики тривиально-
го компрессора Витту, на примере которого мьі обьясняли идею РРМ.
В таблице указаньї степени сжатия отдельньїх файлов набора, средняя
степень сжатия, общее время кодирования Ткод и декодирования Тдек. Сред-
няя степень вичислилась как средняя не взвешенная по размеру файлов сте-
пень сжатия. Для Т,(0Я и Тдек за единицу принято время сжатия всего Са1§СС
компрессором РРМб. Чтобьі внести ясность, заметим, что единица пример-
но соответствует скорости кодирования 700 Кб/с для ПК с процессором ти-
па Репіішп III 733 МГц.
Таблица 4.8
Пилипу СМ НА РРМ¥ ККІЮ РРМИ РРМй РРМопзіг
ВіЬ 2.31 3.01 4.12 4.55 4.55 4.57 4.62 4.76
Ьоокі 2.22 2.99 3.27 3.72 3.62 3.64 3.65 3.74
Ьоок2 2.12 3.19 3.74 4.35 4.30 4.31 4.35 4.49
(Зео 1.68 1.74 1.72 1.74 2.12 1.96 1.84 1.92
1.92 2.52 3.05 3.60 3.57 3.58 3.62 3.74
оЬ і 1 1.76 1.69 2.19 2.09 2.25 2.32 2.26 2.29
оЬ.І2 1.94 2.32 3.07 3.46 3.79 3.65 3.62 3.79
Рарегі 2.08 2.37 3.39 3.59 3.51 3.59 3.65 3.74
Рарег2 2.20 2.61 3.43 3.67 3.57 3.62 3.67 3.77
Ріс 9.41 9.30 10.00 10.26 10.67 11.01 10.53 11.43
Рговс 2.06 2.27 3.36 3.51 3.45 3.54 3.60 3.70
Рго£І 2.40 3.07 4.68 5.30 5.37 5.26 5.44 5.76
Рговр 2.36 2.99 4.71 5.33 5.30 5.19 5.26 5.76
Тгапз 2.28 2.96 5.23 6.35 6.40 6.17 6.35 6.84
Итого 2.62 3.07 4.00 4.39 4.46 4.46 4.46 4.70
т жіеол 0.5 2.4 3.0 14.6 6.5 1.9 1.0 2.3
т 1 дек 0.6 0.8 3.1 15.6 6.7 2.0 1.0 2.4
Другие архиваторьі и компрессорьі
Существует множество компрессоров, применяющих контекстное моде-
лирование, которме не бьіли охваченьї данньїм обзором. Отметим следую-
щие архиваторьі:
ВОА, автор Ян Саттон (ЗиПоп);
АКНАНОЕЬ, автор Юрий Ляпко (Ьуарко);
БОНА, являющийся реализацией архиватора НА на язмке Ассемблера,
вьіполненной Юрием Ляпко;
ІІНАК.С, автор Уве Херклоц (Негкіоіх);
XI, автор Стиг Валентини (Уаіепііпі),
а также компрессор РРМ2, автор Чарльз Блум (Віоот).
174
К((р://уууууу.сотргеззіоп.ги/ (7000+ файлов, 850Мб о сжатии)
_____________________________________Раздел 1. Методи сжатия без потерь
Обзор классических алгоритмов контекстного
моделирования
ЬОЕМА
Судя по всему, впервьіе алгоритм контекстного моделирования бьіл реа-
лизован в 1982 г. Робертсом (КоЬегіз) [2]. Автор назвал свой алгоритм Ьосаі
Огдег Езіітаііоп Магкоу Апаїузіз (марковский анализ посредством оценива-
ния локального порядка). В ЬОЕМА используется полное смешивание оце-
нок КМ различного порядка, при зтом веса представляют собой значення
уровня доверия к оценке в том смисле, как зто понимается в математиче-
ской статистике. Сравнение степени сжатия ЬОЕМА с другими алгоритма-
ми затруднено, так как, с одной сторони, программа, реализующая алго-
ритм, не стала публично доступной и, с другой сторони, файли, на которих
Робертс доказнвал зффективность своего подхода, также недоступнн.
Имеются сторонние отчети, по которнм ЬОЕМА обеспечивает компрессию
примерно на уровне РРМС (см. табл. 4.9) при значительно меньшей скоро-
сти, что виглядит вполне правдоподобно. Судя по всему, ЬОЕМА Робертса
позволял только оценивать, но не сжимать, т. е. вмполнял исключительно
статистическое моделирование.
□АРС
Алгоритм ОоиЬІе-АбарІіуе Рііе Сотргеззіоп (дваждм адаптивное сжатие
файлов), разработанний Лзнгдоном (Ьап§<іоп) и Риссаненом (Кіззацеп) в
1983 г., сиграл серьезную роль в развитии контекстних методов [2]. Во-
первих, в нем впервие, если не считать ЬОЕМА, била реализована идея
разделения процесса кодирования на моделирование и статистическое ко-
дирование, а также идея одновременной адаптации структури модели (т. Є.
набора КМ) и частот символов. Во-вторих, простота алгоритма обеспечива-
ла возможность его реального применения при относительно скромних
возможностях вьічислительной техники 80-х гг. В-третьих, ОАЕС полюбил-
ся научннм работникам, охотно использовавшим его результати для срав-
нения при написаний статей.
В ОАЕС используются контекстная модель 0-го порядка и п контекст-
них моделей 1-го порядка. В начале сжатия используется КМ(0), в которой
все символи алфавита обрабатьіваемой последовательности имеют отлич-
ние от нуля счетчики. По мере хода кодирования КМ(1) создаются только
для первих п символов, встретившихся в уже обработанном блоке т раз. Из
соображений зкономии памяти автори предлагали использовать л = 31 и
т = 50. Далее если текущий символ встречается в контексте С и для зтого
контекста существует КМ(1), то производится попьітка закодировать сим-
175
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.ги/
Методи сжатия данньк(7000+ файлов о сжатии)
вол в ней, иначе вьідается символ ухода с вероятностью, оцениваемой по
методу А, и символ кодируется в КМ(0).
В ВАГС также применяется кодирование длин повторов (КЬЕ), кото-
рое "запускается" при встрече последовательности из трех одинаковьіх
символов.
Упражнения: Сравните ОАЕС с алгоритмом работьі компрессора Оитту. Если
пренебречь РІЕ, то какие изменения следует внести в Оитту, чтобьі получить
реализацию ОАЕС?
Пользуясь приведенньїми в тексте таблицами, сравните ОАЕС и Оитту по
степени сжатия файлов набора СаІдСС (см. табл. 4.8 и 4.9).
АОЗМ
Алгоритм Адарііуе Верепдепсу Зоигсе Мосіеі (модель источника с адап-
тирующейся зависимостью) Абрахамсона (АЬгаЬатзоп) представляет собой
образец интересного подхода к реализации идеи контекстного моделирова-
ния [2]. Здесь осуществляется чистое контекстнеє моделирование 1-го по-
рядка, но собственно оценка строится на оснований только одного распре-
деления частот, общего для всех КМ. Достигается зто следующим образом.
В каждой КМ(1) счетчики символов хранятся в виде упорядоченного по ве-
личине частот списка. Счетчики ранжируются так, что символ с наиболь-
шей частотой имеет наименьїпий ранг 1, а с наименьшей частотой - наи-
больший ранг. При обработке текущего символа находится его ранг (зто
может бьіть просто номер символа в упорядоченном списке символов теку-
щей контекстной модели) и оценка определяется частотой использования
зтого ранга. Частоти рангов изменяются после кодирования каждого сим-
вола. Таким образом, статистическое кодирование осуществляется не на ба-
зе частоти символа, а на оснований количества появлений символов с соот-
ветствующим рангом частоти. Рассмотрим сжатие строки "молоч-
ноемолоко" начиная с отмеченного на рисунке стрелкой символа.
м 0 л 0 ч н 0 е м 0 л 0 к 0
В контексте "м" реально встречался только один символ "о", соответст-
вующий текущему, позтому ми кодируем "о", опираясь на частоту/г(1) ис-
пользования ранга 1. Затем /г(1) обновляется какУ?(1)++. Следующий сим-
вол, "л", кодируется в контексте "о". Соответствующая КМ(1) содержит З
реально наблюдавшихся символа - "л", "ч", "е". Если принять, что в случае
одинаковости частот наименьший ранг имеет последний встреченний сим-
176
К((р:/Лу\у\у.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
вол, то "л" кодируется на базе частоти /г(3) применения ранта 3. Произво-
дится обновление#(3)++ и переход к обработке следующей букви, "о".
Ни разу не встреченньїе в соответствующей КМ(І) символи, т. е. имею-
щие нулевую частоту, не трактуются как особий случай, им также присваи-
вается какой-то ранг.
Били исследованьї расширения алгоритма АО8М для 2-го и 3-го поряд-
ков [9]. Результати зкспериментов показивают, что, в отличие от многих
других классических алгоритмов контекстного моделирования, АО8М ак-
туален и по сей день, так как обеспечивает хорошеє соотношение скорости
работм, обьема используемой памяти и козффициента сжатия. Так, напри-
мер, техника АО8М использована в программе сжатия изображений без по-
терь ВМР, являющейся одной из лучших в своем классе.
Упражнение. Сожмите строку с самого начала, найдите действительньїе зна-
чення й(1) и й(3), используемьіе при кодировании *о" и "л" в примере.
ОНРС
Техника Оупатіс-Нізіогу Ргєсіісііує Сотргеззіоп (сжатие на основе пред-
сказания по динамической истории), предложенная Уильямсом (МПіашз),
интересна в сравнении с ОАРС как использующая иной способ ограничения
роста модели. В зтом алгоритме происходит создание КМ(о), только если
родительская КМ(о+1) достаточно часто использовалась. Если представить
контекст дочерней КМ в виде сцепления (конкатенации) аС какого-то сим-
вола а и контекста С родительской, в случае классического ОАРС являюще-
гося пустой строкой, то можно дать такую сравнительную характеристику.
В ОАРС образование дочерней КМ возможно в случае превьішения часто-
той появлення образующего контекст символа "а" заданного порога, а в
ОНРС - при превьішении порога частотой появлення родительского контек-
ста С, т. е. только "заслуженнне" КМ могут иметь "детей".
При исчерпании доступной памяти рост модели ОНРС прекращается,
далее возможна адаптация только за счет изменения счетчиков символов.
Благодаря использованию КМ ббльших порядков ОНРС дает лучшее
сжатие, чем ОАРС, но уступает по зтому показателю классическим пред-
ставителям семейства РРМ (РРМС и РРМО).
Алгоритми РРМА и РРМВ
Алгоритми РРМА и РРМВ являются самими ранними среди представи-
телей семейства РРМ [5]. Они били предложени авторами техники РРМ
одновременно в одной и той же статье и могут рассматриваться как единст-
венние "чистокровние" РРМ.
177
Книга написана коллективом К((р:/Лу\у\у.сотрге‘і‘ііоп.і'и/
Методьі сжатия данньїх (7000+ файлов о сжатии)
В РРМА и РРМВ применяется ОВУ по методам А и В соответственно.
После кодирования символа производится полное обновление счетчиков.
Значення счетчиков символов не масштабируются, что требует достаточно
больших счетчиков (авторьі алгоритмов использовали 32-битовме).
«ОКО
Алгоритм \УОКО бьіл создан Моффатом (Мойаі) в конце 80-х гг. специ-
ально для сжатия текстов и является ярким представителем особого семей-
ства контекстньїх методов.
В алгоритме используются КМ не только для символов, но и для после-
довательностей (строк) конечной длиньї. Весь алфавит сжимаемого блока
делится на "буквьі" и "не-буквьі". Последовательность букв назьівается
"словом", а не-букв - "не-словом". Для оценивания применяются КМ 1-го и
0-го порядка, при зтом буква предсказьівается буквой, а слово - словом,
аналогично для не-букв и не-слов. Если обрабатьіваемое слово ни разу не
встречалось в КМ(1) для слов, то производится уход на уровень КМ(0); если
же и там оценивание невозможно, т. е. такая строка встретилась впервьіе, то
слово передаетея как последовательность букв. Для зтого сначала кодирует-
ся длина слова, а затем составляющие его буквьі с использованием КМ пер-
вого, нулевого и минус первого порядков. При оценке вероятностей букв
используется техника уходов. Обработка не-слов и не-букв осуществляется
аналогично. Таким образом, в ЖЖО используется всего 12 типов КМ: 1-го
и 0-го порядка для слов (не-слов), 1-го, 0-го и -1-го порядка для букв (не-
букв), 0-го порядка для длин слов (не-слов).
Длина слова (не-слова) ограничиваетея 20 символами. Как и в случае
ОНРС, при достижении моделью заданного размера удаление всей структу-
рьі или ее части не производится, просто прекращаетея рост.
Сравнение алгоритмов контекстного моделирования
В табл. 4.9 представлень! сведения о степени сжатия файлов набора
СаІ^СС компрессорами, реализующими соответствующие алгоритми кон-
текстного моделирования. В первой строке указано название алгоритма, во
второй, по необходимости, порядок использованной модели - строка "о-А"
указмвает, что использовалась модель порядка N. В строке "Итого" указана
ередняя не взвешенная по размеру файлов степень сжатия всего Са1§СС.
Алгоритм сРРМІІ реализует механизм наследования информации и ис-
пользует 8ЕЕ-д2. Описание прочих алгоритмов бьіло дано вьіше.
178
1іІІр:/Лулулу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Таблици 4.9
АОЗМ ОАЕС МОРЮ РРМС о-З РРМС 0-5 РРМ* РРМ О 0-5 сРРМІІ о-64
ВіЬ 2.07 2.08 3.65 3.79 4.17 4.19 4.26 4.76
Воокі 2.11 2.17 2.96 3.23 3.42 3.33 3.48 3.74
Воок2 2.03 2.04 3.19 3.54 4.00 3.96 4.06 4.49
Оео 1.46 1.72 1.58 1.67 1.69 1.66 1.70 1.92
1.84 1.84 2.60 3.02 3.33 3.31 3.39 3.74
оьл 1.60 1.55 1.78 2.13 2.14 2.00 2.14 2.29
ОЬ)2 1.81 1.39 1.84 2.97 3.27 3.29 3.31 3.79
Рарегі 1.96 1.90 3.10 3.23 3.38 3.38 3.42 3.74
Рарег2 2.08 2.08 3.35 3.27 3.39 3.39 3.46 3.77
Ріс 7.77 8.89 8.99 7.34 9.76 9.41 9.88 11.43
РіО£С 1.90 1.81 2.95 3.21 3.32 3.33 3.36 3.70
Рго§1 2.18 2.22 4.21 4.21 4.62 4.79 4.73 5.76
Рговр 2.14 2.08 4.17 4.35 4.57 4.94 4.65 5.76
Тгапх 2.06 1.95 4.19 4.52 5.19 5.52 5.33 6.84
Итого 236 2.41 3.47 3.61 4.02 4.04 4.08 4.70
Таким образом, изощреннне модели большого порядка обеспечивают
лучшее сжатие данньїх, но разница в производительности схем обьічно со-
ставляет лишь десятки, а то и единицьі процентов. Позтому обоснованньїй
вьібор алгоритма моделирования следует делать на базе комплексної! оцен-
ки, включающей также обьем используемой памяти, скорости кодирования
и декодирования и, конечно же, вьічисляемой именно для тех данньїх, кото-
рьіе требуется сжимать.
Другие методьі контекстного моделирования
Среди нерассмотренньїх остался интересньїй метод универсального сжа-
тия Сопіехі Тгее 5Уеі§Ьііп§ (взвешивание контекстного дерева), или СТАУ,
которьій потенциально обеспечивает лучшую степень сжатия среди всех из-
вестньїх алгоритмов [16]. В СТ\У при оценке вероятности символа исполь-
зуется явное взвешивание.
Контекстное моделирование ограниченного порядка хорошо работает на
практике, обеспечивая високую степень сжатия при терпимих требованиях
к вьічислительним ресурсам. Но оно представляет собой всего лишь один
из типов контекстного моделирования в широком смисле. Можно отметить
другие методи:
179
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.ги/
Методьі сжатия данньїх (7000+ файлов о сжатии)
модели состояний; в качестве конкретного алгоритма можно указать ди-
намическое марковское сжатие (Бупатіс Магкоу Сотргеззіоп, или
ОМС) [4, 7];
грамматические модели; конкретний алгоритм - ЗЕріЛТІІК [11];
модели с использованием искусственньїх нейроннмх сетей для построе-
ния предсказателя [14].
Рассмотрение алгоритмов моделирования данньїх видов вьіходит за рам-
ки зтой книги.
Вопросьі для самоконтроля1
1. Обьясните связь между точностью предсказания значений данньїх и сте-
пенью сжатия.
2. Что собой представляє! модель источника данньїх в случае использова-
ния для моделирования РРМ-алгоритма?
3. Почему технику уходов можно охарактеризовать как способ неявного
взвешивания статистики контекстних моделей?
4. В каких случаях оценка вероятности ухода может равняться нулю?
5. Приведите пример блока данних, которне вигоднее сжимать, предска-
зьівая вероятность символов на базе их безусловних частот, а не с по-
мощью РРМ-моделирования порядка 1.
6. Почему применение метода исключения всегда улучшает степень сжатия?
7. Как ви думаєте, целесообразно ли применение метода наследования ин-
формации для обновлення статистики контекстних моделей ухода?
8. Почему в случае использования наследования информации применение
метода исключения при обновлений обмчно не позволяет достигать по-
тенциально возможной степени сжатия?
9. Почему метод наследования информации является потенциально более
мощним способом компенсации недостатка статистики в контекстних
моделях високих порядков, чем метод вибора локального порядка?
10. В чем идея способов улучшения точности предсказания при обработке
неоднороднмх данних?
11. Почему чем избмточнее со статистической точки зрения даннме, тем
скорость их обработки РРМ-алгоритмами вьіше?
12. Укажите задачи, при решении котормх может использоваться РРМ-
моделирование.
1 Ответьі на вопросьі, вьіполненньїе упражнения и исходньїе тексти программ
вьі можете найти на /іИр://сотргез5Іоп.§гарііісоп.ги/.
180
ййр:/Лууууу.сошрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
ЛИТЕРАТУРА
І. Шкарин Д. Повьішение зффективности алгоритма РРМ // Проблеми пе-
редами информации. 2001. Т. 34(3). С. 44-54.
2. Веіі Т. С., ХУійеп І. Н., Сіеагу, 1. 6. Мосіе1іп£ Гог іехі сотргеззіоп // АСМ
Сотриіег 8игуеуз. 1989. Уоі. 24(4). Р. 555-591.
3. Віоот С. 8о1уіп§ іЬе ргоЬІетз оГ сопіехі тосіе1іп§ І І СаІіГотіа Іпзіііиіе ої
ТесЬпо1о§у. 1996.
4. Випіоп 8. Оп-Ьіпе ЗіосЬазііс Ргосеззез іп Паіа Сотргеззіоп // РЬЛ іЬезіз,
ІДпіуегзііу оГХУа8Ьіп§іоп. 1996.
5. Сіеагу 1. О., ХУійеп І. Н. Баіа сотргеззіоп изіп§ айарііуе со<ііп§ апд рагііаі
зігіщ» таісЬіпз // ІЕЕЕ Тгапзасііопз оп Соттипісаііопз Аргії 1984. Уоі.
32(4). Р. 396-402.
6. СІеагу Д. С., ТеаЬап XV. Д. ІДпЬоипдед 1еп§іЬ сопіехіз Гог РРМ // ТЬе
Сотриіег Доигпаї. 1997. Уоі. 40 (2/3). Р. 67- 75.
7. Согшаск О. V., Ногзрооі К.. N. Оаіа сотргеззіоп изіп§ йупатіс Магкоу
тоде11іп§ // ТЬе Сотриіег Доигпаї. Пес. 1987. Уоі. 30(6). Р. 541-550.
8. Ноууагд Р. С. ТЬе дезі£п апд апаїузіз оГ еГГісіепі Іоззіезз <1аіа сотргеззіоп
зузіетз І ІРЬЛ іЬезіз, Вгоууп ІДпІуегзііу, Ргоуісіепсе, КЬосіе Ізіапф. 1993.
9. Ьєієууєг П. А., НігзсЬЬег^ П. 8. 8ігеат1іпіп§ Сопіехі Модеіз Гог Паіа
Сотргеззіоп. // Ргосее(ііп§8 оГ Паіа Сотргеззіоп СопГегепсе, 8по\уЬігсі,
ІДіаЬ. 1991. Р. 313-322.
ІО. Моїїаі А. Ітр1етепііп§ (Ье РРМ сіаіа сотргеззіоп зсЬете І І ІЕЕЕ
Тгапзасііопз оп Соттипісаііопз. Иоу. 1990. Уоі. 38(11). Р. 1917-1921.
11. Меуі11-Маппіп§ С. О., ХУійеп І. Н. Ьіпеаг-ііте, іпсгетепіаі ЬіегагсЬу іпГе-
гепсе Гог сотргеззіоп // РгосееФіп^з оґ Паіа Сотргеззіоп СопГегепсе /Ву
ей. І. А. 8іогег апд М. СоЬп. Ьоз Аіатііоз, СА: ІЕЕЕ Ргезз. 1997. Р. 3-11.
12. К.іззапеп Д. Д., Ьап§доп 6. О. ІДпіуегзаІ тоде1іп§ апд со<ііп£ // ІЕЕЕ
Тгапзасііопз оп ІпГогтаііоп ТЬеогу. Дап. 1981. Уоі. 27(1). Р. 12-23.
13. ЗЬаппоп С. Е. А таіЬетаіісаІ Йіеогу оГ соттипісаііоп // ТЬе Веіі Зузіет
ТесЬпісаІ Доигпаї. Диіу, ОсіоЬег, 1948. Уоі. 27. Р. 379-423,623-656.
14. 8сЬті(1ЬиЬег 1. Зециепііаі пеигаї іехі сотргеззіоп І І ІЕЕЕ Тгапзасііопз оп
КеигаІ Нейуогкз. 1996. Уоі. 7(1) Р. 142-146.
15. ТеаЬап XV. Д. РгоЬаЬіІііу езіітаііоп Гог РРМ // Ргосее<1іп£8 оГ іЬе №\у
Хеаіапсі Сотриіег Зсіепсе КезеагсЬ 8іи<Депіз СопГегепсе, 1995. ІДпіуегзііу
оГ ХУаікаіо, Натіїіоп, Кєху Хеаіапсі.
16. У/іІІетз Р. М. Д., ЗЬіагкоу ¥. М., Т)а1кепз Т.Д. ТЬе сопіехі-ігее \уеі§Ьііп8
теіЬой: Вазіс ргорегііез // ІЕЕЕ Тгапзасііопз оп ІпГогтаііоп ТЬеогу. Мау
1995. Уоі. 41(3). Р. 653-664.
181
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.пі/
Методь, сжатия даним*(7000+ файлов о сжатии)
17. \¥ійеп І. Н., Веіі Т. С. ТЬе гего-Ггециепсу ргоЬІет: Є8ііта1іп§ Йг
ргоЬаЬіІіііез оЕ поуєі єуєпіз іп айарііуе іехі сотргеззіоп // ІЕЕЕ
Тгапзасііопз оп ІпЕогтаііоп ТЬеогу. Іиіу 1991. Уоі. 37(4). Р. 1085-1094.
18. ХУіПеп І. Н., Вгау 2., МаЬоиі М., Теаііап В. Техі тіпіп§: а пе\м Егопііег Ео-
Іоззіезз сотргеззіоп // ІІпіуегзііу оЕАУаікаїо, N2. 1999.
19. КуаЬко В. ¥а. Тауісє Еіпіуегзаі Сосііп^// РгоЬІетз оЕ ІпЕогтаііог.
Тгапзтіззіоп. Уоі. 20(3). 1984. Р. 173-177.
Список архиваторов и компрессоров
1. Віоот С. (1996) РРМ2 - РРМ Вазесі Сотргеззог - \Уіп95/1ЧТ уегзіоп.
Еір://Еір.е1Е.8ШЬа.8к/риЬ/рс/раск/ррт2_піх.2Ір
2. Негкіоіг 11. (2001) 11НАК.С - Ьі^Ь сотргеззіоп тиііітесііа агсЬіуег.
Еір://Еір.е1Е.8іиЬа.зк/риЬ/рс/раск/и1іагсО4.2Ір
З. Нігуоіа Н. (1995) НА - Еііе агсЬіуег иШіїу.
Йр://Йр.е1£.5іиЬа.8к/риЬ/рс/раск/Ііа0999.2Ір
4. Ьуарко О. (2000) АКНАМОЕЬ - Гііе агсЬІУІп§ иіііііу.
Еір://Еір.е1Е.8ІиЬа.8к/риЬ/рс/раск/агЬ140.2Ір
5. Ьуарко О. (1997) Ь6НА - агскіуе ргосеззог.
йр://1ф.е1£.8ШЬа.8к/риЬ/рс/раск/І8Ііа11§.2Ір
6. 8Ье1\уіеп Е. (2001) РРМ¥ - сопіехі тосіе11іп§ сотргеззог.
Ьйр:/Луипу.рі1аЬ8.ог£.иа/зІі/ррту_ЗЬ.2Ір
7. 8Ькагіп В. (1999) ВМГ - Іоззіезз іта^е сотргеззог.
Еір://Еір.е1Е.зІиЬа.зк/риЬ/рс/раск/ЬтЕ_ 1 _ 10.гір
8. ЗЬкагіп В. (2001) РРМОН - Газі РРМ сотргеззог Еог (ехіиаі йаіа.
Лр://йр.е1Е.8іиЬа.8к/риЬ/рс/раск/рртдЬ.гаг
9. Зтітоу М. (2001) РРМ1Ч - по( зо Еазі РРМ сотргеззог.
Ьйр://тзтіт.пе¥Утаі1.ги/рртпЬ1 .гір
10. 8иПоп І. (1998) ВОА сопзігісіог агсЬіуег.
Еір://Еір.е1Е.5ІиЬа.8к/риЬ/рс/раск/Ьоа058.2Ір
11. Тауіог М. (2000) КК - йіе агсЬіуег.
Еір://Еір.е1Е.8іиЬа.зк/риЬ/рс/раск/гк104а1сі.ехе
12. Тауіог М. (1999) КК11С - ипіуегзаі сотргеззог.
Еір://Еф.е1Е.8ШЬа.8к/риЬ/рс/раск/гкис 104.гір
13. Уаіепііпі 8. (1996) XI агсЬіуег.
Еір://Йр.е1£.8іиЬа.зк/риЬ/рс/раск/х1<іо895а.гір
14. 2І£апзЬіп В. (1997). СМ - зіаііс сопіехі тос!е1іп§ агсЬіуег.
Ьйр ://зосЬі .пеЕги/~тахіте/згс/ст.срр ,§г
182
КНрі/Луууху.сотрге^іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Глава 5. Преобразование Барроуза -
Уилера
ВВЕДЕНИЕ
Преобразование Барроуза - Уилера применяется в алгоритмах сжатия
качественньїх данньїх. Для зффективного использования преобразования
необходимо, чтобьі характеристики данньїх соответствовали модели
источника с памятью.
Как и многие другие применяемьіе в алгоритмах сжатия преобразования,
преобразование Барроуза - Уилера предназначено для того, чтобм сделать
сжатие данньїх входного блока более зффективнмм. Посредством переста-
новки злементов данное преобразование превращает входной блок данньїх
со сложньїми зависймостями в блок, структуру которого моделировать го-
раздо легче, причем отображение происходит без потерь информации.
Зтот метод появился сравнительно недавно. Впервме он бмл опублико-
ван 10 мая 1994 г. в [13]. Авторами метода являются Дзвид Уилер и Майк
Барроуз. Причем первмй из них придумал зтот метод еще в 1983 г., когда
работал в компании АТ&Т Веіі ЬаЬогаїогіез. Но, видимо, либо тогда не при-
дал значення своєму открнтию, либо посчитал чрезмерннми требования к
вьічислительннм ресурсам.
По имени авторов, алгоритм бмл назван преобразованием Барроуза -
Уилера (Вштогуз - АУйееІег ТгапзЕопп, далее - ВАУТ). Метод бьіл обьявлен
компромиссньїм между бистрими словарнмми алгоритмами, с одной сто-
рони, и статистическими алгоритмами, дающими более сильное сжатие, но,
малопримениммми в то время на практике, с другой сторони.
Благодаря таким свойствам описмваемое преобразование стало довольно
популярним и среди разработчиков архиваторов, и среди научннх работни-
ков. Уже опубликовано более сотни статей на разнмх язиках, посвященнмх
зтому методу, и написано столько же програми, его реализующих.
Преобразование Барроуза - Уилера
Как уже указьівалось, преобразование Барроуза - Уилера предназначено
для того, чтобьі преобразовать входной блок в более удобнмй для сжатия
вид. Причем, как показнвает практика, полученньїй в результате преобразо-
вания блок обьічньїе методи сжимают не так зффективно, как методи, спе-
циально для зтого разработанньїе.
183
Книга написана коллективом К((р:/Лу\у\у.сотрге‘і‘ііоп.і'и/
(7000+ файлов о сжатии)
Методи сжатия данних
Позтому нельзя рассматривать описьіваемьій алгоритм отдельно от соот-
ветствующих специфических методов кодирования данньїх.
В оригинальной статье бьіла предложена как одна из возможньїх реали-
заций сжатия на основе ВХУТ совокупность из трех алгоритмов:
преобразования Барроуза - Уилера;
преобразования Моує-То-Ггопі (известного в русскоязьічной литературе
как перемещение стопки книг);
статистического кодера для сжатия данньїх, полученньїх в результате
последовательного применения двух вьішеупомянутмх преобразований.
Дальнейшие исследования показали, что второе из перечисленньїх пре-
образований не является необходимьім и может бьіть заменено альтерна-
тивним. Или даже исключено вовсе за счет усложнения кодирующей фази.
Впрочем, еще сами автори В\УТ упоминали о такой возможности.
Итак, начнем с описання главной составляющей части процесса сжатия
данньїх при помощи методов на основе В\УТ - с самого преобразования.
Прежде всего следует отметить одну из его особенностей. Он оперирует
сразу цельїм блоком данних. То єсть ему заранее известньї сразу все зле-
ментьі входного потока или по крайней мере достаточно большого блока.
Зто делает затруднительньїм использование алгоритма в тех областях при-
менения, где требуется сжатие данньїх "на лету", символ за символом.
В зтом отношении В\УТ даже более требователен, чем методи семейства
Ь277, использующие для сжатия скользящее окно.
Следует отметить, что возможна реализация сжатия данньїх на основе
В\УТ, обрабативающая данньїе последовательно по символам, а не по бло-
кам. Но скоростнне характеристики програми, использующих такую реали-
зацию, будут очень далеки от совершенства.
Таким образом, ми пришли к первой и самой лепсой из фаз преобразо-
вания - к внделению из непреривного потока блока данних.
Де-факто описнвать ВХУТ стало принято с помощью примера преобра-
зования строки символов "абракадабра".
Далее нужно из полученного блока данньїх создать матрицу всех воз-
можних его циклических перестановок. Первой строкой матрици будет ис-
ходная последовательность, второй строкой - она же, сдвинутая на один
символ влево, и т. д. Таким образом, получим матрицу, изображенную на
рис. 5.1.
184
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методи сжатия без потерь
абракадабра
бракадабраа
ракадабрааб
акадабраабр
кадабраабра
адабраабрак
дабраабрака
абраабракад
браабракада
раабракадаб
аабракадабр
Рис. 5.]. Множество циклических
перестановок строки
"абракадабра "
Помстим в зтой матрице исходную строку и отсортируем все строки в
соответствия с лексикографическим порядком символов. Будем считать, что
одна строка должна находиться в матрице вьіше другой в том случае, если в
самой левой из позиций, начиная с которой строки отличаются, в зтой стро-
ке находится символ лексикографически меньший, чем у другой строки.
Другими словами, следует отсортировать символи сначала по первому сим-
волу, затем строки, у котормх первьіе символи равни, - по второму и т. д.
(рис. 5.2).
0 аабракадабр
1 абраабракад
2 абракадабра - исходная строка
З адабраабрак
4 акадабраабр
5 браабракада
б бракадабраа
7 дабраабрака
8 кадабраабра
9 раабракадаб
10 ракадабрааб
Рис. 5.2. Матрица циклических
перестановок строки
"абракадабра",
отсортированная слева направо
в соответствии
с лексикографическим порядком
символов ее строк
Теперь остался последний шаг - виписать символи последнего столбца
и запомнить номер исходной строки среди отсортированних. Итак, "рда-
краааабб",2 - зто результат, полученний в результате преобразования Бар-
роуза - Уилера.
Теперь нам осталось сделать "всего" 3 вещи:
1) доказать, что преобразование обратимо;
2) показать, что оно не требует огромного количества ресурсов;
3) показать, что оно полезно для последующего сжатия.
185
Книга написана коллективом К((р:/Лу\у\у.сотрге‘і‘ііоп.і'и/
Методи, сжатия даннь,х (7000+ файловосжатии)
Упражнение. Проделайте преобразование Барроуза - Уилера строки
"карабас".
ДОКАЗАТЕЛЬСТВО ОБРАТИМОСТИ ПРЕОБРАЗОВАНИЯ БАРРОУЗА —
Уилера
Возможно, Давид Уилер не опубликовал описание алгоритма в 1983 г.
потому, что ему самому показалось странньїм, что можно восстановить на-
чальную строку из столь сильно перемешанньїх между собой символов. Но
так или иначе, зто не фокус и обратное преобразование действительно воз-
можно.
Пусть нам известньї только результат преобразования, т. е. последний
столбец матрицм, и номер исходной строки. Рассмотрим процесе восста-
новления исходной матрицьі. Для зтого отсортируем все символьї последне-
го столбца (рис. 5.3).
Нам известно, что строки матрицьі бьіли отсортированьї по порядку, ка-
чиная с первого символа. Позтому, очевидно, в результате такой сортировки
мьі получили первьій столбец исходной матрицьі.
Поскольку последний столбец по условию задачи нам известен, добавим
его в полученную матрицу (рис. 5.4).
0 а 0 а.... ....р
1 а 1 а.... ....д
2 а 2 а.... ....а
3 а 3 а.... ....к
4 а 4 а.... ....р
5 б 5 б.... ....а
6 б 6 б.... ....а
7 д 7 д.... ....а
8 к 8 к.... ....а
9 р Рис. 5.3. Отсор- 9 р.... ....б
10 р тированньїе символьї 10 р.... ....б
исходной строки
Рис. 5.4. Первьій
и последний столбцьі
матрицм цикличес-
ких перестановок
Теперь самое время вспомнить, что строки матрицьі бьіли полученьї
в результате циклического едвига исходной строки. То єсть, символьї по-
следнего и первого столбцов образуют друг с другом парьі. И нам ничто не
может помешать отсортировать зти парм, поскольку обязательно сущест-
вуют такие строки в матрице, которьіе начинаютея с зтих пар. Заодно до-
пишем в матрицу и известньїй нам последний столбец (рис. 5.5).
186
К((р://уууууу.сотрге88Іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
0 аа..р
І аб..д
2 аб...а
З ад...к
4 ак...р
5 бр...а
6 бр...а
7 да...а
8 ка...а
9 ра...б
Ю ра..б
Рис. 5.5. Первьій, второй
и последний столбци матрицьі
Таким образом, два столбца нам уже известньї. Легко заметіль, что отсор-
тированньїе парні вместе с символами последнего столбца составляют тройки.
Аналогично восстанавливается вся матрица. А на оснований записанного зара-
нее номера исходной строки в матрице - и сама исходная строка (рис. 5.6).
0 ааб... ...р аабр... ...р аабракада.р аабракадабр
1 абр... ...Л абра... ..л абраабрак.д абраабракад
2 абр... ....а абра... ...а абракадаб.а абракадабра
3 ада... ...к адаб... ...к адабраабр.к адабраабрак
4 ака... ...р акад... ...р акадабраа.р акадабраабр
5 бра... ....а браа... ...а браабрака.а браабракада
6 бра... ....а брак.. ...а бракадабр.а бракадабраа
7 даб... ....а дабр.. ...а дабраабра.а дабраабрака
8 кад... ...а када... ...а кадабрааб.а кадабраабра
9 раа... ...б рааб.. ...б раабракад.б раабракадаб
10 Ра*- ....б рака... ...б ракадабра.б ракадабрааб
Рис. 5.6. Процесе определения всех столбцов матрицьі
Упражнение. В результате преобразования Барроуза - Уилера получена стро-
ка ’тпрооппо’. Номер исходной строки в матрице преобразований - 5 (считая
с нуля). Восстановите исходную строку.
Вектор обратного преобразования
После того как мьі доказали принципиальную возможность обратного пре-
образования, можно показать, что для его осуществления нет необходимости
посимвольно вьіписьівать все строки матрицм перестановок. Если бьі мьі хра-
нили в памяти всю матрицу, требуемую для мегабайтового блока данньїх, нам
потребовалось бьі... В общем, видно, что затея бьіла бм бесполезной.
Для обратного преобразования нам дополнительно к собственно даннмм
нужен только вектор обратного преобразования, представляющий собой
массив чисел, размер которого равен числу символов в блоке. Позтому за-
187
Книга написана коллективом 1ійр:/Лууууу.сотрге88Іоп.пі/
Методи сжатия данньїх <7000+ файлов о сжатии)
тратьі памяти при вьшолнении обратного преобразования линейно зависят
от размера блока.
Обратите внимание, что в процессе виявлення очередного столбца мат-
рицьі мьі совершали одни и те же действия. А именно получали новую
строку, сливая символ из последнего столбца старой строки с известньїми
символами первьіх столбцов зтой же строки. И новая строка после сорти-
ровки перемещалась в другую позицию в матрице.
Из строки 0 мьі получали строку 9, из первой - седьмую и т. п., (рис. 5.7).
Номер строки Номер новой строки п
0 а.... ....р 9
1 а.... ....д 7
2 а.... ....а 0 - исходная строка
3 а.... ....к 8
4 а.... ....р 10 І ।
5 б.... ....а 1 ♦
6 б.... ....а 2 і
7 д.... ....а 3
8 к.... ....а 4 і
9 р.... ....б 5 1 і
10 р.... ....б 6 і
Рис. 5.7. Способ получения первого столбца матрицьі из последнего
Важно, что при добавлений любого столбца перемещения строк на но-
вую позицию бьіли одинаковьі. Нулевая строка перемещалась в девятую по-
зицию, первая - в седьмую и т. д.
Чтобьі полупить вектор обратного преобразования, следует определить
порядок получения символов первого столбца из символов последнего. То
єсть, отсортировать матрицу по номерам нових строк (рис. 5.8).
Номер строки Номер новой строки Переносим последний столбец в начало
2 а.... ....а 0 аа.... ....р
5 б.... ....а 1 аб.... ....д
6 б.... ....а 2 аб... ....а
7 д.... ....а 3 ад.... ....к
8 к.... ....а 4 ак.... ....р
9 р.... ....б 5 бр... „..а
10 р.... ....б 6 бр... ....а
1 а.... ....д 7 да.... ....а
3 а.... ....к 8 ка.... ....а
0 а.... ....р 9 ра.... ....б
4 а.... -Р . 10 Ра”” ....б
Рис. 5.8. Получение вектора обратного преобразования
188
1ійр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Полученньїе значення номеров строк Т = { 2, 5, 6, 7, 8, 9, і0, І, 3, 0, 4 } и
єсть искомьій вектор, содержащий номера позиций символов в строке, ко-
торую нам надо декодировать (символьї упорядоченьї в соответствии с по-
ложением в алфавите).
Теперь получить исходную строку совсем просто. Первмм делом возь-
мем злемент вектора обратного преобразования, соответствующий номеру
исходной строки в матрице циклических перестановок, Т[2] = 6. Иначе го-
воря, в качестве первого символа в исходной строке следует взять шестой
символ из строки "рдакраааабб". Зто символ "а".
Затем нужно определить, какой символ заставил опуститься найденньїй
символ "а" на вторую позицию среди равньїх. Искомьій символ находится в
последнем столбце шестой строки матрицм, изображенной на рис. 5.8.
А поскольку Т[6] = 10, в преобразованной строке он находится в десятой
позиции. Зто символ "б". И т. д. (рис. 5.9).
6=> 10=> 4=> 8=> 3=> 7=> 1 => 5=> 9=> 0=> 2
аб ракадабра
Рис. 5.9. Декодирование исходной строки при помощи вектора обратного
преобразования
Упражнение. В результате преобразования Барроуза - Уилера получена стро-
ка "тпрооппо". Номер исходной строки в матрице преобразований - 5 (считая с
нуля). Постройте вектор обратного преобразования.
Реализация обратного преобразования
Получение исходной строки из преобразованной можно проиллюстри-
ровать при помощи небольшой программм.
Введем следующие обозначения:
п - количество символов в блоке входного потока;
N - количество символов в алфавите;
роз - номер исходной строки в матрице перестановок;
іп - входной блок;
соипі - массив частот каждого символа алфавита во входном блоке;
Т - вектор обратного преобразования, размер вектора равен п.
Первмм делом следует посчитать частотьі символов и пронумеровать все
исходнме символьї в порядке их появлення в алфавите. По сути, зто зквива-
лентно построению первого столбца матрицм циклических перестановок.
£ог ( і=0; і<К; і++) соипТ[і]=0;
£ог( і=0; і<п; і++) соипї[іп[і]]++;
зит = 0;
іог ( і=0; і<п; і++) {
зит += соип£[і];
соипС[і] = зит - соипЬ[і];
}
189
Книга написана коллективом К((р:/Лу\у\у.сотрге‘і‘ііоп.і'и/
Методьі сжатия данньїх (7000+ файлов о сжатии)
После вьіполнения зтих действий сошіф] указьівает на первую позицию
символа с кодом і в первом столбце матрицьі. Следующий шаг - создание
вектора обратного преобразования.
£ог( і=0; і<п; і++) Т [соипЬ[іп[і]]++]]=і;
Далее при помощи полученного вектора восстановим исходньїй текст.
£ог( і=0; і<п; і++) {
риЬс( іп(роз), ои£ри£ );
роз = Т[роз];
}
Использование ВУУГ В СЖАТИИ ДАННЬЇХ
Теперь, после того как вияснилось, что наши действия вполне обратимьі
и данньїе мьі не исказим, можно вернуться к вопросу рассмотрения полез-
ности преобразования. Как уже отмечалось вьіше, главная задача преобра-
зования Барроуза - Уилера заключается в том, чтобн ловко переставить
символи. Переставить так, чтобьі их можно бьіло легко сжать, не ломая го-
лову над их взаимосвязями. Потому что преобразование как раз тем и зани-
мается: "вьітаскивает" все взаимосвязи наружу. Точнеє, очень многие.
Для понимания зтого процесса достаточно представить поток данньїх
состоящим из набора некоторьіх стабильнмх сочетаний символов. Напри-
мер, как зтот текст, состоящим из слов. Сочетание символов, позволяющее
предсказать некоторьій неизвестнмй доселе символ, назнвается контекстом.
Например, если нам известна последовательность символов "реобразова-
ние", то скореє всего ей предшествует символ "п". Назовем устойчивьім
(стабильньїм) такой контекст, для которого распределение частот символов,
непосредственно примьїкающих к нему слева или справа, меняется незначи-
тельно в пределах блока.
Если нам потребуется подвергнуть преобразованию данную главу, мож-
но с уверенностью сказать, что строки, начинающиеся с символов "реобра-
зование", будут располагаться рядом в отсортированной матрице. И в соот-
ветствующих зтим строкам позициях последнего столбца матрицьі будет
находиться символ "п".
Таким образом, главное свойство преобразования в том, что оно собира-
ет вместе символьї, соответствующие похожим контекстам. Чем больше
стабильнмх контекстов в блоке данньїх, тем лучше будет сжиматься полу-
ченньїй в результате преобразования блок. Практика показьівает, что в ре-
зультате преобразования обмчньїх текстов более половини из всех симво-
лов следует за такими же.
Упражнение. Какие еще символьї ломимо "п" могут оказаться в конце строк,
начинающихся с последовательности символов "реобразование", в результате
преобразования данной главьі?
190
К((р://уууууу.сотрге88Іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
ЧАСТИЧНОЕ СОРТИРУЮЩЕЕ ПРЕОБРАЗОВАНИЕ
Некоторое время спустя после появлення первьіх архиваторов, исполь-
зующих преобразование Барроуза - Уилера, бьіло опубликовано описание
еще одного алгоритма, также основанного на сортировке блока данньїх [33,
І]. Отличие от В\УТ заключается в том, что сортировка строк матрицьі осу-
ществляется не по всей длине строк, а только по некоторому фиксирован-
ному количеству символов. В том случае, если у нескольких строк зти сим-
воли одинаковьі, вьіше в списке помещается строка, первьій символ которой
встретился во входном блоке раньте первьіх символов остальнмх рассмат-
риваемьіх строк.
Можно сказать, что позиция первого символа строки во входном блоке
участвует в сортировке. Число символов строки, участвующих в преобразо-
вании, назьівается порядком сортирующего преобразования. Легко заме-
тать, что в результате преобразования нулевого порядка, 8Т(0), получается
исходная строка. В качестве примера вьіполним преобразования 1-го и 2-го
порядка строки "абракадабра" (рис. 5.10).
строки 8Т(1) 8Т(2) ВАУТ
Первьій шаг. 1 Іостроение матрицьі преобразования
0 а< 0>бракадабра аб< 0>ракадабра абракадабра
1 б< 1>ракадабраа бр< 1>акадабраа бракадабраа
2 р< 2>акадабрааб ра< 2>кадабрааб ракадабрааб
3 а< 3>кадабраабр ак< 3>адабраабр акадабраабр
4 к< 4>адабраабра ка< 4>дабраабра кадабраабра
5 а< 5>дабраабрак ад< 5>абраабрак адабраабрак
6 д< 6>абраабрака да< 6>браабрака дабраабрака
7 а< 7>браабракад аб< 7>раабракад абраабракад
8 б< 8>раабракада бр< 8>аабракада браабракада
9 р< 9>аабракадаб ра< 9>абракадаб раабракадаб
10 а<10>абракадабр аа<10>бракадабр аабракадабр
Второй шаг. Сортировка
0 а< 0>бракадабра аа<10>бракадабр аабракадабр
1 а< 3>кадабраабр аб< 0>ракадабра абраабракад
2 а< 5>дабраабрак аб< 7>раабракад абракадабра
3 а< 7>браабракад ад< 5>абраабрак адабраабрак
4 а<10>абракадабр ак< 3>адабраабр акадабраабр
5 б< 1>ракадабраа бр< 1>акадабраа браабракада
6 б< 8>раабракада бр< 8>аабракада бракадабраа
7 д< 6>абраабрака да< 6>браабрака дабраабрака
8 к< 4>адабраабра ка< 4>дабраабра кадабраабра
9 р< 2>акадабрааб ра< 2>кадабрааб раабракадаб
10 р< 9>аабракадаб ра< 9>абракадаб ракадабрааб
Результат
аркдраааабб,5 радкраааабб,5 рдакраааабб,2
Рис. 5.10. Частичнме сортирующие преобразования 1-го и 2-го порядка
191
Книга написана коллективом Шір:/Лууууу.сошрге88Іоп.пі/
Методи сжатия деяких (7000+ Файлов о сжатии)
Так же как и в ВХУТ, результатом преобразования являются последний
столбец матрицьі и номер строки, последний символ которой является на-
чальним символом исходной строки.
Упражнение. Вьіполните преобразование 8Т(3) строки "абракадабра".
Легко заметать, что различие между частичньїм сортирующим преобра-
зованием и преобразованием Барроуза - Уилера можно увидеть только при
сортировке устойчивьіх контекстов длиннее порядка преобразования 8Т.
В методе В\УТ в зтом случае продолжается процесе сравнения символов, а в
8Т - сравнение символов прекращаетея и вьіше располагается та строка,
первьій символ которой встретился во входном блоке раньше. Следователь-
но, те даннме, в которьіх встречаются длинньїе повторьі, более зффективно
ежимаютея преобразованием Барроуза - Уилера. К примеру, типичнме тек-
стовьіе файли на английском язьіке теряют в сжатии около 5% при вмпол-
нении сортировки по четнрем символам.
С другой сторони, частичное сортирующее преобразование не требует
полной сортировки всех строк матрицм и свободно от тех проблем, которме
возникают при преобразовании очень избмточньїх данньїх с использовани-
ем полной сортировки. Как правило, данное преобразование вмполняетея
бметрее, чем В5¥Т.
Но при вмполнении обратного преобразования наблюдаетея иная карти-
на. Если в случае В\УТ оно вьшолняетея легко и просто, то для восстанов-
ления исходнмх данньїх после частинного сортарующего преобразования
необходимо приложить дополнительнме усилия. А именно вести учет коли-
честьа одинаковмх контекстов. И чем порядок преобразования больше, тем
требуетея больше времени на подечет.
Методьі, используемьіе совместно с ЕМА/Т
Как уже бьіло сказано, само по себе преобразование Барроуза - Уилера не
ежимает. Зту работу продельївают другие методи, призваннме толково распо-
рядигься теми свойствами, котормми обладают преобразованньїе данньїе.
Среди таких методов можно отметить следующие:
кодирование длин повторов (КЬЕ);
метод перемещения стопки книг [35] (МТР);
кодирование расстояний (ОС);
метод Хаффмана;
арифметическое кодирование.
Последовательность применения методов, используемих совместно с В\УТ:
192
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Шаг Используемьій алгоритм
1 Кодирование длин повторов (необязательно)
2 Преобразование Барроуза - Уилера Частичное сортирующее преобра- зование
3 Перемещение стопки книг Кодирование расстояний
4 Кодирование длин повторов (необязательно)
5 Метод Хаффмана Арифметическое кодирование
ПЕРЕМЕЩЕНИЕ СТОПКИ КНИГ
Метод также известен под названием МТР (Моує То Егопі). Суть его
легко понять, если представить процесе перемещения книг в стопке, из ко-
торой время от времени достают нужную книгу и кладут сверху. Таким об-
разом, через некоторое время наиболее часто используемьіе книги оказьіва-
ютея ближе к верхушке стопки.
Введем следующие обозначения:
N - число символов в алфавите;
М - упорядоченньїй список символов размером У; М[0] соответствует
верхней книге стопки, М[У-1] - нижней;
х - очередной символ.
іпС Стрі, Ьтр2, і=0;
Стрі = М[і];
М[і] = х;
мЬіІе( Ртрі != х ) {
Ртр2 = їтрі;
Ртрі = М [ і];
М[і] = Ртр2;
}
Для примера произведем преобразование над последовательностью
"рдакраааабб", полученной нами после В\УТ. Предположим, что мьі имеем
дело с алфавитом, содержащим только зти 5 символов и в упорядоченном
списке символов они расположеньї в следующей порядке: М = {"а", "б", "д",
"к","р"}.
Первьій из символов последовательности, "р", находится в списке под
номером 4. Зто число мм и записьіваем в вьіходной блок. Затем мьі изменя-
ем список, перенося зтот символ в вершину списка, при зтом едвигая все
остальньїе злементм, находившиеся до зтого вьіше.
Следующий символ, "д", после зтого едвига оказьіваетея в списке под
номером 3. И т. д. (рис. 5.11).
193
Книга написана коллективом 1ійр:/Лууууу.сошрге88Іоп.пі/
Методьі сжатия данньїх <7000+ файлов о сжатии)
Символ Список Номер
р абдкр 4
д рабдк 3
а драбк 2
к адрбк 4
р кадрб 3
а ркадб 2
а аркдб 0
а аркдб 0
а аркдб 0
б аркдб 4
б баркд 0
Рис. 5.11. МТЕ-преобразование строки "рдакраааабб"
Таким образом, в результате преобразования по методу перемещения
стопки книг мьі полупили последовательность "43243200040".
Вспомним, что результат преобразования Барроуза - Уилера представ-
ляет собой последовательность символов, среди которьіх часто попадаются
идущие подряд одинаковьіе символьї. Позтому, чтобм зффективно сжать
такую последовательность, статистическому кодеру необходимо вовремя
отслеживать смену одного частого символа другим. МТР предназначен для
того, чтобьі облегчить задачу статистическому кодеру.
Рассмотрим последовательность "ЬЬЬЬсссссскШсіаааааЬ", обладающую
такими свойствами. Попробуєм обойтись без МТР и закодировать ее по ме-
тоду Хаффмана. Для упрощения будем исходить из предположения, что за-
трати на хранение дерева, требуемого для обеспечения декодирования, бу-
дут равньї и с использованием МТР и без него.
Вероятности всех четшрех символов в данном примере равньї 1/4, т. е.
для кодирования каждого из символов нам потребуется 2 бита. Легко по-
спитать, что в результате кодирования мьі полупим последовательность
длиной 20-2 = 40 бит.
Теперь проделаем то же самое со строкой, подвергнутой МТР-
преобразованию. Предположим, что начальний список символов вмглядит
как {"а", "Ь", "с", "а"} (рис. 5.12).
ЬЬЬЬссссссІсісМсіаааааЬ исходная строка
10002000030000300003 строка после МТГ
Символ Частота Вероятность Код Хаффмана
0 15 3/4 0
3 3 3/20 10
1 1 1/20 ПО
2 1 1/20 111
Рис. 5.12. Кодирование методом Хаффмана строки после МТЕ-преобразования
194
1ійр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
В результате кодирования полупаєм последовательность длиной 15*1 +
+ 3*2+ 1*3 + 1*3 = 27 бит.
Упражнение. Произведите преобразование методом стопки книг последова-
тельности "ЬЬЬЬЬсссссісІсІссеааааа* и определите, будет ли использование МТЕ
давать преимущество при кодировании методом Хаффмана. Начальний упо-
рядоченньїй список символов установить {"а”, "Ь", "с”, "сі", "е"}. Исходите из
предположения, что алфавит состоит только из указанньїх пяти символов.
Кодирование длин повторов
Зтот метод также назьівается Кліп Ьеп£(Ь Епсодіп§ (КЬЕ). Зто один из
наиболее старьіх методов сжатия. Суть зтого метода заключается в замене
идущих подряд одинаковьіх символов числом, характеризующим их коли-
чество. Конечно, также мьі должни и указать признак "включення" меха-
низма кодирования длин повторов, которьій можем распознать при декоди-
ровании.
Один из возможньїх вариантов - включать кодирование, когда число по-
вторяющихся символов превнсит некоторий порог. Например, если ми ус-
ловимся, что порог равняется трем символам, то последовательность
"аааааЬЬЬссссдсГ в результате кодирования будет вьіглядеть как
"ааа2ЬЬЬ0ссс1<кі". Если мьі виберем в качестве порога 4 символа, то полу-
пим "ааааІЬЬЬссссОскГ.
Упражнение. Что получится, если закодировать повтори в данной строке, ис-
пользуя порог, равньїй двум символам?
Главное назначение кодирования длин повторов в связке с В^УТ - увели-
нить скорость сжатия и разжатия.
КЬЕ можно применить дваждьі - до преобразования и после. До преоб-
разования данньїй метод может пригодиться, если мьі имеем дело с пото-
ком, содержащим много повторов одинаковьіх символов. Сортировка строк
матриць: перестановок- наиболее длительная из процедур, необходимьіх
для сжатия при помощи ВХУТ. В слунае вьісокоизбьіточньїх данньїх время
вмполнения зтой процедури может существенно (в рази) возрастать. Сей-
нас разработаньї методи сортировки, устойнивне к такого рода избмтонно-
сти даннмх, но ранее метод кодирования длин повторов широко использо-
вался на зтом зтапе ценой небольшого ухудшения сжатия. КЬЕ следует
применять, если указанних повторов уж слишком много.
Не является обязательньїм и другое применение КЬЕ- кодирование
длин повторов после преобразования Барроуза - Уилера. Оно довольно зф-
фективно реализовано в згір [33] и ВА, но известнм архиватори, в которих
КЬЕ не требуетея, например такие, которме используют кодирование рас-
стояний (ОС, УВ8). Ряд архиваторов использует некую разновидность ко-
дирования длин повторов - 1-2 кодирование, описанное ниже. В любом
195
Книга написана коллективом К((р:/Лу\у\у.сотрі'Є‘,‘,іоп.ги/
Методьі сжатия данньїх <7000+ файлов о сжатии)
случае, если не воспользоваться каким-нибудь из перечисленньїх методов
сокращения количества вмходнмх символов, скорость работьі будет остав-
лять желать лучшего, особенно в случае архиваторов, в которьіх использу-
ется арифметическое кодирование.
УСОВЕРШЕНСТВОВАНИЕ МЕТОДА ПЕРЕМЕЩЕНИЯ СТОПКИ КНИГ
МТЕ является вполне самостоятельнмм преобразованием и, помимо ис-
пользования вкупе с ВХ¥Т, применяется и в других областях. Но сейчас мм
рассмотрим модификации метода перемещения стопки книг, которьіе помо-
гают улучшить сжатие данньїх, полученньїх именно после преобразования
Барроуза - Уилера.
Когда мм вьшисьіваем символи последнего столбца матрицьі перестано-
вок, относящиеся к весьма близким контекстам, мм можем с достаточно
большой долей уверенности утверждать, что для многих типов данньїх зти
символьї будут одинаковьі. В частности, к таким типам данних относятся
файли, содержащие текст на естественном язнке.
Однако возможнм небольшие нарушения такой закономерности - за счет
ошибок, за счет наличия больших букв в начале предложения, переносов
слов и т. д. Зти нарушения на виходе В\УТ часто вмглядят как небольшие
вкраплення посторонних символов среди длинной цепочки одинаковмх.
Очевидно, вкраплення из одного редкого символа будут встречаться чаще
двойньїх, тройних и более длинннх.
Можно заметить, что при МТР-преобразовании такие одиночнме симво-
ли приводят к двойному появленню единичнмх кодов, что ухудшает нам
статистику. Способ преодоления такой неприятности довольно прост. Сле-
дует отложить продвижение символа на верхушку списка в том случае, если
зтот символ не находится в позиции, соответствующей коду 1. На рис. 5.13
представлено, как будет внглядеть преобразование последовательности
"рдакраааабб" в зтом случае.
Символ Список Вьіход
р абдкр 4
д арбдк 3
а адрбк 0
к адрбк 4
р акдрб 3
а аркдб 0
а аркдб 0
а аркдб 0
а аркдб 0
б аркдб 4
б абркд І
Рис. 5.13. Модифицированное МТР-преобразование строки "рдакраааабб”
196
К((р://уууууу.сотрі'Є‘>‘>іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Преимущество такой модификации видно на примере МТР-преобразо-
вания типичной для английских текстов последовательности "ййТйРуй",
полученной из части последнего столбца матрицьі перестановок:
Ье_ ... і
Ье_ ... і
Ье_ ... і
Ье_ ... і
Ье_ ... Т
Ье_ ... І
йе_ ... (
Ьеп_ ... І
Ьеп_ ... XV
йеп_ ... І
Неп ... І
Предположив, что упорядоченнмй список содержит символьї в порядке
{"І", "ху", "Т"в результате применения метода перемещения стопки книг
получаем следующие результати:
00002100210 Обнчний МТР
00002000200 Модифицированннй МТР
Как видно из примера, на типах данньїх, обладающих описанньїми свой-
ствами, усовершенствованнмй метод перемещения стопки книг дает рас-
пределение кодов МТР, которое лучше поддается сжатию за счет большего
количества нулевнх кодов.
Но в случае появлення двойньїх редких символов, зтот метод дает ре-
зультати хуже классического МТР. Например, если нам попалась последо-
вательность "ййТТйЬухуй":
0000201002010 Обнчний МТР
0000211002110 Модифицированннй МТР
Но, как уже било замечено, вероятность появлення двух идущих подряд
редких символов меньше, чем вероятность появлення одного.
Картину также может испортить ситуация, когда мм имеем дело с сим-
волами, соответствующими не устойчивмм контекстам, а участку сменн
одного контекста другим. В зтом случае задержка в перемещении символа к
вершине списка может сослужить плохую службу при отслеживании появ-
лення нового устойчивого контекста. Справедливости ради стоит отметить,
что и в зтом случае модифицированное МТР-преобразование все же обично
реагирует достаточно бистро.
197
Книга написана коллективом Шір:/Лууууу.сошрге88Іоп.ги/
(7000+ файлов о сжатии)
Матодьі сжатия данньїх
Резюмируя, можно сказать, что описаними вариант метода перемещения
стопки книг на текстовьіх данньїх оказьівается лучше классического, а од-
нозначно поручиться за сохранение такого преимущества при обработке
даннмх другого типа нельзя. Возможно, более правильним вибором будет
предварительньїй анализ данньїх или подсчет числа отложенньїх перемете-
ний на вершину списка для принятия решения, какой из вариантов исполь-
зовать.
Упражнение. Какой из методов МТЕ-преобразования будет зффективнее для
последовательности символов "ааасЬааа"? Предлоложим, что начальньїй упо-
рядоченньїй список символов вьіглядит как {"а", "Ь", "с"}.
Преимущество модифицированного алгоритма для текстових даннмх
можно оценить на примере файла Ьоокі из набора файлов СаІ^СС, часто
используемого для оценки архиваторов. На рис. 5.14 приводятся частоти
рангов для обоих методов перемещения стопки книг.
Ранги МТР обьічньїй, % МТР модифицированнмй, %
0 49.77 51.43
1 15.36 14.93
2 7.91 7.45
3 5.28 4.96
4 3.79 3.67
5 2.91 2.81
6 2.35 2.29
7 1.98 1.94
8 1.68 1.63
9 1.45 1.44
10 1.26 1.23
11 1.06 1.05
12 0.91 0.90
13...255 4.33 4.31
Рис. 5.14. Статистика рангов МТГ-преобразования для файла Ьоокі
1-2-КОДИРОВАНИЕ
При кодировании длин повторов символов применительно к преобразо-
ванию Барроуза - Уилера стоят две задачи:
обеспечить кодирование чисел любой величини;
адаптироваться к изменению величини избмточности даннмх.
Данние задачи успешно решает алгоритм, нашедший применение в ряде
архиваторов (Ьгір2„ 1МР, ВАУС) и названнмй 1-2-кодированием. Суть его
заключается в том, что число, соответствующее количеству повторов, коди-
руется посредством двухсимвольного алфавита.
198
1і((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методи сжатия без потерь
При использовании 1-2 кодирования в связке с МТР мм отводим под
нулевой ранг не один, а два символа (назовем их 2] и 2г), увеличивая таким
образом алфавит до 257 символов. Символ, отличнмй от 2, и 2г, является
признаком окончания записи числа повторов.
Число повторов кодируется так, как зто представлено на рис. 5.15.
Число повторов Код
І 21
2 22
3 2121
4 2122
5 2221
6 2222
7 212)21
8 212і22
9 2|222і
10 2)2222
11 222і2і
12 222і22
13 22222і
14 г2г2г2
15 212(2121
Рис. 5.15. 1-2-кодирование чисел
Упражнение. Закодируйте посредством описанного алгоритма число ЗО. Како-
му числу соответствует последовательность 22222,2122?
Как можно видеть, данньїй способ обеспечивает кодирование чисел в
любом диапазоне. Зтот метод соответствует и второму из предьявляеммх
требований. Увеличение избмточности даннмх, приводящее к возрастанию
концентрадии нулевмх рангов МТР, приводит к увеличению частот симво-
лов 2] и г2. Причем если преобладают короткие последовательности МТР-0,
то частота символа 2] превосходит частоту символа 22.
Предвидя возможное замечание о том, что, например, число 7 приводит
к большему возрастанию частоти символа г2, чем число 1, отметим сле-
дующее. Как правило, распределение частот чисел повторов в среднем убьі-
вает с ростом числа, а частоти появлений близких по значенню чисел близ-
ки. Причем обьічно с ростом чисел различие частот уменьшается. Позтому:
частота числа 7 больше частоти числа 1 только в редких, скореє вьірож-
денннх случаях;
увеличение частоти числа 7 за счет преобладания над частотами чисел 8,
9 и 10 приводит к более интенсивному использованию символа гІг так
199
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.пі/
Метод» сжатия данньїх <7000+ файлов о сжатии)
как число символов в коде, соответствующем числу 7, максимально
среди всех трехсимвольних кодов.
В целом преобладание частоти символа 2| над частотой символа г2 оп-
ределяется преобладанием частоти одной группьі символов над другой
(рис. 5.16).
Группа, приводящая К росту ДОЛИ 2| Группа, приводящая к росту доли г2
1 2
3 4
5 6
7 8
3,4 5,6
7,8 9,10
11,12 13,14
7...10 11..14
15...18 19...22
Рис. 5.16. Свойства 1-2-кодирования
После двух преобразований строка "абракадабра" вьіглядела как
{4,3,2,4,3,2,0,0,0,4,0}. Подвергнем ее 1-2-кодированию. Воспользовавшись
рис. 5.16, долучим {4,3,2,4,3,2,2Ьі!,4,2]}.
Упражнение. Как будет вьіглядеть исходная строка в результате указаннмх
двух преобразований и 1-2-кодирования, если вместо обьічного применить мо-
дифицированнмй МТЕ? Для справки: после ВИ/Т и модифицированного МТЕ
бмла получена последовательность {4,3,0,4,2,0,0,0,0,4,1).
Реализация 1-2-кодирования
// Функция 1-2-кодирования.
// Вмводит последовательность СИМВОЛОВ 2І и
// г2, соответствующую числу соипЬ.
чоісі г1г2 ( іп£ соипї. ) {
// длина последовательности
іпЬ 1еп=0;
// число 0 не кодируется
і£ ( !соип£. ) геЬигп;
// находим длину последовательности
{ іпГЬ = соипС+1;
сіо { 1еп++;
С »= 1;
200
1Шр:/Лууууу.сотрге88Іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
) мЬі1е( Ь > 1 );
)
// кодирование последовательности
до { Іеп—;
риіс ((соип£ & (1«1еп)) ? х2:2І, оиіриі );
) мИіІе( Іеп );
)
11 кодирование
// использует функции г1х2()
уоід епсосіе ( 5ЛОІСІ ) {
ипзідпесі сИаг с;
іп£ соипі. “0; II число повторов
ийііе( !£ео£( іприС ) ) (
с = деіс ( іприі. );
і£ ( с == 0 ) соип£++; // считаем МТГ-0
еізе {
// вводим число МТГ-0
г1г2( соипі );
соип£ = 0;
// виводим символ, отличнмй от МТЕ_0
ри£с( с, ои£ри£ );
}
)
21x2 ( соип£ );
)
// декодирование
Vоіс^ бесоде ( уоід ) {
ипзідпесі сЬаг с;
іп£ соипі. = 0; II число повторов
нЬіІе ( ! £ео£ ( іприі: ) ) (
с = де£с ( іприі. );
// чтение последовательности г1г2
і£ ( с == 21 ) {
соипі += соипґ + 1;
) еізе і£( с == г2 ) {
соипі += соип£ +2;
) еізе {
// вьівод МТЕ-0, заданньїе числом соипі
»Ьі1е( соип£— ) ри£с ( 0, ои£ри£ );
риіс( іп[і], оиїриі );
1
}
иіііієі соип£-- ) ри£с ( 0, оиііриї: );
201
Книга написана коллективом К((р:/Лу\у\у.сотрге‘і‘ііоп.і'и/
Матодьі сжатия данньїх(7000+ файлов о сжатии)
Кодирование расстояний
В течение нескольких лет метод перемещения стопки книг бьіл непре-
менньїм атрибутом архиватора, построенного на основе преобразования
Барроуза - Уилера. В силу того, что зтот алгоритм недостаточно точно учи-
тьівал соотношение частот символов, соответствующих разньїм рангам, раз-
работчики постоянно стремились найти достойную замену.
Одним из наиболее распространенньїх бьіл подход, при котором отдель-
но строилась модель для наиболее часто используемих символов. Для таких
символов вероятности просчитьівались отдельно. Впервьіе зтот подход бьіл
описан Петером Фенвиком [18], но автору не удалось превзойти результати
модели, использующей традиционний подход. Более удачним било приме-
нение кеширования наиболее частих символов в архиваторе згір, разрабо-
танном Шиндлером [33].
Самим поздним из методов, пришедших на смену МТР, является метод
кодирования расстояний (Оізіапсе Собіп§). Первий же из архиваторов, ис-
пользующих зтот метод, сумел превзойти своих конкурентов по степени
сжатия большинства типових данньїх. Теперь, помимо архиватора ОС, ко-
дирование расстояний используют ¥В8 и 8ВС.
Били публикации, посвященнне родственному методу, названному
іпуєгзіоп Ргециепсіез авторами одной из работ [5,1]. Помимо метода кодиро-
вания расстояний, ниже ми рассмотрим и его.
Возьмем для примера ту же строку "рдакраааабб", полученную в резуль-
тате преобразования Барроуза - Уилера.
В качестве первого, подготовительного зтапа нам следует определить
первие вхождения символов в данную строку. Для зтого в начало строки
припишем все символи алфавита в произвольном, например в лексикогра-
фическом, порядке. Поскольку при декодировании ми можем проделать то
же самое, данная операция является обратимой.
Для удобства добавим в конец строки символ, означающий конец блока.
При ссьілке на зтот символ мьі можем распознать окончание цепочки символов,
от которих зта ссьілка сделана. Обозначим символ конца блока как
Итак, после зтих приготовлений наша строка виглядит как "абдкррда-
краааабб$". Причем при декодировании нам на зтом подготовительном зта-
пе известни первие символи строки, "абдкр", и последний,
строка: абдкррдакраааабб?
известние символи: абдкр $
Теперь займемся собственно кодированием расстояний. Для зтого берем
первий символ, "а", и ищем ближайший такой же. Расстояние до него равно
шести - зто число иних символов между "а". Но из зтих шести символов
202
ййр:/Лууууу.сотрге88Іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методи сжатия без потерь
нам уже известньї 4 и при декодировании мм заранее знаєм, что очередной
символ "а" никак не может попасть в зти позиции. Наша задача - закодиро-
вать номер той вакантной позиции, на которую вмпадает зтот символ. Зто
номер 6-4 = 2.
строка: абдкррдакраааабб$
известньїе символьї: абдкр..а.. $
расстояние: 2
Аналогично кодируем еще несколько символов по очереди, подсчитмвая
число точек, символизирующих незанятьіе позиции, в строке известньїх
символов.
строка: абдкррдакраааабб$
известньїе символьї: абдкр..а... . .6.$
расстояние: 28
известньїе символьї: абдкр.да... . .6.$
расстояние: 281
известньїе символьї: абдкр.дах.. . .6.$
расстояние: 2811
известньїе символьї: абдкррдак.. . .6.$
расстояние: 2811-
При кодировании первого из символов "р" вместо ссьілки на следующий
символ поставлен прочерк, потому что сразу после символа "р" находится
вакантная позиция, и зто означает, что никакой другой символ не сможет на
зту позицию сослаться. Значит, нам нет необходимости вьіполнять кодиро-
вание зтой ссьілки. В данном случае мьі наблюдаем специфический зффект,
присущий методу кодирования расстояний, которнй позволяет избежать
применения КЬЕ.
строка: абдкррдакраааабб$
известньїе символьї: абдкррдакр....б.$
расстояние: 2811-0
Поскольку очередной символ "р" занимает ближайшую вакантную пози-
цию, мьі кодируем его числом 0. Благодаря такому свойству метода кодиро-
вания расстояний, в нем достаточно легко решается проблема случайной
сменьї контекста, ради которой требовалось специально совершенствовать
метод перемещения стопки книг.
строка: абдкррдакраааабб$
известньїе символьї: абдкррдакр.... б.$
расстояние: 2811-05
203
Книга написана коллективом 1Шр:/Лууууу.сотрге88Іоп.ги/
Методи, сжатия данньн(7000+ файлов о сжатии)
Кодируя символ "д", мьі сделали ссьілку на конец строки. При декодиро-
вании такая ссьілка позволит понять, что символьї "д" закончились
(рис. 5.17).
строка: абдкррдакраааабб$
известньїе символьї: абдкррдакра...б.$
расстояние: 2811-050
известньїе символьї: абдкррдакра...6.$
расстояние: 2811-0504
известньїе символьї: абдкррдакра... б.$
расстояние: 2811-05044
известньїе символьї: абдкррдакрааааб.$
расстояние: 2811-05044—
известньїе символьї: Абдкррдакрааааб.$
расстояние: 2811-05044 —-1
известньїе символьї: Абдкррдакраааабб$
расстояние: 2811-05044 — 1-
Рис. 5.17. Кодирование расстояний
В итоге получаем последовательность { 2,8,1,1,0,5,0,4,4,1 }.
Упражнение. Вьічислите расстояния для строки "брраааакаакдрр".
Обратньіе частотьі
Есть еще один метод, похожий на описанньїй вьіше. В нем также коди-
руются расстояния между одинаковьіми символами. Отличие только в том,
что символи, для которьіх определяются расстояния, берутся не в порядке
поступлення, а исходя из некоторого фиксированного порядка. Например,
по алфавиту.
Автори данного алгоритма, названного іпуєгзіоп Ргециепсіез (ІГ), исхо-
дили из того, что расстояние между одинаковими символами характеризует
частоту использования зтих символов на данном отрезке символьной по-
следовательности. Чем расстояние меньше, тем више частота. Поясним
работу алгоритма на примере.
Предположим, нам нужно определить ІГ для строки "рдакраааабб", а
расчет расстояний будем проводить в соответствии с положением символов
в алфавите "абдкр".
Сначала запишем для символа "а" положение первого из таких символов
в исходной строке и их количество.
204
ййр:/Лууууу.сотрге88Іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Символ Первая позиция Число символов
а 2 5
Следующим шагом - для каждого из символов "а" в качестве расстояния
запишем число иньїх символов до следующего "а".
исходная строка: рдакраааабб
расстояния: 2 000
После того как все позиции символа "а" определеньї, мьі можем удалить
их из исходной строки и продолжить обработку строки, как будго их и не
бьіло (рис. 5.18).
Символ Первая позиция Число символов Строка Расстояния
а 2 5 рдакраааабб 2,0,0,0
б 4 2 рдкрбб 0
д 1 1 рдкр
к 1 1 ркр
Рис. 5.18. Вьічисление обратньїх частот
В кодировании символа "р" нет необходимости, так как заведомо из-
вестно, что он занимает оставшиеся позиции в строке. Таким образом, мьі
получилитакую последовательность: {{2,5,2,0,0,0}, {4,2,0}, {1,1}, {1,1}}.
Легко заметить, что способ и зффективность кодирования зависят от то-
го порядка, в котором мьі будем обрабатмвать символьї. Еще одно важное
отличие данного метода от кодирования расстояний заключается в том, что
он не освобождает от необходимости кодирования длинньїх последователь-
ностей нулевмх значений обратньїх частот.
Упражнение. Определите обратньїе частотьі для строки "брраааакаакдрр".
Способи сжатия преобразованньїх с помощью
ВУТТ данньїх
Перейдем к рассмотрению способов сжатия данньїх, полученньїх в ре-
зультате описанньїх вьіше преобразований. Для начала надо разобраться
с данньїми, которьіе нам необходимо сжать.
Рассмотрим фрагмент данньїх, типичньїй для текста, преобразованного
посредством В\¥Т. Для примера взят файл Ьоокі из набора "Са1§агу Согриз"
(рис. 5.19).
205
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.пі/
Матодьі сжатия данньїх(7000+ файлов о сжатии)
еЬекзеЬепсіеупкгСсІзегСХпгедепзкпдздзесіепеузитеззгпе
хдупузСзІдуедздзСззгЬтззЬеЬекзеІх+рЬпееззСНгкіезскіу
Ь+кз+ИнґрГдС+едесіпшіЬузугезргззпеепзеїдеЬдетзеСзе, С
гееЬзе£гІХезеееееезз5дее<ітп1епдее<ід£.<ідіХдзд£.1;ееу8у
ЬддепґпгхзІ^зЬЬдИп+ееегпздриІСґепзесіеїізїеезиекЬеее
+епеееезез1Леепез+гпдзїкзсІдеуеуг+ееЬк1гс11еМ:еуосІ+Ь
еедеегсезуССезесІепг1ігезпуззд1іЬззІ8а«ззудзззге»ппзЬї
дС,еСзздеЬпеЬеззззеИпеезездпгпекй^гззІЬЬдззеез^зіе
пЬдеееззезсІезугкіСгсіЬреезеНезеСзгегИуездпиїїггЬозез
ИвеЬсігрї.ЬІ:здЬаупепеЬупСрдзЬезкпйуз£1.здззсІ£+д+ееесіи
Рис. 5.19. Однородний фрагмент
Можно заметать, что распределение символов на зтом фрагменте
(рис. 5.19) меняется незначительно. Совсем другую картину мьі можем на-
блюдать на рис. 5.20, когда преобладание одних символов сменяется пре-
обладанием других.
удеідзд,, ССуодсіосІдсІесІпсіудптоСесІдикдодоом+сІоддСо+еі.
С.п<ітеддкггіздЬоЬІ:дедЬеддгзіСкі.еді:ддеидддооо<:ддсІп+еС
з+зСіі+з+1:! ие+їЛсі+Ье-еІїїеїпу, ЬеЬЬІЬдгІЬЬуІ^ЬпЬСугЬ
сідькдпйе;
ед, сі, з£е£ое£зз£гзпззі.уз1и, їпоеадеге, гїееупз£о£Иупп
пуоуССед, у£песіЬісі<ії.о1сІ£пуЬппЬугі.угу1:£тегуез£оуе£іпеу
оутд, зесіездпггзузпззтусіззрсіуС1 -дззеЬз, дупздуддее1 о
сіеГсісІеупС,, +сіпд, оз; зССуузо£у-ппеЬодп£еС.дпу1<11емЬе-
одзСЬетзЬзсіСзуСепу, пддеіз, -ої£зппї:еіХзеуезд1еау :ез
дЬзддІІгедкзугуез, г!дозЬз;дЬ<іее£ддЬз£гегдкддпдкепш
Рис. 5.20. Изменяющийся фрагмент
Также бьівают случай, когда на протяжении всего фрагмента явно пре-
валирует один определенньїй символ (рис. 5.21).
едеееееіеудеуеееі: ’ еееіееееееееееееееееееееееіеееее
еееееее!ееееіеееееееееееееееееееееееуедееегеееіеее
еееееееееезіуасіеееееееееуеееееееееееееесіуегезеееее
еіиееееееуееееееіззезееіі 'ее!е1.епЬуа1еЬсезуузееззп
з'д!ез££ао,гіГГеееееееееееееееееееееееееееееееТееее
еееееееееееееееееееееееееееееееее+ееееееееееееееее
ееееееееееаегге, зее, еуиезідзузгійедеееііаееезаееуесіо
Рис. 5.21. Фрагмент с преобладанием одного символа
Итак, вьіделим 3 вида данньїх:
1) на протяжении всего фрагмента несколько символов имеют постоян-
ную частоту;
2) промежуток в фрагменте, когда преобладание одних символов сменя-
ется преобладанием других;
3) один из символов встречается намного чаще других.
206
КНрі/Луууху.сотрге^іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Одна из задач вибираемой модели заключается в том, чтобьі позволить
оперативно настроиться на текущий вид данньїх.
Сжатие при помощи кодирования по алгоритму Хаффмана
Указанньїе свойства преобразованньїх данньїх использует алгоритм, реа-
лизованньїй в архиваторе Ьгір2 и позднее позаимствованньїй также разра-
ботчиками архиватора ІМР.
После преобразований В\УТ и МТР блок данньїх делится на равньїе 50-
символьньїе куски. Полученнме куски обьединяются в группьі по степени
близости распределений МТР-рангов. Количество групп зависит от размера
файла. Например, для мегабайтового файла таких групп будет шесть.
Группирование кусков вьіполняется итеративно. Изначально куски при-
письіваются группам в порядке следования в блоке так, чтобм каждой груп-
пе соответствовало примерно равное количество кусков. Для каждой груп-
пьі строится отдельное дерево Хаффмана. В архив записмваются деревья
Хаффмана, номер группьі для каждого из 50-символьного кусков, а затем
все куски сжимаются по алгоритму Хаффмана в соответствии с номером
той группи, к которой они относятся.
Вьібор группьі для куска делается на основе подсчета длиньї закодиро-
ванного куска, которьій получится при использовании каждого из постро-
енньїх деревьев Хаффмана. Вьібирается та группа, при виборе которой код
получается короче. Поскольку после зтого статистика исподьзования сим-
волов в группах меняется, по завершений обработки блока деревья для каж-
дой группи строятся заново. Практика показивает, что вполне достаточно
четирех итераций для получения приемлемого сжатия. С каждой новой ите-
рации прирост зффективности резко уменьшается.
Такой способ кодирования назьівается полуадаптивннм алгоритмом
Хаффмана. Полуадаптивность заключается в том, что адаптация происходит
за счет вибора подходящего дерева Хаффмана для очередного куска дан-
ньїх, а не за счет перестройки текущего дерева.
Сжатие по алгоритму Хаффмана довольно зффективно, хоть и уступает
алгоритмам, в которих реализовано арифметическое сжатие, но зато замет-
но бистреє при декодировании.
Алгоритми, использующие кодирование по методу Хаффмана, довольно
зффективни, хоть и уступают алгоритмам, в которих реализовано арифме-
тическое сжатие
Структурная и пер архическая модели
Отметим основное свойство таких преобразований, как МТР, ПС и ІР: на
большинстве данньїх, полученньїх в результате преобразования Барроуза -
Уилера, мальїе значення встречаются гораздо чаще больших и легче подда-
207
Книга написана коллективом Кйр:/Лу\у\у.сотрге‘і‘ііоп.і'и/
Методьі сжатия данньїх(7000+ файлов о сжатии)
ются предсказанию. Зто свойство очень важно учитивать при построении
адаптивних моделей, использующих арифметическое кодирование.
Анализируя перечисленнне вьіше 3 вида фрагментов, можно отметить
некоторие особенности, которими можно воспользоваться при моделиро-
вании:
большое количество идущих подряд одинакових символов свидетельст-
вует о том, что вероятно появление такой же длинной их последователь-
ности и в будущем;
появление символа, довольно давно встречавшегося последний раз, го-
ворит о том, что вероятна смена устойчивого контекста, а следовательно,
и наиболее частие до зтого символи могут смениться другими.
Указаннме свойства послужили причиной того, что практически все реа-
лизации сжатия на основе преобразования Барроуза - Уилера уделяют по-
вншенное внимание наиболее частим в текущем фрагменте символам. Для
обработки редких символов важна лишь приблизительная оценка возмож-
ности их появлення.
Рассмотрим две модели, обладающие описанними качествами, - струк-
турную и иерархическую [18].
Структурная модель. Кодирование символа осуществляется в два зта-
па. Сначала кодируется номер группи, к которой зтот символ относится.
А затем - номер символа внутри группи.
Размери групи различньї. Наиболее частие символьї помещаются в
группи, состоящие из небольшого числа символов. Предложенная Петером
Фенвиком структурная модель предполагает самостоятельное существова-
ние 0-го и 1-го ранга, т. е. каждий из них представляет собой отдельную
группу. В следующую (третью по счету) группу помещаются 2-й и 3-й ранг,
затем - с четвертого по седьмой и т. д. (рис. 5.22).
Группа Кодируемие ранги
0 0
1 1
2 2 3
3 4 5 6 7
8 128 129 ... 255
Рис. 5.22. Структурная модель
Ниже, рис. 5.23, приводятся частоти групп для файла Ьоокі при исполь-
зовании обнчного и модифицированного МТР.
208
ййр:/Лууууу.сошрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Номер группьі МТЕ обьічньїй, % МТЕ модифицированний, %
0 49.77 51.44
1 15.36 14.93
2 13.19 12.41
3 11.05 10.72
4 8.28 8.16
5 2.14 2.13
6 0.20 0.20
7 0.01 0.01
8 0.00 0.00
Рис. 5.23. Статистика распределения рангов в группах структурной модели
Иерархическая модель. Зта модель также делит символьї на группьі.
И по такому же принципу. Отличие заключается в том, что в каждую груп-
пу добавляется символ, означающий уход к группе, находящейся на более
низкой ступеня иерархии (рис. 5.24).
Рис. 5.24. Иерархическая модель
Зксперимент [16] показал, что структурная модель позволяет достичь
немного лучшего сжатия и, в силу того, что для каждого символа в среднем
требуетея меньше операции арифметического кодирования, чуть бистреє.
Размер блока
Один из важньїх вопросов, которьій встает перед разработчиком архива-
тора на основе преобразования Барроуза - Уилера, заключается в виборе
размера блока.
В\¥Т - алгоритм, дающий наилучшую результативность при сжатии од-
нородньїх данньїх. А однородньїе данньїе предполагают наличие устойчи-
209
Книга написана коллективом Шр:/Лууууу.сошрге88Іоп.пі/
Методи сжатия данних(7000+ файлов о сжатии)
вьіх сочетании символов. А раз сочетания не меняются, то увеличение раз-
мера блока приведет только к увеличению числа одинаковьіх символов, на-
ходящихся рядом в результате преобразования. А увеличение количества
находящихся рядом символов вдвоє в идеале требует всего одного дополни-
тельного бита при кодировании. Таким образом, для однородньїх данньїх
можно сделать однозначний вмвод: чем блок больше, тем сжатие будет
сильнеє. Ниже приведенм зкспериментальньїе даннме сжатия файла Ьоокі
из набора Са1§СС. Тестирование производилось на компьютере следующей
конфигурации:
Процессор Частота шиньї Оперативная память Жесткий диск Операционная система Іпіеі Репііит III 840 МГц 140 МГц 256 Мб БОКАМ Риапіит РВ 4.3 Гб ХУіпйоууї N7 4.0 Бєгуісє Раск 3
Размер блока, Кб Ьхір2 1.01 Размер сжатого файла, байт Ьхір21.01 Время сжатия, с ¥ВЗ О.ОЗе Размер сжатого файла, байт ¥В$ О.ОЗе Время сжатия, с
100 270,508 0.61 255,428 0.65
200 256,002 0.66 239,392 0.66
300 249,793 0.71 232,681 0.71
400 243,402 0.72 225,659 0.73
500 242,662 0.73 224,782 0.74
600 241,169 0.75 222,782 0.76
700 237,993 0.76 218,826 0.77
800 232,598 0.77 213,722 0.77
Что касается данних неоднороднмх, то здесь картина иная. Размер блока
надо вибирать таким, чтобм его край приходился на то место, где даннме
резко меняются. Причем для ВХУТ страшна не сама неоднородность как та-
ковая, а изменение статистики символов, предсказмваеммх устойчивмми
контекстами. Например, нас не должен пугать тот факт, что в начале файла
часто встречаются строки "аЬссГ, а в конце их место занимают "е?£Іі". Го-
раздо неприятнее, когда вместо строк "аЬссі" начинают появляться строки
"аЬцЬ". Зто не означает, что файл, в котором наблюдается вторая ситуация,
сожмется при помощи ВХУТ-компрессора очень плохо. Но разница в сжатии
по сравнению с архиваторами, использующими, например, словарнме мето-
ди, на таких данньїх будет не в пользу В ХХЛТ.
Для иллюстрации зависимости зффективности сжатия неоднороднмх
данньїх от размера блока сожмем исполниммй файл из дистрибутива ком-
пілятора ХУаісот 10.0, \усс386.ехе (536,624 байта).
210
1ійр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Размер блока, Кб Ьхір2 1.01 размер сжатого файла, байт ЬгІр2 1.01 время сжатия, с ¥ВЗ О.ОЗе размер сжатого файла, байт ¥ВЗ О.ОЗе время сжатия, с
100 309,716 0.66 279,596 0.60
200 308,668 0.66 277,312 0.61
300 308,812 0.66 277,285' 0.61
400 309,163 0.66 277,374 0.60
500 307,131 0.66 274,351 0.60
600 308,624 0.66 276,026 0.60
ГІЕРЕУПОРЯДОЧЕНИЕ СИМВОЛОВ
В отличие от многих других методов сжатие, основанное на преобразо-
вании Барроуза - Уилера, заметно зависит от лексикографического порядка
следования символов. Замечено, что символьї, имеющие сходное использо-
вание в словообразовании, лучше располагать поблизости.
Возьмем такие часто встречающиеся окончания слов русского язика, как
-ьій и -ий. Легко заметать, что им в большинстве случаев предшествуют од-
ин и те же символьї, например буква "н". Если зти окончания в результате
сортаровки каким-то образом окажутся в начале соседних строк матрицьі
перестановок, мьі получим в последней столбце рядом стоящие одинаковьіе
символьї.
Зтот зффект особенно заметен на текстових файлах. Для разньїх язнков
нюанси внбора лучшего переупорядочения символов могут отличаться, но
общее правило таково - все символи надо поделить на 3 лексикографически
отдельньїх группи: гласние, согласние и знаки препинания.
Файл Размер архива, байт
Ьхір2 1.01 ¥ВЗ О.ОЗе
Ьоокі 232,598 213,722
Ьоокі, после переупорядочения сим- волов 231,884 212,975
НАПРАВЛЕНИЕ СОРТИРОВКИ
Можно сортировать строки слева направо и в качестве результата преоб-
разования использовать последний столбец матрици отсортированннх
строк. А можно - справа налево и использовать первий столбец. Как делать
лучше с точки зрения степени сжатия?
Первая стратегия подразумевает предсказание символа исходя из того,
какие символьї за ним следуют, а вторая - исходя из того, какие били рань-
те. В литературе для обозначения зтих двух направлений используются
словосочетания "£о11оауіп§ сопіехіз" и "ргесесііп§ сопіехів" соответственно
(правосторонние и левосторонние контексти).
211
Книга написана коллективом К((р:/Лу\у\у.сотрге‘і‘ііоп.і'и/
Методьі сжатия данньїх(7000+ файлов о сжатии)
Практика показьівает, что большинство архиваторов, использующих
традиционньїе ВХУТ и МТГ, достигают лучшего сжатия на текстових дан-
ньїх при использовании правосторонних контекстов. Для данньїх, имеющих
"не лингвистическую" природу, лучше использовать левосторонние контек-
сти. Например, зто справедливо для исполнимих файлов.
Для компрессоров, которне не используют МТР, а проблему адаптации
кодера к потоку преобразованньїх данньїх решают как-то иначе, внбор на-
правлення сортировки может бить иньїм. Например, ВС и ¥В8 многие ис-
полнимне файли, как и текстовьіе, сжимают лучше при сортировке слева
направо.
Проделать самостоятельное сравнение очень просто. Возьмите ваш лю-
бимий архиватор и сожмите с его помощью ваш любимий файл. Затем пе-
реверните даннне зтого файла наоборот, сожмите полученное и сравните
результати.
Файл Направление сортировки Размер сжатого файла, байт
Ьхір2 1.01 ¥В8 О.ОЗе
Ьоокі ҐОІІО\¥ІП£ С0ПІЄХІ8 232,598 213,722
Ьоокі ргеседіпя СОПІЄХІ8 234,538 214,890
\усс386.ехе ГоПоМПЕ СОПІЄХІ8 308,624 276,026
\усс386.ехе ргесейіпв СОПІЄХІ8 306,020 279,198
Некоторне программи самостоятельно пьітаются определить тип дан-
ньїх и вибрать направление сортировки. Иногда, впрочем, ошибаясь. Про-
стейший способ обмануть такой архиватор - дать ему сжать русский текст.
Сортировка, используемая в ВУУТ
Сортировка- зто очень важний компонент архиватора, реализующего
сжатие на основе преобразования Барроуза - Уилера. Именно от нее зависит
скорость сжатия. До недавнего времени именно сортировка била узким ме-
стом. В настоящее время моделирование стало достаточно сложньїм, чтобн
конкурировать по времени работн с процедурой сортировки, реализации
которой, напротив, совершенствуются в сторону ускорения. Но и теперь
возможна ситуация, когда характеристики сжимаемьіх данньїх таковн, что
могут существенно замедлить сортировку.
Основнме требования к сортировке заключаются в том, что она должна
обеспечивать бмстрое сжатие обьічнмх (преимущественно текстових) дан-
ньїх и не приводить к существенному замедлению на очень избиточних
данньїх.
Помешать сортировке могут два вида избьіточности - когда в сортируе-
мьіх данних содержатся:
212
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методь/ сжатия без потерь
• длинньїе одинаковьіе строки;
короткие одинаковьіе строки в большом количестве.
Отдельньїй случай представляют собой большое число идущих подряд
одинаковьіх символов или длинньїе последовательности перемежающихся
символов типа "абабабаб".
Что касается текстовьіх файлов, наиболее часто встречаемая длина по-
вторяющихся строк - 3-5 символов. Для файлов с исходньїми текстами про-
грами, как правило, зта длина несколько больше - 8-12 символов.
Рассмотрим алгоритми сортировок, получившие наибольшую извест-
ность.
СОРТИРОВКА БЕНТЛИ - СЕДЖВИКА
Данньїй алгоритм получил, пожалуй, наибольшее распространение среди
всех известньїх сортировок. Впервьіе он бьіл применен еще одним из осно-
воположников - Уилером. Затем зта сортировка бьіла реализована в Ьгір2 и
других архиваторах (В^С, ВА, ¥В8).
Сортировка Бентли - Седжвика (Вепііеу - §ед§емгіск) представляет со-
бой модификацию бьістрой сортировки (диіск-зогі), ориентированной на
сравнение длинньїх строк, среди которьіх может сказаться значительное ко-
личество похожих.
Главиая идея описьіваемой сортировки заключается в том, что все срав-
ниваемьіе с зталонной строки делятся не на 2, а на 3 группьі. В третью
группу входит сама зталонная строка и строки, сравниваемьіе символьї ко-
торьіх равньї соответствующим символам зталонной строки.
Вьіделение третьей группьі помогает нам уменьшить число операций
сравнения строк, имеющих много совпадающих подстрок. В зту группу по-
падают строки с одинаковьіми начальними символами, что избавляет нас от
необходимости сравнивать зти символи еще раз.
Работу алгоритма можно описать при помощи следующего исходного
текста на язьіке Си:
уоісі зогб(сЬаг **з, іітЬ п, іпї. сі) {
сЬаг **з_1езз, **з_ед, **з_дгеаїег;
іпї. *п_1езз, *п_ед, *п_дгеабег;
// вьібор значення, с которьім будут
// сравниваться д-е символьї строк
сЬаг V = сЬоо8е_уа1ие(&з,сі);
// осталась только одна строка
і£ ( п <= 1 ) гебигп;
// деление всех строк на группм
213
Книга написана коллективом 1Шр:/Лууууу.сотрге88Іоп.ги/
Методи сжатия данньїх(7000+ файлов о сжатии)
сотраге(8з, V, <і,
// строки, сі-й символ которих меньше V
&3_ІЄ53, &п_1езз,
// строки, сі-й символ которих равен V
&з_ед, &п_ед,
// строки, сі-й символ которих больше V
&з_дгеабег, &п_дгеабег);
зогб (&з_1езз, п_1езз, сі);
зогї(&з_ед, п_ед, д+1);
зогб (&з_дгеабег, п_дгеабег, СІ);
)
Данная рекурсивная функция сортирует последовательность из п строк $,
имеющих б одинаковьіх начальних символов. Самий первьш вьізов вьігля-
дит как 8огі(8,п,0);
Разумеется, с течением времени придуммвалось все больше ухищрений,
ускоряющих работу сортировки Бентли - Седжвика применительно к В\УТ.
Перечислим основньїе из них.
1. Поразрядная сортировка. При большом количестве сортируемьіх строк
предварительно осуществляется поразрядная сортировка по нескольким
символам. По результату поразрядной сортировки строки делятся на па-
кети, каждьій из которих обрабатьівается при помощи сортировки Бент-
ли - Седжвика.
2. Использование результата предмдущих сравнений для последующих.
После окончания сортировки некоторого количества строк можно легко
отсортировать строки, начинающиеся на один символ раньше отсорти-
рованних. Для зтого достаточно сравнить только первме их символи,
а дальше - воспользоваться результатами предьідущей сортировки.
3. Сравнение не одиночних символов, а одновременно нескольких. Боль-
шая разрядность современнмх компьютеров позволяет вмполнять опе-
рации сразу над несколькими символами, обмчно представляеммми бай-
тами. Например, если команди процессора позволяют оперировать 32-
разряднмми даннмми, то можно осуществлять одновременное сравнение
4 байт.
4. Неполная сортировка. В результате преобразования Барроуза - Уилера
ми должни получить последовательность символов последнего столбца
матрицм перестановок. Нам не важно, какая из двух строк будет лекси-
кографически меньше, если им соответствуют одинаковьіе символьї по-
следнего столбца. Позтому ми можем избежать лишних сравнений при
сортировке строк.
214
КНрі/Луууху.сотрге^іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Сортировка суффиксов
Применяя данную сортировку, мьі исходим из того, что нам приходится
сортировать строки, каждая из которьіх является частью другой, начинаю-
щейся с более ранней позиции в блоке, т. е. является ее суффиксом. Задача
сортировки суффиксов неразрьівно связана с построением дерева суффик-
сов, которое помимо сжатия данньїх может бьіть также использовано для
бистрого поиска строк в блоке.
Главное свойство всех суффиксньїх сортировок заключается в том, что
время сортировки почти не зависит от данньїх. Опишем одну из полупив-
ших большую известность суффиксннх сортировок, которая била опубли-
кована в 1998 г. Кунихико Садакане.
Рассмотрим алгоритм на примере. Введем обозначения:
X -массив суффиксов Х[/], каждьій из которнх представляет собой
строку, начинающуюся с і-й позиции в блоке;
І -массив индексов суффиксов; положение индексов в зтом массиве
должно соответствовать порядку лексикографически отсортированньїх суф-
фиксов;
У[і] - номер группьі, к которой относится суффикс ХИ; сортировка вн-
полняется до тех пор, пока все значення в V не станут разнмми;
8 [і] - число суффиксов, относящихся к группе і;
к - порядок сортировки.
Как всегда, будем производить преобразование Барроуза - Уилера строки
"абракадабра$" (добавим к строке символ "$", означающий конец строки).
Шаг 1. Упорядочим все символьї строки (для определенности предпо-
ложим, что символ конца строки имеет наименьшее значение).
Затем заполним массив І значеннями, равньїми позициям зтих символов
в исходной строке.
В массив V запишем по порядку номера групп, оставляя место для еще
не упорядоченннх злементов. Так, для символа "б" укажем номер группьі,
равньїй шести, чтобн оставить возможность для упорядочения всех пяти
строк, начинающихся с символа "а".
И наконец, в массив 8 запишем размерн полученньїх групп. Небольшая
хитрость, придуманная автором описнваемого алгоритма, заключается в
том, чтобн для групп, в которнх осталась только одна строка, записнвать
отрицательное значение, равное количеству упорядоченннх суффиксов до
ближайшей неотсортированной группьі. Зто существенно ускоряет работу в
случаях, когда у нас становится много отсортированньїх групп (на текстах
такой момент, как правило, наступает уже на 3-4 шаге сортировки).
215
Книга написана коллективом Шір:/Лууууу.сошрге88Іоп.пі/
Методьі сжатия данньїх (7000+ Файлов о сжатии)
Позиции: 0 1 2 3 4 5 6 7 8 9 10 11
Исходная строка: а б Р а к а д а б Р а $
Упорядоченньїе символьї: $ а а а а а б б Д к р Р
Ці] 11 0 3 5 7 10 1 8 6 4 2 9
VII[і] ] 0 1 1 1 1 1 6 6 8 9 10 10
3 [і] -1 5 2 -2 2
Шаг 2. Таким образом, завершена обработка суффиксов порядка к=0,
т. е. одиночних символов. Теперь отсортируем пари (к=1). Для сортировки
суффиксов каждой группьі нам потребуются только значення номеров
групп суффиксов (обозначаемьіх далее как Хк), находящихся на к символов
правеє сортируеммх суффиксов. Например, для сортировки группьі 1, соот-
ветствующей символу "а", нам потребовались группьі 6, 9, 8, 6 и 0 от сим-
волов "б", "к", "д", "б" и
Позиции: 0 1 2 3 4 5 6 7 8 9 10 11
Исходная строка: а б Р а к а д а б Р а $
Упорядоченньїе символьї: $ а а а а а б б д к р Р
Суффикс Хк а б к д б $ Р р а а а а
VII [і]+1] 1 6 9 8 6 0 10 10 1 1 1 1
Пари: $а аб ак ад аб а$ бр бр да ка ра ра
После сортировки номеров групп:
VII[і]+1] 106689 10 10 1111
Упорядоченнме пари: $а а$ аб аб ад ак бр бр да ка ра ра
І [і] 11 10 0.753186429
VII[І] ] 0122456689 10 10
3 [і] -2 2 -2 2 -2 2
Шаг 3. Поскольку все пари теперь отсортированьї, можно упорядочить
четверки. Для зтого каждую группу (которме представляют собой суффик-
сьі, начинающиеся с одинаковьіх пар) отсортируем в соответствии с парой
символов, следующих после зтих одинаковьіх пар. Прочерками отмеченьї
уже отсортированньїе суффиксьі, которьіе дальше обрабатьівать нет необхо-
димости.
Позиции: 0 1 2 3 4 5 6 7 8 9 10 11
Исходная строка: а б Р а к а д а б Р а $
Упорядоченньїе парьі: $а а$ аб аб ад ак бр бр да ка ра ра
Суффикс Хк - - ра ра - - ак а$ - - ка $а
У[ЦІ]+2] 10 10 5 1 9 0
216
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
После сортировки номеров групи:
Суффикс Хк ра ра - а$ ак - $а ка
VII[і]+2] 10 10 1 5 9 0
І [і] 11 10 0 7 5 3 8 1 6 4 9 2
VII[і]] 0 12 2 4 5 6 7 8 9 10 11
3 [І] -2 2 -8
Шаг 4. Как можно заметать, нам осталось отсортировать всего одну
группу, состоящую из двух злементов.
Позиции: 0 1 2 3 4 5 6 7 8 9 10 11
Исходная строка: а б Р а када б Р а $
Упорядоченнме четверки: $абр - абра абра - - - - - када -
Суффикс Хк - - када $абр - - - -
VII [і]+4] 9 0
После сортировки номеров групп:
VIIІІ]+41 0 9 1 5 9 0
І [і] 11 10 7 0 5 3 8 1 6 4 9 2
VII ІІ]] 0 12 3 4 5 6 7 8 9 10 11
3 [і] -12
Таким образом, мм полупили упорядоченнме суффиксм, индексм кото-
рьіх записаньї в массиве І (рис. 5.25)
І І [і] Суффикс
0 11 $
1 10 а$
2 7 абра$
3 0 абракадабра$
4 5 адабра$
5 3 акадабра$
6 8 бра$
7 1 бракадабра$
8 6 дабра$
9 4 кадабра$
10 9 ра$
11 2 ракадабра$
Рис. 5.25. Результат сортировки суффиксов
Упражнение. Вьіполните сортировку строки "іоЬеотойоЬе", используя описан-
ими алгоритм.
217
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.пі/
Методи сжатия данньїх(7000+ файлов о сжатии)
СРАВНЕНИЕ АЛГОРИТМОВ СОРТИРОВКИ
Поскольку скорость сортировки во многом определяет бьістродействие
компрессоров, осуществляющих сжатие при помощи преобразования Бар-
роуза - Уилера, над совершенствованием алгоритмов сортировок постоянно
ведется работа. Можно отметить, что исследователи, тяготеющие к пракги-
ческому применению, уделяют особое внимание сжатию типичньїх файлов,
в то время как большинство публикаций в научньїх изданиях посвящено ме-
тодам, позволяющим реализовать сортировку, устойчивую к вьірожденньїм
данньїм.
Для сравнения методов сортировок полезно ввести понятие средней
длиньї совпадений (Ауега§е МаісЬ Ьеп§1Ь, АМЬ), вьічисляемой по следую-
щей формуле:
АМЬ = § О(Х[І[І]],Х[І[І +1]]),
где N - размер блока данньїх, подвергаемого преобразованию; X - массив
суффиксов Х[і], каждьій из которьіх представляет собой строку, начинаю-
щуюся с і-й позиции в блоке; І - массив индексов лексикографически упо-
рядоченньїх суффиксов; П(х,у) - число совпадающих символов в одинако-
внх позициях строк х и у, начиная от первого символа строки и заканчивая
первьім несовпадением.
Исследования показали, что время, затрачиваемое суффиксной сорти-
ровкой, пропорционально логарифму средней длиньї совпадений, в то время
как алгоритми, основанньїе на бьістрой сортировке или сортировке слияни-
ем, демонстрируют, как правило, линейно-пропорциональную АМЬ зави-
симость. Впрочем, справедливости ради стоит отметить, что усовершенст-
вования алгоритма сортировки Бентли - Седжвика, описаннме вище, су-
щественно сокращают время сортировки, и позтому зтот алгоритм зачастую
не уступает суффиксной сортировке даже на ряде вьірожденньїх данних.
Цена такой устойчивости - повишенньїе накладньїе расходи на ее обес-
печение.
Для сравнения ниже приведеньї зкспериментальньїе даннне, полученньїе
на компьютере с процессором Іпіеі Репііит 233 МГц и оперативной памя-
тью 64 Мб. Били внбраньї одни из наиболее оптимизированних представи-
телей В\УТ-компрессоров для виявлення слабих и сильних сторон различ-
ньїх методов. Требования к памяти участвующих в зксперименте програми
довольно близки (от 6 до 8 размеров блока).
ПС 0.99.015Ь (автор - Здгар Биндер). В данном архиваторе использова-
ни поразрядная сортировка и сортировка слиянием.
218
ййр:/Лууууу.сошрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методь/ сжатия без потерь
В А 1.01Ьг5 (Микаель Лундквист), УВ8 О.ОЗе (Вадим Юкин), АКС (Ян
Саттон). Во всех трех программах нашла своє применение сортировка
Бентли - Седжвика вместе с поразрядной. Еще стоит упомянуть 8ВС
0.910 (Сами Мякинен), которая не участвовала в зксперименте по при-
чине невозможности вьіделить сортировку отдельно от всех остальних
процедур.
р8и£ (Ларссон и Садакане). В зтой программе реализована только суффикс-
ная сортировка, немного улучшенная по сравнению с описанной вьіше.
Для зксперимента использовались следующие файли:
Ьоокі из тестового набора "Саі^агу Согриз", как файл, обладающий ос-
новними свойствами типичннх текстов. Размер файла - 768 771 байт;
П1е2 (1 000 000 байт). Зтот файл бьіл составлен из нескольких больших
одинакових частей, позаимствованньїх из файла Ьоокі. Бьіл сконструи-
рован для проверки умения алгоритмов сортировки упорядочивать
длинние одинаковие строки;
\¥аі.с (1 890 501 байт). Файл исходних текстов, полученний путем слия-
ния исходних текстов, поставляемнх с дистрибутивом компилятора
ХУаісош С 10.0. Как уже отмечалась више, средняя длина устойчивого
контекста у таких файлов немного више, чем у типичних текстов;
кеппеду.хіз (1 029 744 байта). Данннй файл использовался для анализа
способности сортировщиков обрабатьівать большое количество одина-
кових строк небольшой длиньї.
Ьоокі Л1е2 «гаі_с кеппесіу
О8иГ ♦ 3.30 9.23 10.00 4.23
УВ8 3.13 4.77 6.76 4.15
ОС 2.36 4:23.59 6.92 2.97
АКС 4.17 4.34 6.43 5.00
ВА 4.45 5.82 7.36 4.73
Ьхір2 ♦♦ 3.03 4.23 6.81 4.07
* В программе ^8и/реализована только сортировка, без сжатия и записи ин-
формации в файл. Зто необходимо учитьівать при сравнении бьістродействия. На-
пример, архиватор УВ8 потратил на сжатие преобразованного файла Ьоокі при-
мерно 1 с.
** Архиватор Ьгір2 приведен только для справки, так как в нем реализована
сжатие на основе метода Хаффмана, а в остальньїх используется арифметиче-
ское, которое заметно медленнее, но дает существенно лучшее сжатие (на 5-
10 %). Хроме того, максимальний размер блока, которьій позволяет использовать
Ьгір2, - 900 Хб, что не позволяет достичь должного сжатия всех файлов, кроме
Ьоокі. Хотя и дает небольиіой прирост в скорости (2-3 % на файле у^аі.с). Увели-
чение размера блока до размера файла могло бьі замедлить скорость сжатия фай-
ла юаі.с на 2-3 %.
219
Книга написана коллективом Й11р:/Лууууу.сотрге88іоп.ги/
Методьі сжатия данньїх (7000+файлов о сжатии)
По результатам зксперимента можно сделать наблюдения:
1. Представитель алгоритмов, реализующих сортировку суффиксов, вел
себя довольно ровно, хотя на типичньїх файлах оказался на последнем-
предпоследнем месте. Как уже отмечалось, суффиксная сортировка хо-
роша, но уж больно велики накладньїе расходьі.
2. ПС провалился именно там, где ожидалось, - на длинньїх совпаден:^;
Архиваторьі, использующие бьіструю сортировку, потенциально г*
отстать от конкурентов на данньїх с большим количеством лексі-
фически упорядоченньїх совпадений. В принципе МОЖНО усп.-
роться и с теми и с другими слабостями. Но можно предполс
на типичньїх файлах скореє всего сортировка слиянием остя”
на коротких контекстах, а сортировка Бентли - Седжвика
(что видно на примере файла хуаі.с).
3. Можно бьіло рассмотреть частичное сортирующее преобр-
честве альтернативного преобразования, не требующего тя-
при сортировке. Но здесь уже появляются другие требов>
ковке - ббльшие затрати памяти и времени. И как правш-
шее сжатие.
Хотя сортировка суффиксов и не зависит от избьіточно'
типичньїх данньїх методьі, использующие бьіструю сорті
ровку слиянием, оказьіваются бьістрее.
Архиваторьі, использующие ВУУТ и ЗТ
Довольно бьістро после опубликования статьи Батю*
появляться первме компрессорьі. Зто обьясняется, во-—
метод оказался хорошим компромиссом между бмс
использующими словарное сжатие, и медленньїми п-
стическими компрессорами. Во-втормх, авторм соя
шают некоммерческое использова.
С тех пор количество програми, использующих
уза - Уилера, непрерьівно растет. Ниже приведена
мянутм наиболее интересньїе из них.
Компрессор и версия Датьі Автор
ВКед* 06.1997 О.). Жіееіег Йр://Йр.с1.сап.
XI -ш7 0.95 05.1997 Уаіепііпі таіііо :х 1 <1е уеіор^ 1ИІр://мг\¥іу.8аипа1аііі..
В\УС 0.99 01.1999 ХУіІІет Мопзііуує таіИо:туі11епі@8іаск .п Йр://йр.8іаск.п1/риЬ/и8'
220
1і((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Компрессор и версия Датьі Автор Адреса
ІМР -2 1.12 У/іпІтр 1.21 01.2000 09.2000 Сопог МсСагіЬу таі1іо:ітр@іесЬпе1у8Ішп.сот.аи Ьйр:/Ам'\¥'\уЛесНпе1у8Іит.сот.аи/ Нйр :/Лу\у\у.ууіпітр.сот
вгір 1.12 03.2000 МісЬаеІ ЗсЬіпдіег таі1іо:тіс1іае1@сотрге58соп8и1і.сот Ьіір:/Лу\у\¥.сотрге88сопвик.сот/
Ьгір2 1.01 (Ьгір 0.21) 06.2000 Зиііап Беууапі таі11о:І8е\уагсі@аст.ог£ Ьир://8оигсе\уаге.су8пи8.сот/Ьгір2
ОС 0.99.2986 08.2000 Есі^аг Віпсіег таі11о:Е<І8агВіп(1ег@Ьоп1іпе.сіе Йр://Йр.е1Г.8іиЬа.8к/риЬ/рс/раск
¥В8 О.ОЗе 09.2000 Уасііт Уооскіп таі11о:уооскіпу@тіи-пеі.ги таі1іо:уу@йіегто8уп.сот НИр:// сотрге88Іоп.£гарЬісоп.~/уЬ8
В А 1.01Ьг5 10.2000 Мікаеі Ьипск]УІ8І таі1іо:тікае1@2.8ЬЬз.8е Ийр://Ьет.8ргау.8е/тікае1.1ип<іяуІ8І
2гір 0.36с 06.2001 Иатіеп Вебіп таі1іо:<іатіеп.<іеЬіп@уіа.еср.& 1Шр:/Лу\УАУ.гхір.£28.сот/
8ВС0.910Ь 11.2001 Баті Макіпеп таіііо:8)т@рр.іпеі.Гі Ьйр://ш«пу.веосіііе8.сот/8Ьсагс1ііуег
ЕКІ 5.0ге 12.2001 Аіехапйег КаіивЬпуак таіко:аПе8і@іпЬох.ги Ьйр://8еосіііе8.сот/егі32
ОСА 0.9к 12.2001 8Ніп-ісЬі Твигиіа таі1іо:8уп8уг@рор21 .о<іп.пе.)р Ьйр://\уіу\у 1 ,осіп.пе.)р/~8уп8уг/
7-2ір 2.30612 01.2002 І^ог Рауіоу Маіііо: 8иррогі@7-гір.ог§ Нир://«пУ5У.7-гір.огв
Семейство програми ВКесі, ВКесі и ВКебЗ написано одним из родона-
чальников В\¥Т - Давидом Уилером. Многие идеи, использованнме в зтих
компрессорах, описанм в работах Петера Фенвика [18] и нашли своє приме-
нение в ряде других програми, например в XI.
Вгір использует адаптированную к В\УТ сортировку Бентли - Седжвика,
во многом позаимствованную из вьішеупомянутого семейства. После В\УТ
вмполняется преобразование методом стопки книг, вьіходнме данньїе кото-
рого сжимаются при помощи интервального кодирования (аналог арифме-
тического сжатия) с использованием 1-2-кодирования и структурной моде-
лй Петера Фенвика.
Для того чтобьі создать программу, которую можно свободно использо-
вать в некоммерческих целях, в Ьхір2 интервальное кодирование бьіло за-
менено на сжатие по методу Хаффмана. Видимо, благодаря зтому Ьгір2 на-
ходит все большее распространение в различньїх областях применения и де-
факто уже становится одним из стандартов. Сортировка в Ьгір2 изменена
221
Книга написана коллективом К((р:/Лу\у\у.сотрге‘і‘ііоп.і'и/
Методи сжатия данньїх (7000+ Файлов о сжатии)
незначительно по сравнению с Ьхір. В основном повьішена устойчивость к
избиточним данним и оптимизирован ряд процедур.
В В\УС используются такие же методи, что и Ьхір и Ьгір2. А именно оп-
тимизированная сортировка, МТР, 1-2-кодирование и интервальное коди-
рование.
ІМР использует собственную сортировку, очень биструю на обьічних
текстах, но буквально "зависающую" на данньїх, в которнх встречаются
длинньїе одинаковьіе последовательности символов. Сжатие полностью по-
заимствовано из Ьгір2.
Алгоритм сжатия, используемьій в Ьгір2, также включен и в архива-
тор 7-2ір.
В 82Ір, помимо упоминавшегося частинного сортирующего преобразова-
ния, реализована и возможность использования В5¥Т. Реализована, прямо
скажем, только для примера, без затей. А вот для сжатия используются
очень интереснме решения, представляющие собой некий гибрид МТР-
преобразования и адаптивного кодера, берущий статистику из короткого
окна преобразованних с помощью В\УТ данних. С участием автора 82Ір и с
использованием описанних решений бьіл также создан архиватор ІСТІІС.
В 2гір применяются все те же испмтанние временем структурная мо-
дель, сортировка Бентли - Седжвика и кодирование диапазонов.
ВА использует аналогичную сортировку. Но повишение устойчивости
реализовано в ВА другим способом. Деление строк по ключу прекращается
в том случае, когда оказьівается, что зтим строкам предшествуют одинако-
вьіе символи. Еще одно новшество, реализованное в ВА, - зто вибор струк-
турной модели МТЕ в отдельном проходе. Также за счет динамического оп-
ределения размера блока улучшено сжатие неоднородних файлов. Для уси-
лених сжатия английских текстов используется переупорядочение алфавита.
В ОС впервьіе реализован целий ряд новаторских идей. Во-первьіх, ко-
нечно, зто модель сжатия, отличная от МТЕ, - кодирование расстояний. Во-
вторьіх, новий метод сортировки, очень бистрий на текстах, хотя и дающий
слабину на сильно избьіточньїх данних. И наконец, большой набор методов
препроцессинга текстових данньїх, позволяющий добиться особенного ус-
пеха на английских текстах.
Отличительная особенность 8ВС - наличие мощной криптосистеми. Ни
в одном из архиваторов, пожалуй, не реализовано столько алгоритмов шиф-
рованих, как в 8ВС. В 8ВС используется алгоритм В5¥Т, ориентированньїй
на большие блоки избнточних данньїх и позволяющий очень бистро сорти-
ровать данньїе с большим количеством длинних похожих строк. Вместо
222
ЬІІр:/Лууууу.сошрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методи сжатия без потерь
МТЕ в архиваторе используется кодирование расстояний, хотя пока не так
зффективно, как в ¥В8 и ОС, но зто компенсируется большим количеством
фильтров (методов препроцессинга), настроенньїх на определеннме типи
данньїх.
АКС (автор - Іап Зийоп, которому также принадлежит РРМ-архиватор
ВОА). Как и многие другие, использует В\¥Т на основе сортировки Бент-
ли - Седжвика и МТР. Как и в 8ВС, дополнительно отслеживаются очень
длиннме повтори данньїх.
Первме версии ¥В8 также использовали перемещение стопки книг, ко-
торое затем било заменено на кодирование расстояний. Что дало заметнмй
вьіигрьіш в степени сжатия.
Среди не распространяемьіх свободно компрессоров, описание которих
опубликовано в научньїх трудах, можно отметить ВК898 и ВК899, которме
принадлежат сразу трем авторам [10]. Зти компрессорьі используют суф-
фиксную сортировку и многоконтекстовую модель МТР по трем последним
кодам.
Сравнение ВУТТ-архиваторов
Параметри, используемие для указания режима работьі архиваторов,
вмбрани таким образом, чтоби добиться наилучших результатів в сжатии
без особого ухудшения скорости.
Тестирование производилось на компьютере со следующей конфигура-
цией:
Процессор Іпіеі Репіішп ПІ 840 МГц
Частота шини 140 МГц
Оперативная память 256 Мб БОКАМ
Жесткий диск Риапіит РВ 4.3 Гб
Операционная система 5Міп<1о№ N14.0 Зєгуісє Раск 3
Начнем со сжатия русских текстов, потому что В5¥Т-архиваторм осо-
бенно зффективнм именно для сжатия текстов. А русские тексти вмбрани
для того, чтоби показать зффективность сжатия в листом виде, без исполь-
зования текстових фильтров, которме для русских текстов еще не созданм
авторами описмваеммх програми. Файл имеет длину 1,639,139 байт.
Архиватор, версия и параметри Размер сжатого файла, байт Время сжатия, с Время разжатия, с
¥В8 О.ОЗе 446,151 1.81 0.93
ОС 0.99.2986 -а 449,403 1.21 1.00
8ВС 0.860 451,240 1.69 0.87
АКС (І.ЗиіІоп) Ь20 459,409 2.08 1.37
Сотргеззіа' 62048 462,873 2.92 2.66
223
Книга написана коллективом Ьйр:/Лууууу.сошрге88Іоп.ги/
Методь/ сжатия данньїх (7000+ файлов о сжатии)
Архиватор, версия и параметрьі Размер сжатого файла, байт Время сжатия, с Время разжатия, с
В А 1.0165 -24-т 463,214 2.17 1.26
2гір 0.36 -тх -Ь8 467,383 1.96 1.65
8/ір 1.12 621 оО 470,894 3.34 0.78
ІСТ11С 1.0 472,556 2.54 1.27
згір 1.12 621 о8 472,577 2.32 1.12
ОСА 0.90§ -V 477,999 2.17 1.17
ВХУС/РССС 0.99 т2т 479,162 1.69 0.83
ВЖУРОСС 0.99 т900к 503,556 1.56 0.83
згір 1.12 621 о4 506,348 0.48 0.94
ІМР 1.10-2и1000 506,524 1.07 0.64
6гір2/РОСС 1.067 -9 507,828 1.55 0.66
Как можно заметать, первенство удерживают компрессорьі, использую-
щие кодирование расстояний.
На английском тексте (2 042 760 байт) некоторьіе архиваторьі использу-
ют фильтрьі, тем самим заметно улучшая сжатие. Ниже приведеньї резуль-
тати, принадлежащие тем программам, которие показали наилучшие ре-
зультати в первом тесте.
Архиватор, версия и параметрьі Размер сжатого файла, байт Время сжатия, с Время разжатия, с Использова- ние фильтров
ОС 0.99.2986 476,215 1.58 1.28 +
8ВС 0.860 63т1 489,612 1.59 0.96 +
¥В8 О.ОЗе 496,703 2.32 1.09
ОС 0.99.2986 -а 500,421 1.50 1.18
АКС (І.Зиііоп) 620 508,737 2.62 1.71
В А 1.0165 -24 512,696 2.87 1.53 +
2гір 0.36 -тх -68 515,672 2.84 2.08 +
Сотргеззіа 62048 517,484 3.67 2.12
В А 1.0165 -24-х 517,626 2.75 1.42
При сжатии данних, представляющих собой исходньїе тексти програми,
распределение среди лидеров тестов практически не меняется.
Для иллюстрации поведения В\УТ-архиваторов на неоднородних дан-
них применен исполнимий модуль из дистрибутива компилятора ХУаІсот
10.0 \усс386.ехе (536,624 байта). Для того чтобн можно било судить об зф-
фективности различних методов и режимов, некоторие строки помечени
специальними знаками:
224
Й11р:/Лууууу.сошрге88іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Архиватор, вер- сия и параметрьі Размер сжатого файла, байт Время сжа- тия, с Время разжа- тия, с Фильтрьі Умень- шенньїй размер блока Автомати- ческое опре- деление размера блока
¥В8 О.ОЗе - т512к 275,396 0.66 0.51 + +
¥В8 О.ОЗе 276,035 0.66 0.57 +
8ВС 0.860 тЗа 278,061 0.98 0.69 + +
АКС В5тт1 278,392 1.33 0.48 + +
ОС 0.99.298В - Ь512 279,424 0.67 0.36 + +
ОС 0.99.298В 279,759 0.66 0.37 +
АКС тті 280,052 1.34 0.46 +
2гір 0.36 -тх 291,199 0.74 0.66
АКС (І.Зийоп) Ь5 291,345 0.58 0.48 +
АКС (І.Зийоп) 292,979 0.58 0.48
ВА 1.01В5 -24-г 293,489 0.82 0.64 +
ОС 0.99.298В -а 293,807 0.52 0.39
ІМР 1.10 -2 иіООО 294,679 0.38 0.18 +
Сотргеззіа В512 297,647 0.97 1.16
ІСТІІС1.0 298,348 0.75 0.53
ВА 1.01В5 298,617 0.82 0.66
«гір 1.12 В21 оО 298,668 0.76 0.31
«гір 1.12 В21 о4 299,249 0.27 0.39
ВХУС/РОСС 0.99 тбООк 304,996 0.58 0.37
Вгір2/Р6СС 1.0В7 -6 308,624 0.63 0.26
В качестве файла, содержащего смесь текстових и бинарньїх данньїх,
использовался Рііехуаге.дос размером 427,520 байт из поставки русского М8
ОГЯсе'95. Данньїй пример показьівает, что иногда модель, использующая
МТР, оказьівается достаточно зффективной.
225
Книга написана коллективом йіір:/Лууууу.сошрге88Іоп.ги/
Методьі сжатия данньІХ <7000+ файлов о сжатии)
Архиватор, версия и параметри Размер сжатого файла, байт Вре- мя сжа- тия, с Вре-мя раз-жа- тия, с Фильтрьі Умень- шен- НЬІЙ размер блока 1 1 ф 5 С х «І £ О х О. (0 2 § § 1 О р 2 Ф со 5 Н О ц со ю 5 ® ф а <3-0.
8ВС 0.860 тЗа 126,811 0.69 0.42 + +
ОС 0.99.298Н 127,377 0.38 0.18 +
АК.СН2 128,685 0.38 0.23 + +
¥В8 О.ОЗе-т256к 130,356 0.37 0.24 +
Сотрге58Іа Ь256 131,737 0.61 0.40 +
В А 1.0165 -24-г 132,651 0.41 0.30
2гір 0.36 -аі 132,711 0.65 0.40
ОС 0.99.298Н -а 133,825 0.34 0.23
¥В8 О.ОЗе 133,915 0.37 0.25
В\УС/РССС 0.99 тбООк 134,183 0.33 0.19 +
6гір2/ Р6СС 1.0Н7-6 134,932 0.44 0.14 +
вгір 1.12 Н21 оО 134,945 0.90 0.15
ІМР 1.10-2 иІООО 135,431 0.30 0.12
ІСТСІС 1.0 136,842 0.41 0.29
ВА 1.0165 -24-2 137,566 0.49 0.31 +
52Ір 1.12 Н21 о4 141,784 0.17 0.18
Заключение
Несмотря на то что преобразование Барроуза - Уилера било опублико-
вано сравнительно недавно, оно пользуется большим вниманием со сторони
разработчиков архиваторов. И пожалуй, еще впереди новьіе исследования,
которме позволят повмсить зффективность сжатия на основе В^Т еще в
большей степени.
Можно отметить характерньїе особенности архиваторов, использующих
описанное преобразование, по сравнению с другими.
Скорость сжатия - на уровне архиваторов, применяющих словарньїе ме-
тоди, например Ь277. Разжатие, как правило, в 3-4 раза бьістрее сжатия.
Степень сжатия сильно зависит от типа данньїх.
Наиболее зффективно применение В\¥Т-архиваторов для текстов и лю-
бих даннмх со стабильньїми контекстами. В зтом случае рассматриваемьіе
компрессорьі по своим характеристикам близки к программам, использую-
щим РРМ. На неоднороднмх данньїх существующие архиваторьі на основе
В\УТ немного уступают лучшим современньїм компрессорам, использую-
226
1Шр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
щим словарньїе методьі или РРМ. Впрочем, существуют способи компен-
сировать зтот недостаток.
Расходи памяти в режиме максимального сжатия довольно близки у всех
современньїх архиваторов. Наибольшее отличие наблюдается при декоди-
ровании. Наиболее скромними в зтом отношении являются архиватори, ис-
пользующие алгоритми семейства Ь277, а наиболее расточительними-
РРМ-компрессори, требующие столько же ресурсов, сколько им нужно при
сжатии. Архиватори на основе В5¥Т занимают промежуточное положение.
ЛИТЕРАТУРА
1. Кадач А. В. Зффективние алгоритми неискажающего сжатия текстовой
информации: Дис. к. ф-м. н. - Ин-т систем информатики им.
А. П. Ершова. М., 1997.
2. АІЬегв 8., у.8іеп£е1 В., УУегсЬпег В.. А сотЬіпеД ВІТ аші ТІМЕ8ТАМР
А1§огіДіт Гог Діє Ьіві Орсіаіе РгоЬІет. 1995.
3. АтЬиЬІ С., Сагіпсгт В., у.$іеп£ЄІ В. А Ме\у Ьоууєг Воипд Гог Діє Ілві
ІІрДаіе РгоЬІет іп Діє Раггіаі Собі МоДеІ. 1999.
4. Агітига М., Уататоіо Н. АвутріоДс Оріітаїііу оГ Діє Віоск Зогііп^ Ваіа
Сотргеввіоп АІ£огіДіт. 1998.
5. Атауаиі 2., Ма§1іуегав 8. 8. Віоск 8огііп§ апд Сотргеввіоп // РгосееДіп^в
оГВаіа Сотргеввіоп Сопіегепсе. 1999.
6. Атауаиі 2., Ма§1іуегав 8. 8. Ьехісаі Регтиіаііоп 8огііп£ АІ£огііЬт.
7. Ваік Н-К., На В.8., ¥оок Н-О., 8Ьіп 8-С., Рагк М-8. А Кеду МеДюД Іо
Ітргоуе Діє РегГогтапсе о£ ІРЕО Епігору Содіп§ Свіп§ Вштоуув-\УЬєєієг
Тгапвіогтаііоп. 1999.
8. Ваік Н., На В. 8., Уоок Н-О., 8Ьіп 8-С., Рагк М-8. 8е1есДуе АррІісаДоп о£
ВиггохУВ-ХУЬееІег Тгапвіогтаііоп Гог ЕпЬапсетепі о£ ІРЕО Епігору Со<ііп£.
1999.
9. ВаІкепЬої В., Кигіх 8. Ііпіуегваї Ваіа Сотргеввіоп ВавеД оп Діє Виггоіув
аші Міееіег-Тгапвіогтаііоп: ТЬеогу аші Ргасіісе.
10. ВаІкепЬої В., Кигіг 8., ЗЬіагкоу У.М. МоДійсаііопв ой Діє Виггоіув апД ХУЬееІег
Ваіа Сотргеввіоп АІ£огііЬт // Ргосеесііп§в ой Ваіа Сотргеввіоп Сопіегепсе.
ЗпоіуЬііД: ІііаЬ, ІЕЕЕ Сотриіег Зосіеіу Ргевз, 1999. Р. 188-197.
11. ВаІкепЬої В., ЗЬіагкоу У.М. Опе айетрі оґ а сотргеввіоп а1§огіДіт ивіп§
Діє В5УТ.
12. Вагоп В., Вгевіег У. Тгее 8оигсе ІДепіійсаііоп іуіДі Діє ВАУТ. 2000.
13. Вигго\УВ М., ХУЬееІег В.І. А Віоск-зогііп^ Ьоввіевв Ваіа Сотргеввіоп
АІ^огіДші І І 8КС КевеагсЬ Кероії 124, Ві^ііаі Зувіетв КезеагсЬ Сепіег,
Раїо Аііо, Мау 1994. Ьйр://§аіекеерег.бес.сот/риЬ/ВЕС/8К.С/гевеагсЬ-
герогів/8КС-124.рв.2.
227
Книга написана коллективом йіір:/Лууууу.сотрге88Іоп.ги/
(7000+ файлов о сжатии)
Методьі сжатия данньїх
14. СЬаріп В. 8хуіісЬіп§ Вєіууєєп Тууо Оп-Ііпе Ьізі Ьрдаіе аІ^огііЬтз Гог Ні§Ьег
Сотргеззіоп оГ Виггоууз-ХУЬеекег ТгапзГогтед Оаіа // Ргосеедіп^з оГ Оаіа
Сотргеззіоп СопГегепсе. 2000.
15. СЬаріп В., Таіе 8. Ні^Ьег Сотргеззіоп (гот іЬе Виггохуз-ХУЬееІег
ТгапзГогт Ьу Модійед 8огііп§. 2000.
16. Оеогоіуісг 8. Ап апаїузіз оГ зесопсі зіер а1§огііЬтз іп іЬе Вштоууз-ХУЬєєієг
сотргеззіоп аІ£огіЙіт. 2000.
17. Оєогоууіс2 8. Ітргоуетепіз іо Виггоууз-ХУкееІег Сотргеззіоп Аідогііііт.
2000.
18. Ретуіск Р. М. Віоск зогііп§ іехі сотргеззіоп П Аизігаїазіап Сотриіег
Зсіепсе СопГегепсе, АС8С96, МеІЬоите, Аизігаїіа, РеЬ 1996. йр://йр.сз.
аиск1апд.ас.пг/оиі/реіег-Г/АС8С96.рз.
19. Регга§іпа Р., Мапгіпі О. Ап ехрегітепіаі зійду оГ ап оррогіипізііс іпдех.
2001.
2О. Кгизе Н., МикЬецее А. Ітргоуе Техі Сотргеззіоп Каііоз іуііЬ Вштоууз-
У/Ьееіег ТгапзГогт. 1999.
21. Кигіг 8. Кедисіп^ Ше 8расе Кециігетепі оГЗийїх Тгеез.
22. Кигіг 8. Зрасе еГГісіепі Ііпеаг ііте сотриіаііоп оГ іЬе Виггохуз апд
ХУЬееІег ТгапзГогтаііоп // Ргосеедіп^з оГОаіа Сотргеззіоп СопГегепсе. 2000.
23. Кигіг 8., Оіе§егісЬ К., 8іоуе 3. ЕГГісіепі Ітріетепіаііоп оГ Ьагу 8иГйх
Тгеез. 1999.
24. Ьагззоп 3. Аііаск оГ іЬе Миіапі ЗиГГіх Тгее.
25. Ьагззоп 3. ТЬе Сопіехі Тгеез оГ Віоск 8огііп§ Сотргеззіоп.
26. Ьагззоп 3., Задакапе К. Разіег 8и£Нх 8огііп§.
27. Мапгіпі О. ТЬе Вштоууз-ХУЬєєієг ТгапзГогт: ТЬеогу апд Ргасіісе. 1999.
28. Иеїзоп Р.М. Оаіа Сотргеззіоп ууііЬ йіе Виггоууз ¥/Ьее1ег ТгапзГогт // Ог. ОоЬЬз
Зоитаї. 8ері. 1996. Р 46-50. Ьіф://\уеЬ2.аігтаі1.пеі/таікп/агііс1ез/Ь\И/Ь\уі.Ьіт
29. Задакапе К. А Разі АІ^огііЬт Гог Макіпд 8иГйх Аггауз апд Гог В\УТ.
ЗО. Зайакапе К. Сотрагізоп атоп§ ЗиГйх Аггау Сопзігисііопз А1§огііЬтз.
31. Забакапе К. Оп Оріітаїііу оГУагіапіз оГ В1оск-8огііп§ Сотргеззіоп.
32. Засіакапе К. Техі Сотргеззіоп изіп§ Кесепсу Капк хуііЬ Сопіехі апд
Кеіаііоп іо Сопіехі Зогііп^, Віоск 8огііп§ апд РРМ.
33. ЗсЬіпЛег М. А Разі В1оск-зогііп§ А1§огііЬт Гог Іоззіезз Оаіа Сотргеззіоп
// Уіеппа ІЗпіуегзііу оГТесЬпо1о§у. 1997.
34. ЗсЬиІг Р. Туго Кєіу Ратіїіез оГЬізі ІЗрбаіе А1§огііЬтз. 1998.
35. КуаЬко В. ¥а. Оаіа Сотргеззіоп Ьу Меапз оГ а "Воок Зіаск"// РгоЬІетз оГ
ІпГогтаііоп Тгапзтіззіоп. Уоі. 16(4). 1980. Р. 265-269.
228
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Глава 6. Обобщенньїе методьі
сортирующих преобразований
Сортировка параллельньїх блоков
Английское название метода - РагаїїеІ Віоскз 8оПіп§ (РВ8).
Два блока А и В назмваются параллельньїми, если каждому злементу
А[і] первого блока поставлен в соответствие один злемент В[і] второго бло-
ка и наоборот. Длиньї блоков и Ьв равньї: ЬА = Ьв = Ь. Размерьі злементов
блоков КА и Кв могут бьіть разньїми.
Основная идея метода РВ8 состоит в сортировке злементов Іп[г] входно-
го блока Іп и их раскладьівании в несколько вьіходньїх блоков Оиі7 на осно-
ваний атрибутов А[(] зтих злементов. Атрибут А[і] єсть значение функции
А, определяемой значеннями предшествующих злементов Іп[/] и/или зле-
ментов Р[&] из параллельного блока Р:
А[і]=А(і, Іп[Л, Р(к]), і=0...Ь-1; 3=0, . к=0,...,Ь-1
При декодировании осуществляется обратное преобразование: злементм
из нескольких блоков Оиі, собираются в один результирующий, соответст-
вующий несжатому блоку Іп (рис. 6.1).
Чем лучше значення Іп[/] предсказуемм по значенням А[і], тем зффек-
тивнее последующее сжатие блоков Оиі,- с помощью простих универсаль-
ньіх методов.
Метода зтой группм преобразующие и блочньїе, т. е. могут приме-
няться только в том случае, когда известна длина блока с даннмми.
Размер данньїх в результате применения РВ8, как и при 8Т/В5УТ, не из-
меняется. Для сжатия результата работьі метода может бьіть применена лю-
бая комбинация методов - КЕЕ, ЬРС, МТР, ПС, Н11ЕР, АКІС, Е1Ч11С, 8ЕМ...
В общем случае скорость Ус работьі компрессора (реализующего пря-
мое, "сжимающее" преобразование) равна скорости Уц декомпрессора (реа-
лизующего обратное, "разжимающее" преобразование) и зависит только от
размера даннмх, но не от их содержания: Ус = Ув = 6>(£). Памяти требуется
2 Ь+С. Константа С определяется особенностями реализации и может бьггь
довольно большой. Операций умноження и деления нет.
229
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.пі/
Методь/ сжатия данньїх <7000+ файлов о сжатии)
Рис. 6.1. Иллюстрация РВ8: атрибут А[\] определяется значением злемента Р[і];
значение А[\] показано штриховкой
Из краткого описання общей идеи видно, что
для распаковки нужно иметь не только содержимое сортированньїх бло-
ков Оиір но и их размерьі;
параллельньїх блоков может бьіть и два, и больше;
если функция А не использует те Р[£], которме находятся после текущей
позиции і, т. е. А=/+1,..., Ь , то можно создавать параллельньїй блок Р од-
новременно с текущим сортируеммм Іп;
если А задана так, что принимает мало значений: от 2 до, допустим, 16,
метод вполне может бьіть применим и к потокам данньїх;
если параллельного блока Р нет, получаем 8Т/ВХУТ как частньїй случай
РВ8.
ОСНОВНОЙ АЛГОРИТМ ПРЕОБРАЗОВАНИЯ
В простейшем случае сортирующего преобразования 8Т(1) значение атри-
бута вьічисляется так: А[/]=Іп[/-1]; при 8Т(2): А[і]=Іп[М]-2к+1п[ь2] и т. д.
В простейшем случае РВ8 А[/]=Р[і], т. е. значение атрибута равно значенню
злемента из параллельного блока. Вьіходньїх блоков столько, сколько значений
принимают Р[/]. Делая проход по Р, считаем частоти значений атрибута и в ре-
230
КНр://уууууу.сотрі'Є‘>‘>іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
зультате получаем размерьі сортированньїх блоков (далее - контейнеров), в ко-
торме будем раскладьівать злементм из входного блока Іп:
£ог( а=0; а<п; а++) А££г[а]=0; //инициализация (1)
£ог ( і=0; і<Ь; і++) АЬСг[Р[і]]++; //подсчет частот (2)
Іп - входной сортируеммй блок длинм £;
Р - параллельнмй блок длинм І;
Ь - количество злементов во входном блоке;
л=2л - число всех возможнмх значений атрибута;
Айг[л] - частоти значений атрибута.
Например, в Р содержатся старшие 8 бит массива 16-битовмх чисел, а в
Іп - младшие 8. Заметим, что зтот процесе "дроблення" можно продолжать
и дальше, создавая вплоть до 16 параллельнмх блоков: содержащий первме
бита, вторне, и т. д. Кроме того, при сжатии мультимедийнмх данних часто
уже имеютея параллельнме блоки, например левмй и правий канали сте-
реозвука, красная, зеленая и синяя компонента изображения и т. п.
Если функция А задана иначе, то и при подечете частот формула будет
иной:
// А[і]-Р[і]5252 :
£ог( і=0; і<Ь; і++) АИТг[ Р[і]&252 ]++;// (2а)
// А[і]=255-Р[і] :
£ог( і=0; і<Ь; і++) АС£г[ 255-Р[і] ]++;// (2Ь)
// А[і]=(Р[і]+Р[і-1])/2 :
АС£г[ Р[0] ]++; // (2с)
£ог( і-1; і<Ь; і++) А££г[ (Р[і]+Р[і-1])/2 ]++;
Итак, после двух циклов - инициализации и подечета частот - ми долу-
чили в массиве Айг длинм контейнеров (сортированнмх блоков). Теперь
можно вичислить, где какой контейнер будет напинаться, если их последо-
вательно сцепить в один блок в порядке возрастания значення атрибута:
£ог( а=0, роз=0; а<п; а++) { // (3)
£тр=А£Тг[а]; // длина текущего а-го контейнера
А££г[а]=роз; // теперь там адрес-указатель на его начало
// (указатель на начало свободного места в нем)
роз+=Ьтр; // начало следующего - дальше на длину текущего
}
В том же массиве Айг[п] теперь адреса-указатели на начала контейнеров.
Остается только пройти по входному блоку, раскладмвая злементм из него
по контейнерам:
£ог(і=0; і<Ь; і++) ОиЬ[АіХг[Р[і]]++]=Іп[і]; //(4с)
231
Книга написана коллективом 1ііір:/Лууууу.сотрге88Іоп.пі/
МетоДьі сжатия данньїх(7000+ файлов о сжатии)
ОиІ - вьіходной отсортированньїй блок (зогіеб, ігапзЕогтесі), содержащий
все контейнери. Подробнее:
£ог( і=0; і<Ь; і++) { // На каждом шаге:
з=Іп[і];// берем следующий злемент з из входного блока Іп,
а=Р[і];// берем его атрибут а из параллельного блока Р,
// и адрес свободного места в контейнере, задаваемом зтим а;
роз=Аббг[а];
// кладем злемент з в вмходной блок Оиб по атому адресу,
Оиб[роз]=з;
роз++; //теперь в зтом контейнере на один злемент больше,
Аббг[а]=роз;//а свободное место - на один злемент дальше.
}
Функция А - та же, что и во втором цикле. То єсть, для вьіше рассмот-
ренньїх примеров:
(2а) а=Р[і]&252;
(2Ь) а=255-Р[і];
(2с) а=(Р[і]+Р[і-1])/2;
//причем і=1...Ь-1, а когда і=0, а=Р[0].
Обратное преобразование
Совершенно идентичньї первьіе 3 цикла: инициализируем, в результате
прохода по параллельному блоку находим длиньї контейнеров, затем опре-
деляем адреса начал контейнеров во входном отсортированном блоке Іп.
Именно зти адреса - цель вьіполнения первьіх трех циклов. И только в чет-
вергом цикле, наоборот, берем из отсортированного блока с контейнерами
Іп, кладем в единьїй вьіходной блок Оиі:
Еог (1=0;і<Ь; і++) Оиб[і]=Іп[АЕСг[Р[і]]++]; //(4<1)
Іп - входной отсортированньїй блок со всеми контейнерами;
Оиі - создаваемьій вьіходной блок.
Подробнее:
£ог( і=0; і<Ь; і++) {
а=Р[і];
роз=Аббг[а];
//так било при прямом (сжимающем) преобразований:
//Оиб[роз]=Іп [і];
//(в текущих обозначениях зто записшвается так:
//Іп[роз]=Оиб[і];)
//а так делаем сейчас, при разжимающем преобразований:
Оиб[і]=Іп[роз];
роз++;
Аббг[а]=роз;
232
Шір:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
)
Пути увєличения скорости сжатия
Итак, в обоих случаях вьіполняем два цикла от 0 до п=2я и два цикла от 0
до Ь. Какой из них займет больше времени? Чаще всего Я=8, п=256, а £ - от
нескольких килобайт до десятков мегабайт. И четвертий, главнмй цикл -
самий долгий, второй вьшолняется бистреє, а третий и особенно первий -
совсем бистро.
Но возможна и обратная ситуация: если, например, Я=16, л=21б=65536, а
£=512, т. е. требуется сжать поток блоков из 512 Іб-битових злементов (по-
ток "фреймов"). Тогда, наоборот, самим долгим будет третий цикл, затем
первий, четвертий и второй.
Два цикла при больших К
Если памяти хватает, поступим так: будем наполнять контейнери не од-
новременно, проходя по Іп, Р и записивая злементи Іп[і] в внчисляемне ад-
реса блока Оиі, а последовательно: проходя по Оиі и вичисляя адреса в Іп,
Р, из которнх нужно брать значення атрибута и злементи, помещаемие за-
тем в Оиі. Останутся два цикла от 0 до і, а цикли от 0 до п=2к исчезнут.
При первом проходе заполняем вспомогательний массив Апехі, содер-
жащий цепочки указателей на позиции с одинаковнми атрибутами (А-
цепочки). То єсть в Апехф] записьіваем указатель на следующую позицию
(і+к) с таким же значением атрибута А[і], если таковая (і+к) в оставшейся
части блока єсть. В противоположном случае, если в оставшейся части бло-
ка атрибут не принимает значение А[і], в Апехі[і] записмваем і.
// при инициализации: вспомогательние массивьі
іпЬ Апехі: [Ь];
іпб Вед[п]; // начала,
іпЬ ЕпсЦп]; // концьі и
іпб Г1д[п]; // флаги наличия А-цепочек в текущем фрейме
//в цикле для каждого фрейма:
ГгашеМитЬег++; // следующий Ь-злементний фрейм
£ог( і=0; і<Ь; і++) {
а=Р[і]; //вичислим значение атрибута а
і£(Гід[а]==ГгатеМитЬег) //если цепочка, определяемая зтим а,
{ //в текущем фрейме уже єсть,
е=Епд[а]; // то конец ее - в массиве концов цепочек
Апехб[е]=і;// теперь прошльїй конец указивает на новий
}
еізе
{ // иначе
Гід | а ] =ГгатеМитЬег; / / запишем, что такая цепочка єсть
233
Книга написана коллективом Шір:/Лууууу.сошрге88Іоп.пі/
Методи сжатия данньїх (7000+ файлов о сжатии)
Вед[а]=і; // и сохраним адрес ее начала
}
АпехР[і]=і; // текущий злемент А-цепочки - ее конец
ЕпсІ[а]=і; // укажем конец в массиве концов цепочек
}
Массив нужен только затем, чтобьі инициализировать не Ве§ и Епд
перед каждьім фреймом, а только перед всеми фреймами. Если создать
еще два массива Рргеу и Рпехі, соединяющие все злементм Р1§ с одним зна-
чением в одну Р-цепочку (причем Рпехі указьівает на следующий злемент Р-
цепочки, Рргеу - на предьідущий), то не придется при втором проходе ли-
нейно искать в Р1§ появлявшиеся в текущем фрейме А-цепочки. И цикла от
0 до п удастся избежать. Соответствующие изменения читатель легко внесет
в алгоритм сам.
При втором проходе вмполняем сортировку:
роз=£=0;
иИіІе (Гпех£[£]!=£) { // (линейншй поиск следующей
£=Гпех£[£]; // А-цепочки в Еід, если без Епех£)
і=Вед[£); // первьій злемент текущей А-цепочки,
до { // и далее для всех ее злементов:
ОиЬ [роз]=Іп [і]; // берем из Іп, кладем в Ои£
роз++; // последовательно,
і=Апех£[і]; //и т. д., проходя всю А-цепочку
) иЬіІе(і!=Апех£[і]) //до конца
}
На зтот раз во втором цикле уже нет обращений к Р, позтому можно со-
вместить А и Р. Памяти же требуется не
21 + л-8І2еоГ(*сЬаг), а
2-£ + 5-л-8І2Єо£(*сЬаг),
так как Ве§, Епд, Р1§, Рргу, РпхГ занимают по л-8І2ео£(*сЬаг) байт.
Два цикла при малих К
Если памяти доступно больше, чем необходимо для хранения 2-Ь+п-С
злементов, и С достаточно велико - 256 или, например, 512, можно сразу
"расформатировать" память под начала контейнеров:
Ме£іпе К 256;
£ог ( і=0; і<п; і++) АЬЬг[і]=і*К; // (Ізш)
// под каждьій из п контейнеров отведено К злементов
// (1 "сектор")
234
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методи сжатия баз потерь
И затем при проходе по Іп, Р, если свободное место в каком-то контей-
нере кончается, будем записьівать в конце "сектора" указатель на следую-
щий сектор, вьіделяемьій под продолжение зтого контейнера:
ЕгееЗесбог=п;
£ог ( і=0; і<Ь; і++) { // (2зш)
а=Р[і]; // берем атрибут а из параллельного блока Р,
роз=А££г[а];// и адрес свободного места в контейнере,
// задаваемом зтим а;
0и£[роз]=Іп[і];
роз++;
і£(роз%К+зігео£(*сИаг)==К)//если свободное место кончилось,
{
Оиб[роз]“ГгееЗесбог;//пишем указатель на следующий сектор
// если ГгееЗесбог типа іп£32, а Ои£[і] типа іпб8, то:
// Оиб[роз] =Ггее5есбог%256;
// Оиб [роз+1 ] = (ГгееЗес£ог»8) %256;
І/ Оиб[роз+2] = (ГгееЗес£.ог»16) %256;
11 Оиб [роз+3] = (ГгееЗесСог»24) %2 5 б ;
роз=Ггее5есСог*К;//свободное место= начало нового сектора
ГгееЗесбог++; // свободньй сектор на один сектор дальше
}
Аббг[а]=роз;
}
Упражнение. Сравните зтот цикл с (4с) и оцените, насколько он будет
медленнее.
Зто очень вьігодно, если л<256, и, кроме того, после РВ8 вмполняется
еще один проход по всем злементам блока Оиі. Как правило, зто так. Таким
образом, весь алгоритм сводится к одному тривиальному циклу (Ізт) и од-
ному проходу по даними (28т).
УВЕЛИЧЕНИЕ СКОРОСТИ РАЗЖАТИЯ
Ускорение разжатия возможно, если длиньї контейнеров сжимать и пе-
редавать отдельно. Если £ существенно больше п, описание длин занимает
незначительную часть сжатого блока, так что потери в степени сжатия бу-
дут невелики. Тогда в массив Айг[л] при разжатии можно сразу записмвать
не длиньї, а начала контейнеров. Заметам, что и в случае 8Т/ВХУТ зто даст
заметное увеличение скорости: подсчет частот злементов требует при раз-
жатаи дополнительного прохода по данньїм.
235
Книга написана коллективом КНр:/Лу\у\у.сотрге‘і‘ііоп.і'и/
Методьі сжатия данньїх (7000+ файлов о сжатии)
Пути улучшения сжатия
Общий случай
Если содержимое каждого контейнера (или некоторьіх из них) подверга-
ется преобразованию, зависящему от его атрибута, то длиньї контейнеров
надо обязательно передавать декомпрессору, иначе он неправильно постро-
ит таблицу частот по содержимому контейнеров.
Если параллельньїй блок уже существует и не изменяется при прямом и
обратном преобразований, функцию А можно строить без всяких ограниче-
ний, используя любую комбинацию арифметических, логических и других
операций. Например,
А[і] = (іпЮ Р[і]/2; // деление целочисленное
Если сравнивать со случаем А[і] = Р[і], то можно сказать, что каждая пара
контейнеров обьединяется в один "двойной" контейнер.
А[і]=Р[і]А(п-1); // или, что то же самое, А[і]=п-1-Р[і].
То єсть контейнерьі будут лежать в Оиі в обратном порядке по сравнению с
А[і]=Р[і]. Зто полезно для второго отсортированного блока Оиі2, записьі-
ваемого за первьім Оиіі, особенно если данньїе мультимедийньїе, поскольку
в зтом случае значення Іп[і] и Іп[і+1], как правило, близки.
Еще два варианта вьічисления атрибута:
А[і]=(Р[і] & 16 == 0)? Р[і] : (Р[і]А15);
Младшие 4 бита изменяются только на +1 или -1:
аЬз(Р[і]&15 -Р[і-1]&15)=1.
А[І]=(Р[і]<0)? (-Р[і]*2+1 ) : Р[і]*2;
Расстояние до нуля, а знак - в младшем бите.
Упражнение. Напишите к последним двум формулам формули обратного пре-
образования.
Функция А может бьггь и адаптивной, т. е. производится периодическая
коррекгировка каких-то ее козффициентов, чтобьі вьіходной блок больше соот-
ветствовал заданному критерию. Например, известно, что последние 20-
30 контейнеров из 256 полезно обьединять в четверки, а остальньїе - в парьі:
// последние 256-232=24 контейнера обьединяем в четверки
К=232;
А (і] = (Р [і] Ж) ? Р[і]/4 : Р[і]/2; // деление - целочисленное
При зтом критерий используется такой: сумма первой производной вьі-
ходного блока Оиі должна стремиться к нулю:
236
йіір:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия баз потерь
/.-і
5ит = - ОиІ[і -1]) = 0,
/=1
где Оиф]-Оиф-1] - первая производная блока.
Тогда можно вичислять
5итСиггепС+=0иС[і]-ОиС[і-1], при текущем значений К,
ЗитМіпиз+=0иСт[і]-ОиСт[і-1] при К=К-4,
ЗитР1из+=0иСр[і]-ОиСр[і-1] при К=К+4,
и через каждьіе ЗіерК шагов вибирать новое значение К по результату срав-
нения ЗитСиггепІ, ЗитМіпих и 8итРІиз\
і£ (5итМіпиз<ЗитСиггепС && 5итМіпиз<ЗитР1из) К=К-4;
еізе і£ (5итР1из<5итСиггепС) К=К+4;
Может сказаться полезньїм сохранять блок А вместо Р, особенно если
параллельньїй блок строится одновременно с сортируеммм, например, Р[і]
вичисляется по Р[і-1] и Іп[М]. Тогда Р должен бьггь восстановим по А и
функция А должна бьггь биективной: по значенню А[і]=А(Р[і]) однозначно
находится Р[і]. Реально такая функция А сводится к перестановко: имеем
контейнери с атрибутами А[і]=Р[і], затем перетасовнваем их, меняя места-
ми внутри єдиного виходного блока Оиі, но не изменяя их содержимого. Но
формально А может виглядеть очень по-разному, содержать прибавление
константи:
А[і]=Р[і]+123; // результат берется по модулю п
логический ХОК:
А[і]=Р[і]л157;
сравнения и перестановки битов, в том числе циклическим вращением:
А [і] = (Р [і] & (п/2) ) ? ( (Р[і]-(п/2))*2+1 ) : Р[і]*2;
Упражнение. Как будет вьіглядеть А, собирающая вместе злементьі Ігф], соот-
ветствующие тем Р[/], остаток которьіх от деления на заданное К одинаков?
Начните со случаев К=4 и К=8.
Если функция А неадаптивна или зависит только от злементов парал-
лельного блока, сами контейнери, поскольку их длини известнн, можно
сортировать внутри єдиного виходного блока по их длинам. Зто может
улучшить сжатие даже при 8Т/В\УТ, особенно в случае качественних дан-
нмх, а не количественнмх. Часто оказнвается вмгоднмм группировать ко-
роткие контейнери в одном конце виходного блока, а длиннме - в другом.
И при сжатии, и при разжатии процедура сортировки контейнеров по дли-
нам добавится между циклами (2) и (3).
Рассмотрим последний вариант: весь блок А сохраняется и передаетея
(компрессором декомпрессору), позтому и строится он именно с учетом та-
237
Книга написана коллективом 1Шр:/Лууууу.сотрге88Іоп.пі/
Методи сжатия данньїх (7000+ файлов о сжатии)
кой особенности. Если єсть параллельньїй блок Р, можно строить А так,
чтобьі и Р преобразовьівать на основе А, и чтобьі суммарно блоки А, Р, Іп
сжимались лучше, чем Р и Іп. Если нет Р, то получается, что Іп распадается
на две компонентні: "идеальную" - моделируемме, предсказьіваемьіе А[і], и
"реальную" - отклонения Іп[і] от предсказанньїх значений А[і].
Двумерньїй случай
Параллельньїм блоком может бнть предьідущая, уже обработанная стро-
ка таблицьі. Либо предсказьіваемая (текущая), формируемая на основе од-
ной или нескольких предидущих строк. В обоих случаях целесообразно ви-
числять атрибут как среднее арифметическое соседних злементов, особенно
для мультимедийннх данних:
//если известнш те, что вьіше и левее, то соседних - четьіре:
// Р(і-2] Р[і-1] Р[і] Р[і+1]
// Іп[і-2] Іп[і-1] Іп[і]
А[і]=(Р[і-1]+ Р[і]+Р[і+1])/3;
А[і]=(Р[і-1]+2*Р[і]+Р[і+1])/4;
А[і]=(Р[і-1]+ Р[і]+Іп[і-1])/3;
А [і] = (Р [і-1]+2*Р [і ]+Іп [і-1])/4;
А[і]=(Р[і-1]+ Р[і]+2*Іп[і-1])/4;
А[і]=(Р[і-1]+ Р[і]+Р[і+1]+Іп[і-1])/4;
Тогда опять же длиньї контейнеров (частоти значений атрибутов) надо
обязательно передавать декомпрессору. Перед делением полезно делать ок-
ругление до ближайшего числа, кратного делителю. Еще сложнее будут
формули, если использовать более одной предидущей строки.
Заметим важное полезное свойство метода: увеличение сложности ви-
числений не влечет увеличения обьема необходимой памяти.
Если рассматривать множество строк как єдиний блок, то в простейшем
случае А[і]=Р[і]=Іп[і-ІГ| (ІР- число злементов в строке), т. е. в качестве атри-
бута используется значение "верхнего" злемента. Тогда таблицу длин сохранять
не нужно, но первие ІГзлементов в неизменном виде - обязательно.
Упражнение. Опишите подробно алгоритм сортировки в случае А[і]=Іп[і-УУ].
Начните с \Л/=1 и \А/=2.
Характеристики методов семейства РВ8:
Степень сжатия: увеличивается в 1.0-2.0 раза.
Типи данних: многомерньїе или многоуровневие данньїе.
Симметричность по скорости: в общем случае 1:1.
Характерние особенности: необходимо наличие как минимум двух
параллельних блоков данньїх.
238
КНрі/Луууху.сотргекіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Фрагментирование
Цель: разбиение исходного потока или блока на фрагменти с разньїми
статистическими свойствами. Такое разбиение должно увеличить степень
последующего сжатия. В простейшем случае битового потока необходимо
находить границьі участков с преобладанием нулей, участков с преоблада-
нием єдиний и участков с равномерньїм распределением нулей и единиц.
Если поток символьний, может вказаться вигодньїм разбить его на фраг-
менти, отличающиеся распределением вероятностей злементов, например
на фрагменти с русским текстом и фрагменти с английским.
Основная идея состоит в том, чтобн для каждой точки потока X (лежа-
щей между парой соседних злементов) находить значение функции отличия
ЕО(А) предидущей части потока от последующей. В базовом простейшем
варианте используется "скользящее окно" фиксированной длиньї: 7 зле-
ментов до точки X и 2 злементов после нее.
Иллюстрация (7=7):
...8536429349586436542 19865332 |Х| 6564387 158676780674389...
Цифрами обозначенн злементи потока, вертикальними чертами "|" гра-
ници левого и правого окон. Xне елемент потока, а точка между парой зле-
ментов, в данном случае между "2" и "6".
При фиксированной длине окон 2 и одинаковой значимости, или весе,
всех злементов внутри окон (независимо от их удаленности от точки А) зна-
чение функции отличия может бить легко вичислено на оснований разно-
сти частот злементов в левом и правом окнах. Зто сумма по всем 2Я воз-
можним значенням У, злементов. Суммируются абсолютне значення раз-
ностей: число злементов с текущим значением У в левом окне длиной 2
минус число злементов с данним значением У в правом окне длиной 2.
Суммируя 2Я модулей разности, получаем значение РО(А) в данной точке X:
2*-І
ГО(Х) = £ \СоипіЬе/і[У] - СоипіКі^іІУ^,
и=о
где СошііЬей[Р] - число злементов со значением V в левом окне; Соші-
У] - число злементов со значением У в правом окне.
Видно, что если в обоих окнах злементи одинаковие, то сумма будет
стремиться к нулю, если же злементи совершенно разние - к 2-7.
Для приведенного више примера:
У= 2 3 4 5 6 7 8 9
РО(А) = +|1-0| +|2-1| +|0-1| +|1-і| +|1-2| +|0-1| +|І-1| +|1-0|
=6
239
Книга написана коллективом 1іІІр:/Лууууу.сотрге88Іоп.пі/
Методи сжатия данньїх (7000+ файлов о сжатии)
После того как все значення ЕО(А) найденьї, остается отсортировать их
по возрастанию и вибрать границьі по заданному критерию (заданное число
границ и/или пока ГО(А')>/гІпіп).
Размер данньїх в результате фрагментирования увеличивается: либо по-
является второй поток с длинами фрагментов, либо флаги границ в одном
результирующем потоке.
Для сжатия результата работьі метода может бьггь применена любая
комбинация методов- КЬЕ, ЬРС, МТЕ, ОС, РВ8, НІІГР, АК.ІС, ЕМЬС,
8ЕМ...
Методи зтой группи преобразующие и поточньїе, т. е. могут приме-
няться даже в том случае, когда длина блока с данними не задана.
Обратного преобразования не требуетея.
В общем случае скорость работи компрессора зависит только от размера
даннмх, но не от их содержания: Скорость=О(Размер). Памяти требуетея
порядка 2Я+1. Для левого окна - О(2Я), и столько же для правого. Операций
умноження и деления нет.
С точки зрения сегментации даннмх метод отличаетея от КЬЕ лишь тем,
что вмделяет из потока (или блока) не только цепочки одинаковмх злемен-
тов, но и вообще отделяет друг от друга фрагменти с разнмми распределе-
ниями вероятностей значений злементов.
Из краткого описання общей идеи видно, что
порождаетея либо второй поток с длинами фрагментов, либо в исходнмй
поток добавляютея флаги границ (флаг может отвечать условию не толь- .
ко на значение одного злемента, но и условию на значение функции не-
скольких злементов);
задаваеммми параметрами могут бить (максимальная) длина окна 2,
Гтт- минимальное значение ГО(А), минимальное расстояние между
границами Ятіп (а в случае фрагментирования блока заданной длини -
еще и число границ N6, минимальное и/или максимальнеє число границ:
^шіп, /Чпах)>
вмчисление функции отличия при нескольких длинах окон - 2] , 22, ...
. .., 2П - в общем случае улучшит качество фрагментирования;
уменьшение веса злементов окна с удалением от точки X также в общем
случае улучшит качество фрагментирования.
Основной АЛГОРИТМ ПРЕОБРАЗОВАНИЯ
Каков би ни бил размер окон 2, при проходе по входним данним Іп[А] в
каждой точке X при переходе к следующей точке (%+1) достаточно следить
за тремя злементами: вмшедшим из левого окна (из-за сдвига точки X впра-
во), вошедшим в правое окно и перешедшим из правого окна в левое. Но
240
1ійр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
сначала разберем самий понятньїй алгоритм: с проходом по всем злементам
окон для каждой точки X.
#сіе£іпе 2 32
£ог ( і=0; і<п; і++)
СоипЬЬе£Мі]=Соипі:КідЬ£(і1=0; //инициализация (1)
£ог ( х=0; х<2; х++) { //цикл по длине окон: (2)
і=Іп[х]; //возьмем очередной злемент левого окна Іп[х]
Соип£Ье££ [ і] ++; //в левом окне злементов на 1 больше
і=Іп[х+2]; //и аналогично с правим окном
Соип£КідЬ£ [і] ++;
}
Іп[У| - входной фрагментируемьій блок;
N - количество байтов во входном блоке;
и=2* - каждьій байт может иметь 2К значений;
ГО[7У-2-2] - значення функции отличия;
СоипіЬей[л] - частоти злементов в левом окне;
СоипіКі^ІіЦл] - частоти злементов в правом окне.
После двух циклов, инициализирующих сба окна, начинаем проход по
входному блоку. Изначально левая границя левого окна совпадает с нача-
лом данньїх.
£ог(х=2; х<М-2-1; х++) {
//точка X скользит с позиции 2 до N-2-1 (3)
£=0; //текущее значение функции отличия
£ог( і=0; і<п; і++) //вичислим по формуле как сумму
£+=аЬз (Соип£Ье££ [і] -Соип£КідЬ£. [і]);/*т. е.если без аЬг()
і£ (Соип£Ье£Т[і]>Соип£КідИ£[і])
£+=Соип£Ье££ [і] -СоипТКідЬї. [і] ;
еізе £+=СоипЬКідЬ£[і]-Соип£Ье££[і];
*/
ЕО[х]=£; //и запишем в массив
£ог (і=0; і<п; і++) СоипТЬеїІ: [і] =СоипіКідЬ£ [і] =0;//как в (1)
£ог(з=х+1-2;і<х+1;}++){ //цикл по длине окон: как в (2)
Соип£Ье££[Іп(і]]++;//подсчет частот злементов в левом окне
Соип£КідЬ£[Іп[]+2]]++; //и аналогично в правом
)//но теперь левая граница левого окна - в позиции (х+1-2)
}
Наконец, последний цикл - зто либо соріировка ЕО[У| с целью нахож-
дения заданного числа максимальних значений (заданного числа самих
"четких" границ), либо просто нахождение таких ГО[£], значение которнх
больше заданного. Последнее можно делать в основном цикле.
241
Книга написана коллективом КНр:/Лу\у\у.сотрі'Є‘,‘,іоп.і'и/
Матодьі сжатия данньїх (7000+ файлов о сжатии)
Йк Упражнение. Внесите необходимьіе изменения в (3), если задано минималь-
ное значение отличия Етіп.
Пути улучшения скорости
Если последние два цикла внутри (3) перенести и вьіполнять их до пер-
вого, вьічисляющего ГО, то (1) и (2) не нужньї. Но поскольку внутри цикла-
прохода (3) по Іп достаточно следить за тремя злементами, в нем вообще
не будет внутренних циклов. После вьіполнения (1) и (2) поступим так:
£=0; //исходное значение функции отличия
£ог( і=0; і<п; і++) //вичислим по формуле как сумму (2а)
£+« аЬз (Соип£Ье££[і]-Соип£КідЬ£.[і]);
ЕО(0]«=£; //и запишем в массив
А внутри основного цикла, проходящего по входному блоку Іп[И]:
£ог(х=2; х<М-2-1;х++) {
//точка X скользит с позиции 2 до N-2-1 (За)
і=Іп[х-2]; //злемент, вьшіедший из левого скользящего окна
£-=аЬз(СоипДЬеІЬ[і]-СоипДКідИС[і]) ;
//сумма без 1 слагаемого
Соип£Ье££[і]—; //теперь в левом окне таких на 1 меньше
£+=аЬз(Соип£Ье££[і]-СоипДКідЬД[і]);
//обратно к полной сумме
і=Іп[х+2]; //злемент, вошєдший в правое окно
//совершенно аналогично обновлению для левого окна
£-=аЬз (Соип£Ье££ [і] -Соип£КідЬ£.[і]) ;
СоипЬКідЬД[і]++; //теперь в правом окне таких на 1 больше
£+=аЬз(Соип£Ье££[і]-СоипДНідЬД[і]) ;
і“Іп[х]; //злемент, перешедший из правого окна в левое
£-=аЬз(Соип£Ье£Ь[і]-СоипДКідЬД[і]) ;
Соип£Ье££[і]++; //теперь в левом окне таких на 1 больше
Соип£КідИ£[і]—; //а в правом - на 1 меньше
£+“аЬв(Соип£Ье££[і]-СоипбКідЬД[і]) ;
ГО[х]=£;//запишем значение функции отличия в массив
)
Упражнение. Как изменится значение І, если все 3 злемента одинаковьі, при-
чем в левом окне таких бьіло 7, а в правом 8?
Если 7 существенно меньше п, вместо (2а) лучше делать другой цикл,
до 2*2 Внутри него будет прибавление модуля разности для текущего зле-
мента к сумме, если зтот модуль еще не вошел в сумму, и процедура, запо-
минающая какие злементьі уже вошли в сумму:
242
КНрі/Луууху.сотрге^іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
£=0; II исходное значение функции отличия
збаскзіге=0; // и размера стека
£ог (х=0; х<2*2; х++) (2я)
{
і=Іп[х]; // текущий злемент
з=0; // просмотрим все уже обработанньїе:
иЬіІе(з<з£аскзі2Є) і£ (Збаск[з]==і) доСо МЕХТ
// если злемент еще не вошел
£+= аЬз(СоипбЬеіб[і]-СоипйКідЬї.[і]);
ЗЬаск[зЬаскзіге++]=і; // то вносим сейчас
ИЕХТ:
)
Г0[0]=£; // запишем в массив
Точно так же можно модифицировать первьій цикл внутри (3), вьічис-
ляющий РО: вместо него будет (2г), т. е. цикл не до л, а до 2-2.
Чтобьі избавиться от второго цикла до п внутри (3), заведем два массива
с флагами Р1а§Ьей и Р1а§кі§Ьі, параллельньїе СошіїЬей и СошіїКіеЬї. В них
будем записьівать, в какой позиции х делалась запись в соответствующую
позицию массива Сотії. При чтении же из Сотії будем читать и из Ріад. Ес-
ли значение в Р1а£ меньше текущего х, то в соответствующей ячейке масси-
ва Сотії должен бьггь нуль.
Упражнение. Перепишите (3) так, чтобьі не бьіло циклов до п.
Пути улучшения сжатия
Общий случай
Самий вьігодньїй путь - использование окна с убьіванием веса зле-
ментов при удалении от точки X. Линейное убмвание, например: вес двух
злементов, между которьіми лежит точка X, равен 2, вес двух следующих,
на расстоянии 1 от X, равен 2-1, и т. д., (2-і/) у злементов на расстоянии (і,
нуль у злемента, только что вьшіедшего из левого окна, и у злемента, кото-
рьій войдет в правое окно на следующем шаге.
Внутри основного цикла будет цикл либо до 2 - по длине окна, либо до
п - по всем возможнмм значенням злементов. В зависимости от значений 2
и п, один из зтих двух вариантов может сказаться существенно зффективнее
другого.
В первом случае - 2 существенно меньше п, вьігоднее цикл до 2 - вме-
сто инкрементирования будем добавлять веса, т. е. расстояния от X до даль-
ней границьі (самой левой в случае левого окна, самой правой в случае пра-
вого):
£ог( х=0; х<2; х++) { //цикл по длине окон: (2')
243
Книга написана коллективом 1Шр:/Лууууу.сошрге88Іоп.ги/
Методь, сжатия данньїх(7000+ файлов о сжатии)
// Соип£Ье£б[Іп[х]]++; //так било в цикле (2)
// СоипбКідЬб[Іп[х+2])++;//а теперь: прибавляєм
СоипбЬеГб[Іп[х]]+=х+1; // расстояние от левой границьі до х,
СоипбКідЬб[Іп[х+2]]+=2-х;// от х+2 до правой граници:
// 2*2-(х+2)
)
И аналогичньїе модификации в цикле (3).
Во втором случае - п существенно меньше 2, вьігоднее цикл до л - реа-
лизация гораздо сложнее: в дополнение к массиву со счетчиками появляется
второй массив с весами. Зато сохраняется возможность действовать так, как
в (За), не делая цикла по длине окна 2 внутри основного цикла:
£ог(х=2;х<М-2-1;х++) {//точка X - с позиции 2 до N-2-1 З*')
£=0;
£ог(і=0;і<п; і++)
// как изменятся веса злементов со значением
{ //і при переходе к позиции х+1?
ИеідМЬе£б [і] -=Соипї.Ье£б [і] ; // всего их СоипбЬе££ [і],
// каждий изменится на -1
НеідЬЬКідЬС[і]+=СоипСКідЬб[і]); // а каждий правий - на +1
// считаем значение отличия
£+=аЬз(ИеідИ£Ье£б[і]-КеідЬбКідЬб[і]);
}
// теперь сдвинем х на 1 вправо, внося и вьінося злементи
і=Іп[х-2];//злемент, вишедший из левого скользящего окна
СоипбЬеіб[і]—; // теперь в левом окне таких на 1 меньше
//вес его уже 0, позтому ИеідЬбЬеіб[і] не изменен
і=Іп[х+2]; //злемент, вошедший в правое окно
£-=аЬз (КеідИбЬе££. [і] -ИеідЬбКідЬб [і]) ;
// сумма без 1 слагаемого
СоипбКідЬб[і]++;//теперь в правом окне таких на 1 больше
ИеідЬЬКідЬб[і]++;//и вес их на 1 больше
11 обратно к полной сумме
£+=аЬз (ИеідЬ£.Ье£б [і] -ИеідЬ£КідЬ£ [і]) ;
і=Іп[х]; // злемент, перешедший из правого окна в левое
£-=аЬз(КеідЬ£Ье£б[і]-ИеідЬбКідЬб[і]) ;
// сумма без 1 слагаемого
Соип£.Ье££ [і] ++; // теперь в левом окне таких на 1 больше
ИеідЬ£Ье££[і]+=2; // вес их на 2 больше
СоипбКідЬб[і]—; // а в правом - на 1 меньше
ИеідЬбКідЬб[і]-=2; // вес их на 2 меньше
// обратно к полной сумме
£+=аЬз (Неід1ібЬе££ [ і ] -НеідИСВідЬі: [ і ]) ;
244
К((р:/Лу\у\у.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
ГО[х]=£; // запишем значение функции отличия в массив
}
Упражнение. Как будут вьіглядеть цикли (1) и (2) ?
Второй путь улучшения качества фрагментирования - находить макси-
мальнеє значение функции отличия при нескольких длинах окна: 72,...
2ц . Тогда зти вьічисляемьіе значення РО; придется делить на длину со-
ответствующего окна 2, при котором зто РО, вичислено. И предварительно
умножать на 2*, чтоби долучались величини не от 0 до 2, а от 0 до 2К+1.
Третин путь - периодическое (через каждне У точек) нахождение опти-
мальной длини окна 20.
Четвертий - анализ массива РО после того, как он полностью заполнен.
Пятнй - использование и других критериев при вьічислении РО(Л), на-
пример
не 2| СоипіЬей[У] - СошйКі§Ьі[У] |,
а 2(СошйЬей[У] - СоипЖІ£Ьі[У])2.
О-мерньїй случай
В двумерном случае появляется возможность следить за изменением
характеристик злементов при перемещении через точку X по К разним пря-
мим. В простейшем варианте - по двум перпендикулярним: горизонталь-
ной и вертикальной.
Алгоритм может вьіглядеть, например, так: сначала проходим по стро-
кам и заполняем массив РО значеннями функции отличия при горизонталь-
ном проходе: РО[А]=РОгор(А). Затем йдем по столбцам, вичисляя отличия
при вертикальном проходе РОверСУ) и записнвая в массив максимальнеє из
зтих двух значений - РОГОр(А) и РОверСУ). Дальше можно таким же образом
добавить РО при двух диагональних проходах (рис. 6.2), причем не для ка-
ждой точки, а в окрестностях точек с максимумами РО[А].
Рис. 6.2. Иллюстрация двумерного случая с К=4
Кроме того, если хватает ресурсов, можно рассматривать отличие не от-
резков длиной 2, отмеченнмх на К прямих, а секторов круга радиуса 2, раз-
битого на К секторов. Зто могут бьггь, например, две половини круга или
же 4 четвертинки круга.
245
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.ги/
Методьі сжатия данньїх <7000+ файлов о сжатии)
Теперь можно варьировать не только 2, пьітаясь найти оптимальнеє зна-
чение, но также и К.
Таким образом, будут найдена "контурьі" - граница, отделяющие об-
ласте с разнами характеристиками совокупности содержащихся в зтих об-
ластях злементов.
В трехмерном случае: либо используем ЛГП прямах, либо Кк секторов
круга, либо Кс секторов сфера. Причем оптимальнае (с точки зрения за-
числення) значення Хп не 2,4, 8..., как в двумерном, а 3,7, 13...
Упражнение. Нарисуйте зти вариантьі с тремя прямими, семью и тринадца-
тью. Как продолжить процесе дальше?
Совершенно аналогично и в О-мерном случае.
Характеристики метода фрагментирования:
Степень сжатия: увеличиваетея в 1.0-1.2 раза.
Типьі данньїх: неоднороднае данньїе, особенно с тоннами границя-
ми фрагментов.
Симметричность по скорости: более чем 10:1.
Характерньїе особенности: может применяться не только для сжатия
данньїх, но и для анализа их структура.
Глава 7. Предварительная обработка
данньїх
Предварительная обработка даннах ваполняетея до их сжатия как тако-
вого и призвана улучшить козффициент сжатия. Схема кодирования в зтом
случае приобретает вид:
Исходньїе данньїе -> препроцессор -> кодер -> сжатьіе данньїе
а схема декодирования:
Сжатьіе данньїе -> декодер -> постпроцессор -> восстановленньїе данньїе
Препроцессор должен так видоизменить входной поток, чтоба козффици-
ент сжатия преобразованньїх данньїх бал в ереднем лучше козффициента сжа-
тия исходнмх, "сьірьіх" даннах. Система препроцессор-постпроцессор работает
автономно; кодер "не знает", что он ежимает уже преобразованньїе данньїе.
Постпроцессор восстанавливает исходньїе данньїе без потерь информации, по-
зтому результати работьі и само существование система препроцессор-
постпроцессор могут бать не заметем для внешнего наблюдателя.
В общем случае преобразования, ваполняемае препроцессором, могут
бать реализованм в кодере и при зтом бьіть такими же зффектевнами с
246
Шір:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Мелюдьі сжатия без потерь
точки зрения улучшения сжатия. Но предварительная обработка позволяет
существенно упростить алгоритм работьі кодера и декодера, дает возмож-
ность создания достаточно гибкой специализированной системи сжатия
данньїх определенного типа на основе универсальньїх алгоритмов. Модули
препроцессор-постпроцессор обмчно можно применять в сочетании с раз-
личньїми кодерами и архиваторами, повьішая их степень сжатия и, возмож-
но, скоросгь работм.
В зтой главе рассмотрено несколько способов предварительной обработ-
ки типичнмх данньїх. Предполагается, что алгоритм сжатия предназначен
для кодирования источников с памятью. Описмваемие методи препроцес-
синга достаточно хорошо известни в кругу разработчиков програми сжа-
тия, но не получили широкого освещения в литературе.
Препроцессинг текстов
В последние несколько лет приобрели популярность и били существен-
но развити методи предварительной обработки текстовой информации.
В настоящее время специализированний препроцессинг текстов, позво-
ляющий заметно улучшить сжатие, используется в таких архиваторах, как
АЯНАНОЕЬ, ІАК, ЯК, 8ВС, ШАНС, в компрессорах ОС, РРМИ.
ИСПОЛЬЗОВАНИЕ СЛОВАРЕЙ
Идея преобразования данньїх с помощью словаря заключается в замене
каких-то строк текста на коди фраз словаря, соотвстствующих зтим стро-
кам. Часто указмвается просто номер фрази в словаре. Пожалуй, метод сло-
варной замени является самим старим и известним среди техник предвари-
тельного преобразования текстов, да и любих данньїх вообще. Сама сло-
варная замена может приводить как к сжатию представлення информации,
так и к его расширению. Главное, чтобм при зтом достигалась цель преоб-
разования - изменение структури данних, позволяющее повисить зффек-
тивность последующего сжатия.
Можно виделить несколько стратегий построения словаря. По способу
построения словари бьівают:
статическими, т. е. заранее построеннмми и полностью известньїми как
препроцессору, так и постпроцессору;
полуадаптивнмми, когда словарь вмбирается из нескольких заранее
сконструированнмх и известнмх препроцессору и постпроцессору или
достраивается, при зтом один из имеющихся словарей берется за основу;
адаптивними, т. е. целиком создаваеммми специально для сжимаемого
файла (блока) данньїх на оснований его анализа.
247
Книга написана коллективом 1ііір:/Лууууу.сотрге88Іоп.пі/
(7000+ файлов о сжатии)
Методьі сжатия данньїх
В качестве фраз обьічно используются [4]:
цельїе слова;
последовательности из двух символов (биграфьі);
пари букв, фонетически зквивалентньїх одному звуку;
парьі букв согласная - гласная или гласная - согласная;
последовательности из п символов (л-графм).
Как правило, существует огромное количество последовательностей, ко-
торьіе в принципе могут стать фразами, позтому необходимо применять ка-
кие-то критерии отбора. Обьічно в словарь добавляются:
последовательности, чаще всего встречающиеся в сжимаемом тексте или
в текстах определенного класса;
одни из самих часто используемьіх последовательностей, удовлетворяю-
щие некоторьім ограничениям;
слова, без которих едва ли сможет полупиться связнмй текст: предлоги,
местоимения, союзи, артикли и т. п.
Словарь п-графов
Судя по всему, наибольшее распространение в современних архивато-
рах и компрессорах полупила стратегия статического словаря, состоящего
из последовательностей букв длини от 2 до небольшого числа п (обьічно 4-
5). В большинстве случаев размер словаря равен примерно 100 таким фра-
зам. К достоинствам данного типа словаря можно отнести:
малий размер;
• отсутствие жесткой привязки к определенному язику;
обеспечение существенного прироста степени сжатия;
простота реализации.
Небольшой размер словаря обусловлен двумя причинами:
зто упрощает кодирование фраз словаря;
дальнейшее увеличение размера словаря улучшает сжатие лишь незна-
чительно (справедливо для В\УТ и в меньшей степени для Ь2) либо даже
вредит в большинстве случаев (справедливо для РРМ).
Обьічно тексти представлень! в формате "ріаіп іехї", когда 1 байт соот-
ветствует одному символу. Так как размер словаря мал, то в качестве ин-
декса фраз виступают неиспользуемие или редко используемие значення
байтов. Например, если обрабативается текст на английском язике, то по-
явление не-АЗСП байтов со значением 0x80 и больше маловероятно. По-
зтому ми можем заместить все биграфи "ОТ на число 0x80. Если байт 0x80
все же встретится в обрабативаемьіх даннмх, то он может бить передай как
пара (<флаг исключения>, <0х80>), где флаг исключения может бить равен,
248
йіірї/Лууууу.сошргеззіоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
например, ОхРЕ. Зто обеспечивает однозначность восстановления текста
постпроцессором.
Упражнение. Каким образом будет передай байт, равньїй самому флагу ис-
ключения?
Недостатком данного типа словаря является отсутствие формализован-
ного алгоритма построения. Как показали зксперименти, добавление в сло-
варь самьіх часто используемьіх последовательностей букв небольшой дли-
ньї действительно улучшает сжатие, но такой подход не приводит к получе-
нию оптимального состава словаря. Позтому построение словаря делается в
полуавтоматическом режиме, когда для заданного кодера и заданного тес-
тового набора текстов змпирически определяется целесообразность внесе-
ння или удаления из словаря той или иной фразьі, исходя из изменения ко-
зффициента сжатия тестового набора.
Например, для английского язьїка хорошо работает словарь, представ-
ленньїй в табл. 7.1. В него входят 45 последовательностей длиньї 2 (бигра-
фов), 25 последовательностей длиньї 3 (триграфов) и 16 последовательно-
стей длини 4 (тетраграфов). Список отсортирован в примерном порядке
убивання полезности фраз (внутри каждой группн и-графов - слева направо
и сверху вниз).
Таблици 7.1
Биграфьі Триграфьі Тетраграфьі
Ф ег іп ои ап еп Фе іпд ап4 ікЬі 8ЄІГ
еа ог 11 із оп аг Гог езз УЄГ у^апі Фіз
зі ей ее от оо ууаз І£Іі оиз Ьауе Ьееп
оуу 55 иг И аі зЬ оиг еП ееп аЬІе пйег
ій за іс іг аі іі Над ісЬ икЬ Ше ууіФ
аз іг ес иі 1у еі • Ьег оиі Ьіз оиші геаі
аі сЬ оі іі ау іт еад агй оте Фаі хуЬаі
оі іо чи езі еЬі гот (готФег
ІФ
Пример
Строка
| Ье іоок Ьіз уограї зууогд іп Ьапсі |
будет преобразована в последовательность:
| Ье <іо>ок <ЬІ8> у<ог>р<а!> з\у<ог>с1 <іп> Ь<ап<1> |
В угловьіх скобках показаньї и-графьі, заменяемьіе на их индекс в словаре.
249
Книга написана коллективом 1йір:/Лууууу.сотрге88Іоп.ги/
МетоДь, сжатия данних(7000+ файлов о сжатии)
Сначала отображаются тетраграфм (в разбираемой строке их нет), затем
триграфьі и в самую последнюю очередь биграфьі.
Рассмотрим пример реализации простейшей словарной заменьї для анг-
лийских текстов. Пусть словарь состоит только из 10 биграфов, в качестве
кодов биграфов используются не-А8СІІ байти со значеннями 128-137, ис-
ключительнме ситуации не отслеживаются, т. е. предполагается, что во
входном файле отсутствуют не-А8СІІ символи.
сопзб іп£ ВІСКАРН_МОМ = 10;
сопзб сЬаг ЬІізС [ВІ6КАРН_МОМ][3] = {
"СЬ", "ег", "іп", "ои", "ап",
"еп", "еа", "ог", "11", "із"
1;
/♦предполагаем, что Ьпит - глобальная переменная и
инициализируется нулями; в зтом массиве будем хранить кода
биграфов
*/
ипзідпесі сЬаг Ьпит [256] [256];
іпЬ соде = 128;
£ог (іпб і = 0; і < ВІСВАРНМОМ; і++){ //заполним Ьпит
Ьпит [ Ь1ізб[і] [0] ] [ Ь1ізЬ[і] [1] ] = сосіе++;
1
іпб сі, с2;
сі = ОаЬаГіїе.ВеасіЗутЬої () ;
нЬіІе ( сі != ЕОГ ) {
с2 = ВаЬаГіїе.ВеасіЗутЬої ();
і£ ( с2 == ЕОГ ) {
РгергосГіїе.ИгіЬеЗутЬої (сі);
Ьгеак;
}
і£ (Ьпит[с1][с2]){
//такой биграф имеется в словаре, произведем замену
РгергосГіІе.НгіЬеЗутЬоІ (Ьпит[сі][с2]);
сі = ВаЬаГіїе . ВеасІЗутЬої ();
}е1зе{
РгергосГіїе .ИгіЬеЗугпЬої (сі);
сі = с2;
}
)
Для русского язика неплохие результати показнвает словарь, описан-
ний в табл. 7.2. Заметим, что словарь для русских текстов имеет меньший
размер, чем для английских.
250
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Таблица 7.2
Биграфьі Триграфьі Тетраграфьі
то ст ов єн по аз ак ер ол ор ств бмл при лько врем
он ел ет ам от ом ас ан ин ск про ере ого тобьі огда
на за ар ик пр ев ив ит ил ед ост ись енн азал ольш
ем ть ал ат ав ся ес об од ос вет еред отор
ис ОГ им ег ич сь
За счет описанной словарной заменм достигается значительное улучше-
ние сжатия текстов (табл. 7.3). В качестве тестового файла бмл использован
роман на английском язьіке "ТЬгее теп іп а Ьоаі (Іо зау поіЬіпе оГ йіе <1о§)"
("Троє в лодке, не считая собаки"), злектронньїй вариант которого занимал
около 360 Кб в исходном виде. Отказ от сравнения с помощью больших
текстових файлов Воокі и Воок2, входящих в состав стандартного набора
Са1&СС, бмл обусловлен тем, что они являются не вполне типичнмми тек-
стами. Первмй файл содержит значительное количество опечаток, а вто-
рой - большой обьем служебной информации о форматировании текста.
Таблица 7.3
Архиватор Тип метода сжатия Размер архива исходного . файла, байт Размер архива обработанного файла Улучшение сжатия %
Вгір2, вер. 1.00 В\УТ 109736 107904 1.7
У/іпЯАК, вер. 2.71 Ь277 130174 126026 3.2
НАа2, вер. 0.999с РРМ 108443 106831 1.5
Заметим, что в случае Вгір2 и НА сжатие могло бмть улучшено. С одной
сторони, козффициент сжатия алгоритма ВХУТ зависит от номеров симво-
лов в алфавите, а нами не делалось никаких попмток переупорядочить бо-
лее подходящим образом АЗСП-символм и номера добавленньїх нами фраз.
С другой сторони, НА использует небольшой обьем памяти и часть накап-
ливаемой в РРМ-модели статистики периодически вибрасивается, что
ухудшает предсказание и, соответственно, сжатие.
Зффективность использования п-графового словаря с другим составом
фраз совместно с В\УТ архиваторами оценена в [2].
Обмчно применение л-графового словаря улучшает сжатие компрессо-
ров, использующих РРМ или В\УТ, на 2%.
Степень сжатия компрессоров на базе методов Зива - Лемпела может
бмть заметно улучшена за счет увеличения размера словаря препроцессора
и использования фраз большей длиньї. В принципе фрази могут включать
251
Книга написана коллективом К((р:/Лу\у\у.сотрге‘і‘ііоп.і'и/
Методьі сжатия данньїх(7000+ файлов о сжатии)
не только буквьі, но и пробельї, что, кстати, приводит к ухудшению сжатия
в случае В\УТ или РРМ.
Словарь ЬІРТ
В качестве примера словаря, в котором фразами являются слова, рас-
смотрим схему Ьеп§ій Іпбех Рге8егуіп§ ТгапзЕогтабоп (ЬІРТ) - преобразова-
ние с сохранением индекса длиньї [1]. В словарь включаются самие часто
используемьіе слова, определяемьіе исходя из анализа большого количества
текстов на заданном язьіке и, возможно, определенной тематики. Под сло-
вом здесь понимается последовательность букв, ограниченная с двух сторон
символами, не являющимися буквами ("не-букв"). Весь словарь делится на
части (подсловари). В зависимости от своей длиньї Ц слово попадает в часть
словаря с номером і. В пределах подсловаря фразьі отсортированн в поряд-
ке убьівания частотьі, т. е. самое часто используемое слово имеет мини-
мальньїй индекс 0. Каждое слово исходной последовательности, которому
соответствует какая-та фраза словаря, кодируется следующим образом:
флаг длина слова (номер подсловаря) индекс в подсловаре
В качестве алфавита для записи длиньї слова и индекса авторами алго-
ритма предлагается использовать алфавит язьїка. Например, если мьі рабо-
таем с английским язиком, то "а" соответствует 1, "Ь" - 2, ..., "г" - 26, "А” -
27, ..., ”2" - 52 и далее "аа" - 53, "аЬ” - 54... Нулевой индекс явним обра-
зом не передается. Если, допустим, слово "теге" имеет индекс 29 в своем
подсловаре 4, то оно будем преобразовано так (для больїпей доходчивости
различньїе части кода фрази внделенн подчеркиванием):
"теге" -> "<флаг>_<1_С".
Если индекс равен 56, то отображение будет таким:
"теге" -> "<флаг>_б_аб".
Индекс указан как "аб", поскольку он записивается в позиционной системе
счисления и первая буква соответствует старшему порядку. Конец последо-
вательности, передающей индекс, нет нужди указивать явно, поскольку се-
ли ми рассматриваем "теге" как слово, то оно должно ограничиваться ка-
кой-то "не-буквой", которая и станет маркером конца записи индекса.
Если слово отсутствует в словаре, то оно без изменений копируетея
в файл преобразованннх данньїх.
Зксперименти показьівают, что для различннх алгоритмов сжатия ви-
годнее использовать разние алфавита длини слова и индекса. Также иногда
имеет смисл использовать иной принцип разбиения словаря. Рассмотрим
результати сжатия текста "ТЬгее теп іп а Ьоаі (іо зау поЙііп§ о£ (Не бо§)" для
следующих трех алгоритмов ЬІРТ:
1) алгоритма 1 - пракгически соответствует авіорскому, но алфавит огра-
ничен только строчньїми английскими буквами;
252
Іі((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методи сжатия без потерь
2) алгоритма 2 - алфавитьі длиньї слова и индекса отличаются от алфа-
вита букв и не пересекаются между собой;
3) алгоритма 3 - словарь разбивается на подсловари не только по крите-
рию длиньї фраз, но и по соответствию слова определенной части ре-
чи1; используются такие же алфавитм, что и в алгоритме 3.
Словарь ЬІРТ бьіл построен на оснований анализа примерно 50 Мб анг-
лийских текстов различного характера. Общий обьем словаря составил око-
ло 53 тне. фраз, или 480 Кб. Для реализации алгоритма 3 примерно 11.6 ти-
сяч. слов бил присвоен атрибут принадлежности к определенной части ре-
чи, например "Йіе" - артикль и т. д. Классификация била очень груба -
использовалось всего лишь 9 категорий. Если слово могло относиться к не-
скольким частям речи, то вибиралась самая часто употребляемая форма
(понятно, здесь бьіл определенний произвол). Слова, не получившие такого
лексического атрибута, трактовались как существительние. Схема кодиро-
вания для алгоритма 3 имела вид:___________________________________
флаг часть речи длина слова индекс в подсловаре
Например:
"шеге" -> "<флаг><прилагательноехдлина = 4хиндекс>",
где индекс определяет положение фрази в подсловаре 4-буквеннмх прила-
гательньїх.
Результати зкеперимента приведени в табл. 7.4.
Таблица 7.4
Архива- тор Тип мето- да сжа- тия Алгоритм ЬІРТ 1 Алгоритм ЬІРТ 2 Алгоритм ЬІРТ 3
Размер архива, байт Улуч- шение сжатия Размер архива, байт Улуч- шение сжатия Размер архива, байт Улуч- шение сжатия, %
Вгір2, вер. 1.00 В\УТ 102797 6.3 100106 8.8 101397 7.6
ХУіпКАК., вер. 2.71 Ь277 118647 8.9 122118 6.2 125725 3.4
НА а2, вер. 0.999с РРМ 100342 7.5 98838 8.9 98173 9.5
Таким образом, для Ь277 лучше всего подходит обичний алгоритм
ЬІРТ. Очевидно, что Ь277 плохо использует корреляцию между строками и
7 Зта модификация ШРТ разработана и реализовано М. А. Смирновьім летом
2001 г.
253
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.пі/
Мятодм сжатия данньїх (7000+ файлов о сжатии)
основной вмигрьіш достигается за счет уменьшения длин совпадения и ве-
личин смещений. Алгоритм 2 можно признать компромиссньїм вариантом.
Для РРМ-компрессоров имеет смьісл использовать алгоритм 3.
Преобразование заглавньіх букв
Заглавньїе буквьі существенно увеличивают число встречающихся в тек-
сте последовательностей и, соответственно, приводят к ухудшению сжатия
по сравнению с тем случаем, если бм их не бьіло вообще. Способ частинно-
го устранения зтого неприятного явлення очевиден. Если слово начинается
с заглавной буквьі, то будем преобразовьівать его так, как показано на
рис. 7.1 [2].
флаг первая буква, преобразованная в строчную оставшаяся часть слова
Рис. 7.1. Преобразованний вид слова, начинавшегося с заглавной букви
При зтом под словом понимается последовательность букв, ограничен-
ная с двух сторон "не-буквами".
Например, если в качестве флага используется байт 0x00, то преобразо-
вание может иметь вид:
"_Если_" > "_<0х00>если_"
Для ВАУТ- и РРМ-компрессоров отмечается улучшение сжатия, если по-
сле флага вставляется пробел, т. е. когда результат преобразования имеет
вид типа "_<0х00>_если_". Невьігодно преобразовьівать слова, состоящие
только из одной заглавной буквм.
Иногда в текстах встречается много слов, набранньїх полностью заглав-
ньіми буквами. Очевидно, что в зтом случае описанное преобразование не
только не помогает, но и, возможно, даже вредит. Позтому целесообразно
использовать еще одно отображение, переводящее слова, состоящие цели-
ком из заглавньіх букв, в соответствующие слова из строчнмх букв
(рис. 7.2). _____________________________________________
флаг 2 последовательность букв слова, преобразованньїх в строчньїе
Рис. 7.2. Преобразованньїй вид слова, целиком состоявшего из заглавньіх букв
Если в роли флага 2 вьіступает байт 0x01, то справедлив такой пример
отображения:
"_АЛГОРИТМЬІ_" -» "_<0х01>алгоритмм_".
Как уже указмвалось, добавление пробела после флагов улучшает сжа-
тие В\*/Т- и РРМ-компрессоров.
254
1і((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методи сжатия без потерь
Может показаться, что описаними алгоритм вносит избьггочность за счет
использования флага даже в тех случаях, когда в нем нет особой необходи-
мости. Если текущее слово является первьім встреченнмм после точки, вос-
клицательного или вопросительного знака, то его начальная буква наверня-
ка является заглавной и флаг излишен. Естественно, для обеспечения пра-
вильности декодирования необходимо одно из двух:
особо обрабатьівать ситуации, когда первая буква все-таки отрочная, на-
пример использовать специальньїй флаг, сигнализирующий об исключении;
делать компенсирующее преобразование, отображающее все строчнме
букви, встречаемме после знаков конца предложения, в заглавнме.
Несмотря на кажущуюся зффективность, в случае компрессоров В\УТ и
РРМ такая техника работает хуже ранее рассмотренньїх, поскольку наруша-
ет регулярносте в использовании флагов и искажает контекстно-зависимую
статистику частот символов. Если же необходимо разработать препроцессор
текстових данньїх исключительно для ЬХ-архиваторов, то, действительно,
следует избавиться от ненужнмх флагов.
В табл. 7.5 описивается зффект от использования преобразования за-
главннх букв для архиваторов различних типов на примере сжатия уже
упоминавшегося злектронного варианта книги "ТЬгее шеп іп а Ьоаі (іо зау
пойііп§ о£ йіе (ІО£)".
Чтобн продемонстрировать роль вставки пробела после флагов, мм рас-
смотрели два алгоритма предварительной обработки. Алгоритм 1 преобразует:
слова, начинающиеся с заглавной букви, но далее состоящие из одной или
более строчних, в соответствии с правилом, изображенним на рис. 7.1;
слова из двух и более символов, содержащие только заглавнме букви, в
соответствии с правилом, приведеннмм на рис. 7.2.
Алгоритм 2 использует зти же два отображения, но добавляет после фла-
гов пробел.
Таблица 7.5
Архиватор Тип метода сжатия Алгоритм 1 Алгоритм 2
Размер архива, байт Улучшение сжатия, % Размер архива, байт Улучшение сжатия, %
Вхір2, вер. 1.00 ВХУТ 108883 0.8% 108600 1.0%
ХМіпКАК, вер. 2.71 Ь277 128351 1.4% 128563 1.2%
НА а2, вер. 0.999с РРМ 107285 1.1% 107137 1.2%
255
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.пі/
Методьі сжатия данньїх <7000+ файлов о сжатии)
Добавление пробела заметно улучшило сжатие для алгоритма В\УТ, бла-
гоприятно повлияло на зффективность РРМ, но сказалось отрицательно
в случае ЬХ77.
Модификация разделителей
Текст содержит не только букви, но и символьї-разделители. Разделите-
ли бьівают:
естественньїми - зто знаки препинания, пробелм;
связаннмми с форматированием текста - символьї конца строки (СКС),
символьї табуляции.
Символьї-разделители в большинстве случаев плохо предсказьіваются на
оснований контекстно-зависимой статистики. Особенно плохо предсказьі-
ваются символи конца строки, т. е. пара символов {перевод каретки, пере-
вод строки} СК/ЬР или символ перевода строки ЬР.
Козффициент сжатия ВУ/Т- и РРМ-компрессоров может бить улучшен,
если преобразовать знаки препинания и СКС, вьіделив их из потока букв.
Наиболее зффективньїм и простим способом модификации является добав-
ление пробела перед отими разделителями [2]. Например:
"очевидно," -> "очевидно_,",
при зтом:
"очевидно_," -> "очевидно_,".
Преобразование однозначно: когда постпроцессор встречает пробел, он
смотрит на следующий символ и, если зто разделитель (знак препинания
или СКС), пробел на вмход не вндается.
Положительний зффекг отображения обьясняется тем, что пробел
встречается в таких же контекстах, в которих встречаются и преобразуемне
знаки. Позтому внполнение преобразования приводит к следующему:
уменьшается количество используемнх контекстов и, следовательно,
увеличивается точность накапливаемой статистики;
пробел сжимается часто сильнеє, чем соответствующий знак препинания
или СКС, и при зтом предоставляет несколько лучший с точки зрения
точности предсказания контекст для последующего разделителя.
Укажем несколько способов повьішения производительности схеми:
в случае СКС пробел в большинстве случае внгодно добавлять и после
символа (-ов) конца строки; при зтом лучше воздержаться от преобразо-
вания, если первий символ новой строки не является ни буквой, ни про-
белом;
сжатие обмчно улучшается в среднем, если не делается преобразование
знаков препинания, за котормми не следует ни пробел, ни СКС;
256
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
• не следует вставлять пробел перед знаком препинания, если предьіду-
щий символ не является ни буквой, ни пробелом.
' 2^. Упражнение. Почему необходимо депать модификацию в том случае, когда
предьідущий символ является пробелом?
В целом зффект от модификации разделителей менее стабилен, чем от сло-
варной заменьї или перевода заглавньіх букв в строчньїе. Вьіиірьіш практиче-
ски всегда достигается главньїм образом за счет преобразования СКС и сосгав-
ляет 1-2 %. В случае В\УТ преобразование знаков препинания дает неустойчи-
вьій зффект, лучше обрабатьівать таким образом только СКС.
Результати сжатия различньїми архиваторами преобразованного текста
книги "Тйгее теп іп а ЬоаС (іо вау поікіп^ о£ йіе бо£)" приведень! в табл. 7.6.
Таблица 7.6
Архиватор Тип метода сжатия Размер архива обработанного файла, байт Улучшение сжатия, %
Вхір2, вер. 1.00 В^Т 108864 0.8
ХУІпКАК, вер. 2.71 Ь277 130835 -0.5
НА а2, вер. 0.999с РРМ 106582 1.7
Данньїе табл. 7.6 подтверждают, что использование описанного преобра-
зования в сочетании с методов Ь277 бессмьісленно.
СПЕЦИАЛЬНОЕ КОДИРОВАНИЕ СИМВОЛОВ КОНЦА СТРОКИ
Как уже отмечалось, СКС плохо сжимаются сами и ухудшают сжатие
окружающих их символов.
Очевидно, что если бьі ми заменили СКС на пробельї, то сжатие текстов
улучшилось бьі существенньїм образом. Зтого можно достигнуть, искусст-
венно разбив исходньїй файл на два блока: собственно текст, в котором
СКС замененьї на пробельї, и сведения о расположении СКС в файле, т. е.
фактически информация о длинах строк. Если в расположении СКС имеется
достаточно строгая регулярності», то сумма размеров сжатого блока преоб-
разованного текста и сжатого блока длин строк будет меньше размера архи-
ва исходного файла [2].
Зффективность специального кодирования СКС непрямую зависит от ха-
рактере респределения длин строк в тексте. Если текст отформетирован по ши-
рине строки, то сведения о длинах строк могут бьггь представленьї очень ком-
пактно. Напротив, если в тексте много коротких строк, максимальная длина
строки в символах не вьідерживается постоянной, то скореє всего, специальное
кодирование СКС будет малополезно или вовсе невьігодно.
Одним из возможньїх способов задания длиньї строки является количе-
ство пробелов, лежащих между прсдьідущим и текущим СКС. Например:
257
Книга написана коллективом Іійрї/Лууууу.сотргеззіоп.пі/
Методь/ сжатия данньїх (7000+ файлов о сжатии)
Строка Длина строки в пробелах
ТУ¥а5_Ьгі11»в,_ап<і_йіе_5Ііі1іу_І0УЄ5 5
Від^уге_аші_8ІтЬ1е_іп_йіе_АУаЬе; 6
АП_тітху_\уеге_іЬе_Ього8ОУЄ8, 4
Ап<і_іЬе_тоте_гаі1і8_оиІ§гаЬе. 4
Поскольку мьі измеряем длину строки не в символах, а скореє в словах, то
количество наблюдаемьіх длин строк не будет велико и с помощью арифмети-
ческого кодирования можно достаточно компактно представить информацию о
расположении СКС в тексте. В простейшем случае достаточно кодировать дли-
ньї на оснований безусловньїх частот их использования.
Постпроцессор получит два блока данньїх:
Блок Данние блока /
Текст Тшаз_Ьгі11іе,_ап<1_йіе_8Іійіу_Іоуез_ Від_£уге_апд_2ІшЬ1е_іп_Ійе_іуаЬе;_ А11_иіітзу_...
Длини строк 5, 6,...
Так как постпроцессору известно, что первая строка содержит 5 пробе-
лов, то он заменит 6-й по счету пробел на СКС:
"..ЛОУЄ8_ВІСІ..." "...ІОУЄ8<СКС>ПІ(І..."
Для следующей строки он заменит на СКС 7-й пробел и т. д. Таким образом
текст будет полностью реконструирован.
Укажем несколько способов повьішения степени сжатия.
Оценка вероятности длиньї строки может бьіть улучшена, если прини-
мать во внимание символьї, приммкающие к пробелу слева и справа, и если
учитьівать текущую длину строки в символах. Зто позволит компактнеє
представить информацию о длинах строк с помощью арифметического ко-
дирования.
Зксперименти показивают, что можно заменять на пробельї не все СКС,
а только соответствующие достаточно длинньїм строкам. Зачастую зто спо-
собствует повьішению общей степени сжатия. При зтом, однако, появляется
проблема определения, при каких же именно длинах строк вьігодно "запус-
кать" преобразование. В компрессоре РРМК используется следующий спо-
соб нахождения порога, при превьішении которого длиной £ строки вклю-
чается преобразование СКС. Величина £ принимается за постоянную на
протяжении обработки всего файла. Для вьічисления £ анализируется дос-
таточно большой блок (до 32 Кб) исходного файла и собирается информа-
ция о количестве (частоте) строк с определенной длиной £, измеряемой в
символах. В подавляющем большинстве случаев частоти длин строк мак-
симальна в районе наибольшей наблюдаемой длиньї £таі строк, а затем дос-
258
1ііір:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
таточно резко падают с уменьшением Ь. Позтому, двигаясь от £таі к нуле-
вой длине, находим сначала максимум часто™, а затем, продолжая умень-
шать Ь, ищем пороговое значение. Порог принимается равнмм £, для кото-
рой частота впервьіе становится меньше средней часто™ длин строк. С
другой сторони, в качестве порога целесообразно вибирать точку, в кото-
рой произошло многократное падение частота, что характерно для текстов
со строгим виравниванием по ширине.
Данная техника позволяет определять порог с очень високой точностью
в случае текстов достаточно простам форматированием.
На рис. 7.3 изображено распределение частот длин строк, полученное
для первих 32 Кб текста "ТИгее теп іп а Ьоаі (іо зау пойїіп^ о£ іЬе <іо§)".
Видно, что Ьпас = 73, максимум частота находится в точке £ = 72, а порог
равен 65 символам, поскольку при зтом частота впервие становится меньше
средней частоти, если считать от точки £ = 72.
длина строки в символах (£)
|—+—Частота строк такой длиньї Средняя частота длин строк
Рис. 7.3. Распределение частот длин строк, полученное для первьіх 32 Кб текста
"ТИгее теп іп а Ьоаі (Іо зау поіНіп§ о/Іке <3о%)"
В качестве примера укажем в табл. 7.7 результати сжатия тремя вмбран-
ннми нами архиваторами преобразованного текста "ТИгее теп іп а Ьоаі (іо
зау поійіщ» оґійе бо§)". Длина строк измерялась в пробелах, преобразовива-
лись только СКС в строках с длиной 65 символов и более. Длини строк
сжимались с помощью арифметического кодера на оснований их безуслов-
них частот. Размер закодированного описання длин получился равнмм
793 байтам, и зто число добавлялось к размеру архива обработанного файла
при сравнений зффективности преобразования относительно разних мето-
дов сжатия (В\УТ, Ь277, РРМ).
259
Книга написана коллективом Й11р:/Лууууу.сотрге88іоп.ги/
(7000+ файлов о сжатии)
Методьі сжатия данньїх
Таблица 7.7
Архиватор Тип мето- да сжатия Размер архи- ва исходного файла, байт Размер архива обрабо- танного файла плюс размер описання длин строк, байт Улучшение сжатия, %
Вгір2, вер. 1.00 В\УТ 109736 106069 3.3
ХУіпКАК, вер. 2.71 Ь277 130174 126042 3.2
НАа2, вер. 0.999с РРМ 108443 105018 3.2
Видно, что специальное кодирование СКС вьігодно использовать в соче-
тании с любмм универсальньїм методом сжатия.
Оценка общего зффекта от использования
ПРЕДВАРИТЕЛЬНОЙ ОБРАБОТКИ
До сих мьі рассматривали различньїе методи препроцессинга текстов не-
зависимо друг от друга. Естественно, что практический интерес требует их
одновременного использования. Получим ли ми при зтом увеличение сжа-
тия равним сумме улучшений, обеспечиваеммх каждмм способом препро-
цессинга по отдельности? Ответ на зтот вопрос дают табл. 7.8 и 7.9, в кото-
рмх приведенм результати сжатия текста "ТЬгее теп іп а Ьоаі (Іо зау
пойііп§ о£ (Не доз)", преобразованного с помощью последовательного при-
менения четнрех техник:
специального кодирования СКС;
• преобразования заглавньіх букв;
модификации разделителей;
словарной заменн л-графов (словарь из табл. 7.1).
Таблица 7.8
Архива- тор Тип ме- тода сжатия Размер архива исходного файла, байт Размер архива обработанного файла плюс размер описання длин строк, байт Улучше- ние сжа- тия, % Улучшение сжатия без вьіполнения модифика- ции раздели- телей, %
Вхір2, вер. 1.00 В\УТ 109736 103047 6.1 6.0
\УіпКАК., вер. 2.71 Ь277 130174 120632 7.3 7.8
НА а2, вер. .999с РРМ 108443 99788 8.0 7.3
260
К((р:/Лу\у\у.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методи сжатия без потерь
В табл. 7.9 ожидаемое улучшение сжатия вьічислялось как сумма улуч-
шений для всех четьірех типов препроцессинга относительно размера архи-
ва исходного непреобразованного файла (см. табл. 7.3,7.5,7.6, 7.7).
Таблица 7.9
Архиватор Тип метода сжатия Улучшение сжатия, % Ожидаемое улучшение сжатия, %
Вгір2, вер. 1.00 В)УТ 6.1 6.8
ХУіпКАК, вер. 2.71 Ь277 7.3 7.1
НА а2, вер. 0.999с РРМ 8.0 7.6
Из таблиц видно, что для НА и, в меньшей степени, \УіпКАК, проявился
даже положительний кумулятивний зффект от применения нескольких ал-
горитмов предварительной обработки. Зто достаточно страннмй на первьій
взгляд результат, так как чем совершеннее алгоритм сжатия, тем меньший
вьіигрьіш должно давать использование дополнительньїх механизмов, что,
собственно, мьі и наблюдаем в случае архиватора В2ІР2. До некоторой сте-
пени зто можно обьяснить тем, что после преобразования заглавннх букв
большее количество л-графов может бить заменено на соответствующие им
индекси словаря, что уменьшает разнообразие используеммх строк и спо-
собствует увеличению сжатия. Возможно, сочетание словарной заменн со
специальним кодированием СКС настолько уменьшает общее количество
строк, сжимаемих с помощью словаря Ь277, при одновременном уменьше-
нии их фиктивной длини, что зто компенсирует падение общего процента
улучшения сжатия. Вставка пробелов или замена СКС на пробелн умень-
шает количество контекстов и соответственно уменьшает размер РРМ-
модели, позтому НА, ограниченний всего лишь примерно 400 Кб памяти,
может использовать для оценки большее количество статистики, что улуч-
шает сжатие. Судя по всему, реализация В¥/Т и сопутствующих методов в
В2ІР2 и принципиальнне особенности алгоритма блочной сортировки не
позволили ВХУТ "воспользоваться" ситуацией так же зффективно, как Ь277
иРРМ.
Рассмотрим, что произойдет при использовании ЬІРТ вместо словарной
заменн л-графов. В табл. 7.10 представлень! результати сжатия преобразо-
ванного текста, полученного с помощью трех упоминавшихся техник пре-
процессинга с последующим использованием ЬІРТ, алгоритм 2 (см. "Ис-
пользование словарей" в начале подразд. "Препроцессинг текстов").
261
Книга написана коллективом К((р:/Лу\у\у.сотрге‘і‘ііоп.і'и/
Методи сжатия денних <7000+ файлов о сжатии)
Таблица 7.10
Архиватор Тип ме- тода сжатия Размер ар- хива исход- ного файла, байт Размер архива обработанного файла плюс раз- мер описання длин строк, байт Улуч- шение сжатия, % Ожидае- мое улучше- ние сжа- тия, %
Вгір2, вер. 1.00 В5¥Т 109736 93882 14.4 12.9
ХУіпКАК, вер. 2.71 Ь277 130174 114566 12.0 10.1
НАа2, вер. 0.999с РРМ 108443 94191 13.1 14.9
И опять ми видам, что различние способи препроцессинга дополняют
друг друга, обеспечивая рост степени сжатия. Хотя теперь ситуация до не-
которой степени поменялась: увеличение сжатия больше ожидаемого для
В\УТ и Ь277, а в случае РРМ наблюдается зффект "насмщения". Отметим,
что использованная схема предварительной обработки далеко не самая луч-
шая, если ее предполагается использовать совместно с ЬХ-компрессором.
В зтом случае за счет упоминавшихся модификаций можно повисить сте-
пень сжатия еще на несколько процентов.
Вьівод. Одновременное применение рассмотренних способов предвари-
тельной обработки текстов позволяет улучшить сжатие на 5-8 % в случае
простой словарной схеми препроцессинга и на 12-15 % при использовании
громоздкого словаря.
Препроцессинг нетекстовьіх данньїх
Било замечено, что многие файли содержат данние, записанньїе не в самом
удобном виде для сжатия традиционньїми универсальними компрессорами.
И если изменить форму представлення зтих данньїх, то зффективность сжатия
файлов заметно увеличится. Многие компрессори уже оснащеньї препроцессо-
рами регулярних структур и исполнимьк файлов. Среди них можно отметить
7-2ір, АСЕ, САВАКС, ОС, ІМР, РРММ, 8ВС, ІІНАК.С, ¥В8.
Преобразование относительньіх адресов
Как известно, в системе команд процессоров Іпіеі адреса меток в ряде
случаев записиваются в виде смещения от адреса текущей команди до ад-
реса соответствующей метки. Так записиваются команди САЬЬ (код опе-
рации 0хЕ8), ІМР (код операции 0хЕ9). В результате, если ряд команд сси-
лаются на одну и ту же метку, каждий раз адрес зтой метки записшвается
по-разному.
262
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
• Главная идея преобразования заключается в замене относительньїх адре-
сов на абсолютньїе. Обьічно подпрограмма вьізьівается несколько раз из
разньїх участков программьі. Тогда несколько относительньїх адресов будут
преобразованм в один абсолютний адрес, вследствие чего количество раз-
личньїх строк в файле уменьшится, а степень сжатия возрастет. Причем не
обязательно получать истинньїе абсолютньїе адреса меток. Лишь бьі преоб-
разование бьіло обратимо.
Рассмотрим, например, преобразование адресов 32-разрядной команди
САЬЬ. Команда записивается в виде последовательности 5 байт:
| 0хЕ8 | Кр | К, | К2 І К-з ~|
Относительное смещение К вьічисляется по формуле
К = Ко + (Кі«8) + (К2«16) + (К3«24).
Зная смещение команди САЬЬ от начала файла и относительное смеще-
ние К, можно вичислить абсолютний адрес. При зтом следует учитивать,
что не все символи с кодом 0хЕ8 являютея началом команди САЬЬ. Чтобм
отличить настоящие команди, предлагаетея довольно простой способ, при-
мененнмй в архиваторе САВАКС [3].
Введем следующие обозначения:
С - величина смещения анализируемой команди от начала файла
(а именно смещение байта кода операции - 0хЕ8 или 0хЕ9);
N - размер файла;
К - смещение метки, на которую указмвает операнд команди, относи-
тельно самой команди САЬЬ;
А - абсолютний адрес метки.
Разделим все значення относительньїх смещений на 4 диапазона.
Первим делом определим диапазон значений смещений, которме имеет
смисл подвергать преобразованию. Минимальное значение зтого диапазона
соответствует ссмлке команди на начало файла, максимальнеє - на конец.
Смещения, принимающие значення меньше вмшеуказаннмх, нецелесо-
образно подвергать преобразованию, поскольку очевидно, что они не при-
надлежат командам. Зто второй диапазон.
Прежде чем определять остальние два диапазона, рассмотрим процесе пре-
образования относительньїх значений из первого диапазона в абсолютнме:
А = К+С.
В результате преобразования получим величину, которая может прини-
мать значення от нуля до N-1. Таким образом, в результате преобразования
мм отображаем значення из отрезка [-С,М-С) на значення отрезка [0,М).
263
Книга написана коллективом 1іНр:/Лууууу.сотрге88Іоп.ги/
Методь/ сжатия данньїх (7000+ *айлов 0 сжатии)
Для обеспечения возможности однозначного декодирования введем тре-
тий диапазон, [М-С.М), над которьім будем осуществлять компенсирующее
преобразование, т. е. [ЬІ-С,М) -> [~С,0).
Оставшиеся значення смещений поместим в четвертий диапазон. Зти
значення в результате преобразования будут оставаться неизменньїми.
Преобразование относительньїх адресов можно представить в виде
рис. 7.4. Преобразование относительньїх значений [~С,М~С) в абсолютньїе
значення [0,М) показано толстой сплошной стрелкой, компенсирующее пре-
образование - толстой пунктирной.
[-0x80000000,-С) [<N-0) [N-04) [М,0х7Ьерн,РР)
безизменений X безизменений
[-0x80000000,-С) [-С.0) [0Я РЧОх/РРЬРНР)
Рис. 7.4. Схема преобразования относительньїх значений в абсолютньїе
После преобразования заменим запись команди САЬЬ такой последова-
тельностью:
| 0хЕ8 | Ар | Аі І А2 і А3 і
где
Ар = А & ОхРР;
Аі = (А»8) & ОхРР;
А2 = (А» 16) & ОхРР;
А3 = (А»24) & ОхРР.
Функция преобразования виглядит следующим образом:
// іп - указатель на найденную команду
// ор - адрес в буфере, где записан операнд
// сиг_роз - номер позиции команди в файле
// £і1е_зіге - размер файла
ор = (Іопд *)&іп[1];
і£( *ор >= -сиг_роз
*ор < £і1е_зіге - сиг_роз ) {
*ор += сиг_роз;
) еізе і£( *ор > 0 &&
*ор < £ііе_зіге ) {
*ор -= Сіїезіге;
)
264
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Аналогичное преобразование вьіполняется и для команди безусловного
перехода, ДМР. Правда, замена относительньїх значений адресов для зтой
команди не так зффективна. В частности, из-за того, что, как правило, чис-
ло команд относительного перехода на один и тот же абсолютний адрес в
среднем меньше, чем количество визовов одной и той же подпрограмми.
А также из-за того, что относительние адреса обьічно принимают меньшие
значення, чем в случае с командой САЬЬ, т. е. могут бмть зффективно сжа-
тьі и без какого-либо преобразования. Позтому преобразование может даже
ухудшить сжатие. Решение о применении данного преобразования можно
принимать на основе оценки статистики его вмполнения. Критерием целе-
сообразности вмполнения преобразования может виступать следующее ус-
ловие: доля компенсирующих преобразований адресов незначительна и в
результате преобразования получается большое число совпадающих значе-
ний абсолютних адресов.
Сравним влияние описмваемого преобразования команд САЬЬ и ДМР на
сжатие данних компрессорами, представляющими различнме методи. В ка-
честве тестового файла бмл использован исполниммй модуль \усс386.ехе из
дистрибутива АУаісот С 10.0 (табл. 7.11).
Таблица 7.11
Архиватор Тип метода сжатия Размер архива, байт Замена операндов командьі САЬЬ Замена операндов команд САН и ЛМР
Размер архива, байт Улучше- ние сжа- тия, % Размер архива, байт Улучше- ние сжа- тия, %
Вгір2, вер 1.00 ВУ¥Т 308624 291492 5.55 292051 5.37
У/іпКАК, вер 2.70 Ь277 298959 281584 5.81 280995 6.01
НАа2, вер. 0.999с РРМ 296769 280316 5.54 279959 5.66
Следует отметить, что данное преобразование, хотя и является достаточ-
но простим и зффективнмм, может бить усовершенствовано для достаже-
ния более сильного сжатия. Например, можно заметать, что код операции
0хЕ8 соседствует с младшим байтом значення абсолютного адреса Ао, в то
время как более логичннм бмло бм расположить рядом более связаннме
друг с другом 0хЕ8 и А3. То єсть, можно записьівать значение абсолютного
адреса старшими байтами вперед. Другой способ повмшения зффективно-
сти заключается в предварительной составлении списка всех процедур, на
которьіе делаются ссьілки в программе, и указаний номеров процедур в спи-
ске вместо адресов.
265
Книга написана коллективом К((р:/Лу\у\у.сотрі'Є‘,‘,іоп.ги/
Методи сжатия данньїх(7000+ файлов о сжатии)
С&. Упражнение. Напишите процедуру обратного преобразования абсолютного
значення адреса в относительное.
Преобразование табличних структур
В файлах зачастую можно встретить регулярніше структури, такие, как,
например, различного рода служебнме таблици и т. п. Очевидно, такие
структури требуют особого внимания. Причем необязательно их виносить в
отдельннй файл и сжимать при помощи специализированного алгоритма.
Иногда достаточно преобразовать их в такой вид, которий будет приемлем
и для универсального архиватора.
Например, рассмотрим преобразование таблиц, представляющих собой
упорядоченнмй по возрастанию список 32-разрядннх значений. Чем нам
могут помешать зти структури в первоначальном виде? Статистические ха-
рактеристики таких табличних последовательностей обнчно сильно отли-
чаются от характеристик файла в целом. Например, в таблицах рядом нахо-
дятея байти, имеющие разний вес в составе 32-разрядних значений и ста-
тистически слабо связаннне между собой. Таким образом, зти таблицьі не
только сами хранятея в неудобном для сжатия виде, но и ухудшают сжатие
окружающих их данних за счет искажения вероятностнмх характеристик.
Первая задача, которая встает перед нами, - распознать такие таблици
среди остальних даннмх. Учтем, что таблици могут бить произвольного
размера и располагаться в любом месте файла. Будем рассматривать какую-
то область данних как таблицу при вьшолнении следующих условий:
Если нам в файле встретились подряд три 32-разрядних числа, идущие в
неубмвающем порядке, будем считать зто началом таблици. Например
(1-й байт самий младший):
0x05 0x00 0x80 ОхЗГ
0x05 0x00 0x80 ОхЗГ
0x35 0x00 0x80 ОхЗГ
Если зти числа могут бить закодированм при помощи КЬЕ, отказмваем-
ся от применения преобразования таблиц.
Концом таблици будем считать число, которое превмшает предидущее
более чем на 2* - 2 или меньше предидущего.
Вьіполним преобразование таких таблиц следующим образом:
Первме 3 числа таблици записмваем в неизменном виде.
Для записи остальних чисел нам требуетея только величина, на которую
каждое число отличаетея от предидущего. Для записи зтой разницм дос-
таточно 1 байта.
В качестве признака конца таблици записмваем дополнительно символ
с кодом 28 - 1 = ОхГЕ.
266
К((р:/Лу\у\у.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методи сжатия без потерь
В качестве тестового файла возьмем тот же исполнимьій модуль
\усс386.ехе из дистрибутива ЗУаісот С 10.0.
Таблица 7.12
Архиватор Тип метода сжатия Размер архива, байт Преобразование 32-разрядньіх таблиц
Размер архива, байт Улучшение сжатия, %
Вгір2, вер 1.00 В\¥Т 308624 306791 0.59
УУіпКАК, вер 2.70 Ь277 298959 298342 0.21
НА а2, вер. 0.999с РРМ 296769 295240 0.52
Можно заметать, что для архиватора, использующего Ь277, вмигрьіш в
сжатии оказался существенно меньше, чем для других методов. Зто обьяс-
няется особенностью алгоритма кодирования указателей, используемого в
5¥іпКАК, позволяющего зффективно обрабатьівать такого рода структури.
Описанньїй алгоритм не является самим зффективньїм с точки зрения
сжатия, но позволяет оценить полезнме свойства такого рода преобразова-
ний. Способов улучшения довольно много. Например, большие таблици
следует кодировать отдельно от всего файла. Кроме того, помимо 32-
разрядних таблиц, в файле могут присутствовать и, например, 16-
разрядние; в таблицях могут находиться как возрастающие, так и убьіваю-
щие последовательности чисел и т. п. И надо сказать, зачастую суммарний
зффект от применения такого рода преобразований оказивается довольно
ощутимим.
Упражнение. Придумайте способ преобразования для 16-разрядньіх таблиц.
Вопросьі для самоконтроля1
1. Почему невнгодно включение длинних фраз в словарь л-графов?
2. Каковьі недостатки и преимущества динамического составления словаря
п-графов?
3. Обьясните, почему использование при словарной замене фраз, содержа-
щих пробели, приводит к уменьшению зффективности предварительной
обработки в случае алгоритмов класса РРМ и В\УТ.
4. Почему при организации ЬІРТ для записи индекса фраз удобно исполь-
зовать только те символьї, которие входят в словарь букв?
; Ответьі на вопросьі, виполненньїе упражнения и исходние тексти программ
ви можете найти на ІіІір://сотрге55Іоп.%гаркісоп.ги/.
267
Книга написана коллективом 1Шр:/Лууууу.сотрге88Іоп.ги/
(7000+ файлов о сжатии)
Матодьі сжатия данньїх
5. В каких случаях при специальном кодировании символов конца строки
вмгоднее указьівать длину строки не через количество символов, а через
количество пробелов?
6. Почему при преобразовании относительного адреса подпрограмм, визн-
ваемьіх командой САЬЬ, обмчно вмгодно записмвать значение абсо-
лютного адреса старшими байтами вперед?
7. Почему преобразование относительнмх адресов для команди ЛІМР, как
правило, менее зффективно, чем для САЬЬ?
ЛИТЕРАТУРА
1. А\уап Р., Моі§і N. 2Ь. N.. ІдЬаІ К.., МикЬедее А. ЬІРТ: А КєуєгзіЬіє Ьозз-
ІЄ88 Техі ТгапзРогт іо Ітргоуе Сотргеззіоп РегГогтапсе // Ргосеесііп£8 оГ
Паіа Сотргеззіоп СопГегепсе, ЗпохуЬігй, ІЙаЬ, МагсЬ 2001.
2. бгаЬохузкі 8х. Техі ргергосеззіп^ ГогВиггохуз-ХУЬееІег Ьіоск зогііпз сот-
ргеззіоп // УІІКопіегепда "Зіесі і Зузіету ІпГогтаіусхпе" (7іЬСоп£егепсе
"Ме1\уогкз апй ІТ Зузіетз"). Ьобг. Осі. 1999. Соп£. ргос. Р. 229 - 239.
Ьйр:/Лу\у>у.(іо£та.пеі/ОаіаСотрге88Іоп /АгсЬіуеРогтаіз/В5¥Т _рарег.гї£
3. МісгозоЙ Согрогагіоп. МісгозоЙ Ь2Х Паіа Сотргеззіоп Рогтаі. 1997.
4. ТеаЬап М.І Мос1е11іп§ ЕпдІізЬ Техіз Н РЬЛ йіезіз, Перагйпепі о£ Сотриіег
Зсіепсе. ТЬе Ппіуегзііу оГХУаікаіо. Натікоп, №їу 2еа1апб. Мау 1998.
Вьібор метода сжатия
В заключение разд. скажем несколько слов о процедуро вьібора метода
сжатия.
Вьібор метода - зто первая задача, которую должен решить разработчик
программнмх средств сжатия данньїх. Вмбор зависит от типа данньїх, кото-
рме предстоит обрабатмвать, аппаратньїх ресурсов, требований к степени
сжатия и ограничений на время работьі программьі. Дадим ряд рекоменда-
ций, предполагая, что необходимо сжимать качественньїе данньїе, между
злементами которьіх имеются сильньїе и достаточно протяженньїе стати-
стические связи, т. е. даннме порожденм источником с памятью.
Прежде всего, следует учитивать, что каждьій из рассмотреннмх в раз-
деле универсальнмх методов сжатия данньїх источников с памятью допус-
кает модификации, позволяющие существенно изменить параметри ком-
прессора. Так, увеличение порядка модели РРМ приводит к заметному уси-
лению сжатия ценой замедления работьі и увеличения расхода памяти.
К аналогичному результату приводит увеличение размера словаря Ь277-ме-
тодов, но при зтом время разжатия остается практически неизменним.
Свойства компрессоров на основе В\УТ варьируются в меньшей степени.
268
1Шр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методи сжатия без потерь
Ограничения на время работьі программи возникают в зависимости от
условий, в которих предстоит работать архиватору. Например, при сжатии
даннмх для формирования дистрибутива программного обеспечения огра-
ничение на время компрессии практически отсутствует, в то время как тре-
буетея максимально уменьшить время восстановления исходнмх даннмх.
При резервном сохранении данньїх положение вещей обратно, поскольку
ситуация, когда требуетея вмполнить разжатие, довольно редка. Необходи-
мость оперативной передачи данних по сети обусловливает одинаковьіе
требования к временам сжатия и разжатия; если данньїе передаютея не-
скольким абонентам, некоторое преимущество имеют архиваторм, обла-
даюіцие более бистрим алгоритмом разжатия.
Методи семейства 1277 обладают наибольшей скоростью декомпрес-
сии. Превмшение над скоростью сжатия при использовании метода Хафф-
мана для кодирования результатов работм Ь277-метода - десятикратнеє.
Меньшая разница у методов на основе В\УТ - в среднем скорость разжатия
в 2-4 раза вьіше скорости сжатия. Декодирование при использовании РРМ
на 5-10% медленнее кодирования. Компрессорм на базе частинних сорти-
рующих преобразований малого порядка характеризуютея еще большим от-
ставанием разжатия - на некотормх файлах оно в несколько раз медленнее
сжатия.
Похожая картина наблюдаетея, если сравнивать использование памяти
при декодировании. В случае применения 1277 расходм памяти минималь-
ньі. Архиваторм на основе РРМ наиболее требовательнм - им необходимо
столько же памяти, сколько и при кодировании. Следует отметить, что при
сжатии требования к памяти у программ-представителей разнмх методов
примерно близки, хотя и могут изменяться для разнмх типов ежимаеммх
данньїх.
Таким образом, если можно пренебречь степенью сжатия, методи се-
мейства Ь277 наиболее зффективнм для создания дистрибугивов, а методи
на основе частинних сортирующих преобразований - для резервного копи-
рования.
Типичнме данньїе качественного характера можно условно разделить на
4 типа:
1) однороднме данние (например, типичнме тексти);
2) однороднме данние с большой избьіточностью в виде длинньїх по-
вторяющихся строк (например, набор исходнмх текстов);
3) неоднороднме данньїе, в которих имеетея вмраженная нестабиль-
ность контекстно-зависимой статистики (например, исполнимме
файли);
269
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.пі/
Методи сжатия данних <7000+ файлов о сжатии)
4) данньїе с малой избиточностью (например, файли, содержащие уже
сжатьіе блоки).
Рассмотрим, как ведут себя различньїе методи при сжатии данньїх раз-
ньїх типов. При анализе будем ориентироваться на наилучших представите-
лей методов.
Для сжатия таких однородних данних, как тексти на естественних язи-
ках, наиболее подходящими являются РРМ-методи и методи на основе
В\УТ. Первие позволяют достичь большей степени сжатия, вторие облада-
ют большей скоростью декодирования. Программи, использующие методи
семейства Ь277, сжимают указанньїе данньїе заметно хуже и, при увеличе-
нии длиньї словаря, существенно медленнее.
Если в однородних данних єсть длиннне повторяющиеся строки, у про-
грамм на основе Ь277 єсть шанс себя реабилитировать. Впрочем, в зтом
случае наиболее вигодньїм будет использовать гибрид Ь277 и любого из
двух его конкурентов или применять Ь277-препроцессинг.
При сжатии неоднородних данньїх пальма первенства принадлежит се-
мейству методов Ь277, которие при сохранении своих високих скоростньїх
качеств настигают по степени сжатия заметно более медленньїх лучших
представителей РРМ-компрессоров. Если не использовать фрагментирова-
ние, ВАУТ-компрессори показивают не очень високую степень сжатия не-
однородних данних.
На данних с малой избиточностью все методи виступают не лучшим
образом. Некоторое преимущество в степени сжатия имеют архиватори на
основе Ь277 и РРМ. Но последние при зтом требуют значительного расхода
памяти и скорость их работи заметно падает.
В заключение приведем таблицу, в которой описани свойства методов
при сжатии качественних данньїх различних типов.
Параметр Метод Однородньїе данньїе (типичньїй текст) Однородньїе дан- ньїе с большой из- бьіточностью (ис- ходньїе текстьі про- грамм) Неодно- родньїе данньїе Дан- ньїе с малой избьі- точно- стью
Степень сжатия РРМ Високая Високая Високая Неви- сокая
ВУ/Т Близкая к РРМ Близкая к РРМ Без фраг- ментиро- вания - худшая
Ь277 Заметно худ- шая При большом ко- личестве ДЛИННЬІХ повторов довольно високая Близкая к РРМ н
270
Шір:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 1. Методьі сжатия без потерь
Параметр Метод Однородньїе данньїе (ти- пичньїй текст) Однородньїе дан- ньїе с большой из- бьіточностью (ис- ходньїе тексти про- грами) Неодно- родньїе данньїе Дан- ньіе с малой избьі- точно- стью.
Скорость кодиро- вания В\¥Т Високая Средняя Високая Висо- кая
РРМ При большом порядке мо- дели - самая низкая; при небольшом - немного би- стреє В АУТ Если не использо- . вать сложное мо- делирование - ви- сокая Средняя Низкая
Ь277 Средняя, а при малом словаре - са- мая високая Средняя, при ма- лом словаре - ви- сокая Високая Висо- кая
Скорость декодиро- вания Ь277 Примерно в 10 раз вьіше скорости кодирования; разница еще больше на избиточиьіх даннмх
РРМ Обьічно на 5-10% медленнее кодирования
В АУТ В 2-4 раза више скорости кодирования
Требуе- МЬІЙ обь- ем памяти при сжа- тии В АУТ Постоянньїй при сжатии данньїх любого типа
РРМ Варьируется в широких пределах, в зависимости от слож- ности моделирования и порядка модели; вьірастаег для очень неоднородньїх данних; в зависимости от структуру хранения контекстной информации может увеличиваться для малоизбьіточньїх даннмх
Ь277 Пропорционален размеру словаря
Тре- буемьій обьем памяти при разжатии Ь277 Минимальньїй
РРМ Максимальний; если процесе моделирования симметри- чен, то примерно равен расходу памяти при сжатии
ВАУТ Средний
271
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.ги/
|-| 2 (7000+файлов о сжатии)
АЛГОРИТМИ СЖАТИЯ ИЗОБРАЖЕНИЙ
Введение
Алгоритми сжатия изображений - бурно развивающаяся область ма-
шинной графики. Основной обьект приложения усилий в ней - зображе-
ння - своеобразньїй тип данньїх, характеризуемьій тремя особенн остями.
1. Изображение (как и видео) обьічно требует для хранения гораздо боль-
иіего обьема памяти, чем текст. Так, скромная не очень качественная
иллюстрация на обложке книги размером 500x800 точек занимает
1,2 Мб- столько же, сколько художественная книга из 400 страниц
(60 знаков в строке, 42 строки на странице). В качестве примера можно
рассмотреть также, сколько тисяч страниц текста ми сможем поместить
на СВ-К.ОМ и как мало там поместится несжатих фотографий високого
качества. Зта особенность изображений определяет актуальность ал-
горитмов архивации графики.
2. Второй особенностью изображений является то, что человеческое зрение
при анализе изображения оперирует контурами, общим переходом цве-
тов и сравнительно нечувствительно к малим изменениям в зображе-
ний. Таким образом, мм можем создать зффективние алгоритми архи-
вации изображений, в которьіх декомпрессированное изображение не
будет совпадать с оригиналом, однако человек зтого не заметит. Данная
особенность человеческого зрения позволила создать специальньїе
алгоритми сжатия, ориентированньїе только на изображения. Зти
алгоритми позволяют сжимать изображения с вмсокой степенью сжатия
и незначительннми с точки зрения человека потерями.
3. Ми можем легко заметать, что изображение в отличие, например, от
текста обладает избиточностью в двух измерениях. То єсть как правило,
соседние точки, как по горизонтали, так и по вертикали, в изображении
близки по цвету. Кроме того, ми можем использовать подобие между
цветовими плоскостями В., О'Чі В в наших алгоритмах, что дает возмож-
ность создать еще более зффективние алгоритми. Таким образом, при
создании алгоритма компрессии графики мьі используем особенно-
сти структури изображения.
Всего на данньїй момент известно минимум 3 семейства алгоритмов, ко-
торьіе разработаньї исключительно для сжатия изображений, и применяе-
мме в них методьі практически невозможно применить к архивации еще к а-
ких-либо видов данньїх.
ДИ4ЛО7ПИ0И 272
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритми сжатия изображений
Для того чтобьі говорить об алгоритмах сжатия изображений, мьі долж-
ньі ответить на несколько важньїх вопросов:
1. Какие критерии мьі можем предложить для сравнения различньїх
алгоритмов?
2. Какие классьі изображений существуют?
3. Какие классьі привожений, использующих алгоритми компрессии гра-
фики, существуют и какие требования они предьявляют к алгоритмам?
Рассмотрим зти вопросьі подробнее.
Классьі изображений
Статические растровьіе изображения представляют собой двумерньїй
массив чисел. Злементьі зтого массива назмвают пикселами (от английского
ріхеї - рісіиге еіешепі). Все изображения можно подразделить на две груп-
пьі - с палитрой и без нее. У изображений с палитрой в пикселе хранится
число - индекс в некотором одномерном векторе цветов, назьіваемом па-
литрой. Чаще всего встречаются палитрн из 16 и 256 цветов.
Изображения без палитрьі бьівают в какой-либо системе цветопредстав-
ления и в градациях серого (§гаузса1е). Для последних значение каждого
пиксела интерпретируется как яркость соответствующей точки. Чаще всего
встречаются изображения с 2, 16 и 256 уровнями серого. Одна из интерес-
ньіх практических задач заключается в приведений цветного или черно-
белого изображения к двум градациям яркости, например для печате на ла-
зерном принтере. При использовании некой системи цветопредставления
каждьш пиксел представляет собой запись (структуру), полями которой яв-
ляются компоненти цвета. Самой распространенной является система К6В,
в которой цвет передаетея значеннями интенсивности красной (К), зеленой
(О) и синей (В) компонент. Существуют и другеє системи цветопредстав-
ления, такие, как СМ¥К, СІЕ Х¥2ссіг60-1, ¥У11, ¥СіСЬ и т. п. Ниже мьі
увидим, как они используются при сжатии изображений с потерями.
Для того чтоби корректнее оценивать степень сжатия, нужно ввести по-
нятие класса изображений. Под классом будет пониматься совокупность
изображений, применение к которнм алгоритма архивации дает качествен-
но одинаковьіе результати. Например, для одного класса алгоритм дает
очень високую степень сжатия, для другого - почти не ежимает, для третьо-
го - увеличивает файл в размере. (Например, все алгоритми сжатия без по-
терь в худшем случае увеличивают файл.)
Дадим неформальнеє определение наиболее распространенннх классов
изображений.
273
Книга написана коллективом Шір:/Лууууу.сошрге88Іоп.ги/
Методи сжатия данних (7000+ файлов о сжатии)
Класе 1. Изображения с небольшим количеством цветов (4-16) и боль-
шими областями, заполненньїми одним цветом. Плавньїс переходь! цветов от-
сутствуют. Примерьі: деловая графика - диаграммьі, графики и т. п.
Класе 2. Изображения с плавними переходами цветов, построенньїе
на компьютере. Примерьг. графика презентаций, зскизние модели в САПР,
изображения, построенньїе по методу Гуро.
Класе 3. Фотореалистичньїе изображения. Пример: отсканированньїе
фотографии.
Класе 4. Фотореалистичньїе изображения с наложением деловой гра-
фики. Пример: реклама.
Развивая данную классификацию, в качестве отдельньїх классов могут
бьггь предложени некачественно отсканированньїе в 256 градаций серого
цвета страницьі книг или растровьіе изображения топографических карт.
(Заметим, что зтот класе не тождественен классу4). Формально являясь
8- или 24-битовьіми, они несут не растровую, а чисто векторную информа-
цию. Отдельньїе классьі могут образовивать и совсем специфичние изо-
бражения: рентгеновские снимки или фотографии в профиль и фас из злек-
тронного досьє.
Достаточно сложной и интересной задачей является поиск наилучшего
алгоритма для конкретного класса изображений.
Итог. Нет еммела говорить о том, что какой-то алгоритм сжатия лучше
другого, если мьі не обозначили классьі изображений, на которьіх сравни-
ваютея наши алгоритми.
Классьі приложений
Примерьі привожений, использующих алгоритми компрессии
ГРАФИКИ
Рассмотрим следующую простую классификацию приложений, исполь-
зующих алгоритми компрессии:
Класе 1. Характеризуйтеся високими требованиями ко времени ар-
хивации и разархивации. Нередко требустся просмотр уменьшенной ко-
пни изображения и поиск в базе данних изображений. Примерьі: издатель-
ские системи в широком смисле зтого слова, причем как готовящие качест-
веннме публикации (журнали) с заведомо високим качеством изображений
и использованием алгоритмов архивации без потерь, так и готовящие газе-
ти, и \¥Х¥А¥-сервери, где єсть возможность оперировать изображениями
меньшего качества и использовать алгоритми сжатия с потерями. В подоб-
них системах приходитея иметь дело с полноцветньїми изображениями са-
мого разного размера (от 640x480- формат цифрового фотоаппарата, до
274
Шір:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритми сжатия изображений
3000x2000) и с большими двуцветньїми зображеннями. Поскольку иллю-
страции занимают львиную долю от общего обьема материала в документе,
проблема хранения стоит очень остро. Проблеми также создает большая
разнородность иллюстраций (приходится использовать универсальние ал-
горитми). Единственное, что можно сказать заранее, - зто то, что будут
преобладать фотореалистичние изображения и деловая графика.
Класе 2. Характеризуется високими требованиями к степени архи-
вации и времени разархивации. Время архивации роли не играет. Ино-
гда подобнме приложения также требуют от алгоритма компрессии легко-
сти масштабирования изображения под конкретнеє разрешение монитора у
пользователя. Пример: справочники и знциклопедии на СО-КОМ. С появ-
лением большого количества компьютеров, оснащенних зтим приводом
(в США уровень в 50% машин достигнут еще в 1995 г.), достаточно бистро
сформировался ринок програми, вьіпускаемих на лазерних дисках. Не-
смотря на то что емкость одного диска довольно велика (примерно 650 Мб),
ее, как правило, не хватает. При создании знциклопедии и игр ббльшую
часть диска занимают статические изображения и видео. Таким образом,
для зтого класса приложений актуальность приобретают существенно
асимметричнме по времени алгоритми (симметричность по времени - от-
ношение времени компрессии ко времени декомпрессии).
Класе 3. Характеризуется очень високими требованиями к степени
архивации. Приложение клиента получает от сервера информацию по сети.
Пример: новая бистро развивающаяся система "Всемирная информацион-
ная паутина" - В зтой гипертекстовой системе достаточно активно
используются иллюстрации. При оформлений информационних или рек-
ламних страниц хочетея еделать их более яркими и красочними, что, есте-
ственно, сказивается на размере изображений. Больше всего при зтом стра-
дают пользователи, подключенние к сети с помощью медленних каналов
связи. Если страница перенасищена графикой, то ожидание ее пол-
ного появлення на зкране может затянуться. Поскольку при зтом нагрузка
на процессор мала, то здесь могут найти применение зффективно ежимаю-
щие сложние алгоритми со сравнительно большим временем разархивации.
Кроме того, ми можем видоизменить алгоритм и формат данньїх так, чтобн
просматривать огрубленное изображение файла до его полного получения.
Можно привести множество более узких классов приложений. Так, своє
применение машинная графика находит и в различних информационних
системах. Например, уже становится привичним исследовать ультразвуко-
вие и рентгеновские снимки не на бумаге, а на зкране монитора. Постепен-
но в злектронний вид переводят и истории болезней. Понятно, что хранить
зти материали логичнее в единой картотеке. При зтом без использования
275
Книга написана коллективом 1Шр:/Лууууу.сотрге88Іоп.ги/
Матобьі сжатия данньїх(7000+ файлов о сжатии)
специальних алгоритмов ббльшую часть архивов займут фотографии. По-
зтому при создании зффективньїх алгоритмов решения зтой задачи нужно
учесть специфику рентгеновских снимков - преобладание размьітьіх уча-
стков.
В геоинформационньїх системах - при хранении азрофотоснимков мест-
ности - спсцифическими проблемами являются большой размер изображе-
ния и необходимость вьіборки лишь части изображения по требованию.
Кроме того, может потребоваться масштабирование. Зто неизбежно накла-
дивает свои ограничения на алгоритм компрессии.
В злектронних картотеках и досьє различньїх служб для изображений
характерно подобие между фотографиями в профиль и подобие между фо-
тографиями в фас, которое также необходимо учитивать при создании ал-
горитма архивации. Подобие между фотографиями наблюдается и в лю-
бьіх других специализированних справочниках. В качестве примера можно
привести знциклопедии птиц или цветов.
Итог. Нет смисла говорить о том, что какой-то конкретний алгоритм
компрессии лучше другого, если ми не обозначили класе приложений, от-
носительно которого мьі зти алгоритми собираемся сравнивать.
ТРЕБОВАНИЯ ПРИЛОЖЕНИЙ К АЛГОРИТМАМ КОМПРЕССИИ
В предидущем подразделе ми определили, какие приложения являются
потребителями алгоритмов архивации изображений. Однако заметам, что
приложение определяет характер использования изображений (либо большое
количество изображений хранитея и используется, либо изображения скачи-
ваютея по сети, либо изображения велики по размерам и нам необходима
возможность получения лишь части...). Характер использования изображений
задает степень важносте нижеследующих протеворечивьіх требований к ал-
горитму.
Високая степень компрессии. Заметем, что далеко не для всех прило-
жений актуальна високая степень компрессии. Кроме того, некоторьіе алго-
ритми дают лучшее соотношение качества к размеру файла при високих
степенях компрессии, однако проигривают другим алгоритмам при низких
степенях.
Вьісокое качество изображений. Виполнение зтого требования напря-
мую противоречит виполнению предидущего.
Високая скорость компрессии. Зто требование для некоторих алго-
ритмов с потерей информации является взаимоисключающим с первими
двумя. Интуитивно понятно, что чем больше времени мьі будем анализиро-
вать изображение, питаясь получить наивьісшую степень компрессии, тем
лучше будет результат. И соответственно, чем меньше мьі времени потра-
276
КНрі/Луууху.сотргекіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритми сжатия изображений
тим на компрессию (анализ), тем ниже будет качество изображения и боль-
ше его размер.
Високая скорость декомпрессии. Достаточно универсальное требова-
ние, актуальнеє для многих приложений. Однако можно привести примерьі
приложений, где время декомпрессии далеко не критично.
Маспггабирование изображений. Данное требование подразумевает
легкость изменения размеров изображения до размеров окна активного при-
ложения. Дело в том, что одни алгоритми позволяют легко масштабировать
изображение прямо во время декомпрессии, в то время как другие не только
не позволяют легко масштабировать, но и увеличивают вероятность появ-
лення неприятннх артефактов после применения стандартних алгоритмов
масштабирования к декомпрессированному изображению. Например, мож-
но привести пример "плохого" изображения для алгоритма ІРЕО - зто изо-
бражение с достаточно мелким регулярним рисунком (пиджак в мелкую
клетку). Характер вносимнх алгоритмом 5РЕ6 искажений таков, что
уменьшение или увеличение изображения может дать неприятние зффекти.
Возможность показать огрубленное изображение (ннзкого разреше-
ния), использовав только начало файла. Данная возможность актуальна для
различного рода сетевих приложений, где перекачивание изображений мо-
жет занять достаточно большое время и желательно, получив начало файла,
корректно показать ргеуіеху. Заметим, что примитивная реализация указан-
ного требования путем записивания в начало изображения его уменьшен-
ной копии заметно ухудшит степень компрессии.
Устойчивость к ошибкам. Данное требование означает локальность
нарушений в изображении при порче или потере фрагмента передаваемого
файла. Данная возможность используется при широковещании (Ьгоадсазііпз
- передача по многим адресам) изображений по сети, т. е. в тех случаях, ко-
гда невозможно использовать протокол передачи, повторно запрашиваю-
щий данньїе у сервера при ошибках. Например, если передаетея видеоряд,
то бьіло бьі неправильно использовать алгоритм, у которого сбой приводил
бьі к прекращению правильного показа всех последующих кадров. Данное
требование противоречит вмеокой степени архивации, поскольку интуитив-
но понятно, что мьі должньї вводить в поток избьіточную информацию. Од-
нако для разнмх алгоритмов обьем зтой избмточной информации может
существенно отличаться.
Учет специфики изображения. Более високая степень сжатия для клас-
са изображений, которьіе статистически чаще будут применяться в нашем
приложении. В предидущих подразделах зто требование уже обсуждалось.
Редактируемость. Под редактируемостью понимаетея минимальная
степень ухудшения качества изображения при его повторном сохранении
277
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.ги/
Мятодьі сжатия данньїх (7000+ Файлов о сжатии)
после редактирования. Многие алгоритми с лотерей информации могут су-
щественно испортить изображение за несколько итераций редактирования.
Небольшая стоимость аппаратной реализации. Зффективность про-
граммной реализации. Данние требования к алгоритму реально предьяв-
ляют не только производители игровьіх приставок, но и производители мно-
гих информационних систем. Так, декомпрессор фрактального алгоритма
очень зффективно и коротко реализуется с использованием технологии
ММХ и распараллеливания вичислений, а сжатие по стандарту СС1ТТ
Сгоир 3 легко реализуется аппаратно.
Очевидно, что для конкретной задачи нам будут очень важнм одни тре-
бования и менее важньї (и даже абсолютно безразличнм) другие.
Итог. На практике для каждой задачи ми можем сформулировать на-
бор приоритетов из требований, изложенних више, которнй и опреде-
лит наиболее подходящий в наших условиях алгоритм (либо набор
алгоритмов) для ее решения.
..- -......................—- —- -.............— ----
Критерии сравнения алгоритмов
Заметим, что характеристики алгоритма относительно некоторьіх требо-
ваний приложений, сформулированние више, зависят от конкретних усло-
вий, в которие будет поставлен алгоритм. Так, степень компрессии зависит
от того, на каком классе изображений алгоритм тестируется. Аналогично
скорость компрессии нередко зависит от того, на какой платформе реализо-
ван алгоритм. Преимущество одному алгоритму перед другим может дать,
например, возможность использования в вьічислениях алгоритма техноло-
гий нижнего уровня, типа ММХ, а зто возможно далеко не для всех алго-
ритмов. Так, ІРЕО существенно внигривает от применения технологии
ММХ, а нет. Кроме того, нам придется учитнвать, что некоторне ал-
горитми распараллеливаются легко, а некоторне нет.
Таким образом, невозможно составить универсальное сравнительное
описание известньїх алгоритмов. Зто можно сделать только для типових
классов приложений при условии использования типових алгоритмов на
типових платформах. Однако такие данньїе необнчайно бистро устаревают.
Так, например, еще в 1994 г., интерес к показу огрубленного изобра-
жения, используя только начало файла (требование 6), бил чисто абстракт-
ним. Реально зта возможность практически нигде не требовалась, и класе
приложений, использующих данную технологию, бил крайнє невелик.
Со взрьівннм распространением Интернета, которьій характеризуется пере-
дачей изображений по сравнительно медленннм каналам связи, использо-
278
КНрі/Луууху.сотргекіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритми сжатия изображений
вание Іпіегіасесі ОІР (алгоритм Ь2\У) и Рго^гєзмує ЗРЕ6 (вариант алгоритма
5РЕО), реализующих зту возможность, резко возросло. То, что новьій алго-
ритм (например, хуауеіеі) поддерживает такую возможность, существен-
нейший плюс для него сегодня.
В то же время мьі можем рассмотреть такое редкое на сегодня требова-
ние, как устойчивость к ошибкам. Можно предположить, что в скором
времени (через 5-10 лет) с распространением широковещания в сети Ин-
тернет для его обеспечения будут использоваться именно алгоритми, ус-
тойчивьіе к ошибкам, даже не рассматриваемьіе в сегодняшних статьях и
обзорах.
Со всеми сделанньїми вьіше оговорками, вьіделим несколько наиболее
важньїх для нас критериев сравнения алгоритмов компрессии, которме и
будем использовать в дальнейшем. Как легко заметить, мьі будем обсуждать
меньше критериев, чем бьіло сформульовано вьіше. Зто позволит избежать
лишних деталей при кратком изложении данного материала.
Худшая, средняя и лучшая степень сжатия. То єсть доля, на которую
возрастет изображение, если исходньїе данньїе будут наихудшими; некая
среднестатистическая степень для того класса изображений, на которьій
ориентирован алгоритм-, и, наконец, лучшая степень. Последняя необходи-
ма лишь теоретически, поскольку показьівает степень сжатия наилучшего
(как правило, абсолютно черного) изображения, иногда фиксированного
размера.
Класе изображений, на которьій ориентирован алгоритм. Иногда указа-
но также, почему на других классах изображений получаютея худшие ре-
зультати.
Симметричность. Отношение характеристики алгоритма кодирования к
аналогичной характеристико при декодировании. Характеризує! ресурсоем-
кость процессов кодирования и декодирования. Для нас наиболее важной явля-
ется симметричность по времени: отношение времени кодирования ко времени
декодирования. Иногда нам потребуетея симметричность по памяти.
Есть ли потери качества? И если єсть, то за счет чего изменяетея сте-
пень сжатия? Дело в том, что у большинства алгоритмов сжатия с лотерей
информации существует возможность изменения степени сжатия.
Характерніше особенности алгоритма и изображений, к которьім его
применяют. Здесь могут указьіваться наиболее важньїе для алгоритма свой-
ства, которме могут стать определяющими при его виборе.
Используя данньїе критерии, приступим к рассмотрению алгоритмов ар-
хивации изображений.
279
Книга написана коллективом Шір:/Лууууу.сошрге88Іоп.пі/
Методьі сжатия даннім(7000+ файлов о сжатии)
Прежде чем непосредственно начать разговор об алгоритмах, хотелось
бьі сделать оговорку. Один и тот же алгоритм часто можно реализовать раз-
ньіми способами. Многие известньїе алгоритми, такие, как КЬЕ, или
ІРЕО, имеют десятки различающихся реализации. Кроме того, у алгоритмов
бмвает несколько явних параметров, варьируя которие можно изменять ха-
рактеристики процессов архивации и разархивации. (См. примерьі в подраз-
деле о форматах). При конкретной реализации зти параметри фиксируются,
исходя из наиболее вероятньїх характеристик входньїх изображений,
требований на зкономию памяти, требований на время архивации и т. д.
Позтому у алгоритмов одного семейства лучшая и худшая степени сжатия
могут отличаться, но качественно картина не изменится.
Методьі обхода плоскости
Задача обхода плоскости возникает при обработке двумерньїх данних.
Цель: создание одномерного массива £> из двумерного массива 5. Причем
если предполагается последующее сжатие £>, то желательно создавать его
так, чтобм "разривов" било как можно меньше: каждий следующий зле-
мент £>,, заносимьій в О на і-м шаге, является соседним (в плоскости) для
предьідущего, занесенного в О на (М)-м шаге,
ЗМЕЙКА (ЗИГЗАГ-СКАНИРОВАНИЕ)
Обход массива 5 начинается с одного утла плоскости, заканчивается в
противоположном по диагонали. Например, из левого верхнего в правий
нижний:
1 2 6 7 15 16
3 5 8 14 17 24
4 9 13 18 23 25
10 12 19 22 26 29
11 20 21 27 28 зо
На иллюстрации показан порядок вмборки злементов из плоскости
(с последующим занесением в одномернмй массив). Значение из ячейки
массива 8, помеченной на рисунке номером і, заносится в £)[/].
Змейка вигодна в случаях, когда в одном из углов "особенность", на-
пример сосредоточенм самьіе крупние козффициентм. Применяется в алго-
ритме ЗРЕ6 для обхода квадрантов (размером 8x8 точек).
280
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритми/ сжатия изображений
Обход строками
Самий тривиальннй метод. Именно он используется в самих распро-
страненних графических форматах (ВМР, ТСА, КА8...) для хранения зле-
ментов изображений.
1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28 29 зо
В варианте строк с разворотами для каждой второй строки делаем вм-
борку в обратном направлений:
1 2 3 4 5 6
12 11 10 9 8 7
13 14 15 16 17 18
24 23 22 21 20 19
25 26 27 28 29 зо
Точек "разрива" нет, в отличие от варианта без разворотов.
Совершенно аналогично можно делать обход столбцами.
Упражнение. Нарисуйте пример обхода плоскости столбцами с разворотами.
Обход полосами
Чаще всего сжатие лучше, если каждая область двумерного массива 5 не
рассредоточена (равномерно "размазана") по всему одномерному О, а скон-
центрирована в О компактно. В случае обхода строками понятие "области"
отсутствует: каждий злемент считается "областью". Питавсь обходить
плоскость квадратами размером КхМ, приходим к идее обхода горизонталь-
ними "полосами" шириной 14:
1 4 7 10 13
2 5 8 11 14
3 6 9 12 15
16 19 22 25 28
17 20 23 26 29
18 21 24 27 зо
В данном примере ширина полоси N=3. Если N=1, получаем обход
строками.
281
Книга написана коллективом йіір:/Лууууу.сотрге88Іоп.ги/
Методьі сжатия даннь.х (7000+ файлов о сжатии)
Полосами с разворотами
То же самое, но с разворотами и столбцов внутри полос, и направлений
самих полос:
1 6 7 12 13
2 5 8 11 14
3 4 9 10 15
28 27 22 21 16
29 26 23 20 17
ЗО 25 24 19 18
Разрьівов опять нет, но теперь еще и каждая точка принадлежит к облас-
ти, записанной в Р компактно, без разрьівов: ее злементьі расположеньї
внутри одного интервала (£>[/], Р[/+1], ..., О[Ну]) и злементов из других об-
ластей внутри зтого интервала нет. Примерьі таких областей - каждьій из
четмрех углов размером 3x3 злемента.
Упражнение. Нарисуйте схему обхода квадрата 7x7 полосами шириной 3 с
разворотами. Какой вариант лучше: 3+3+1 или 3+2+2? Какие обпасти заносят-
ся в О компактно?
ОБХОД РЕШЕТКАМИ
Для первой порции берем злементьі из каждого N<0 столбца каждой
М-й строки. Для второй - то же, но со сдвигом на один столбец. Так же и
для следующих, а затем - со сдвигом на одну, две, (М-1) строки. Например,
если М=К=2, то имеем 4 порции:
1 13 2 14 3 15 4 16
25 37 26 38 27 39 28 40
5 17 6 18 7 19 8 20
29 41 ЗО 42 31 43 32 44
9 21 10 22 11 23 12 24
33 45 34 46 35 47 36 48
То єсть плоскость разбивается на прямоугольники размера МхІЧ, задается
обход плоскосте прямоугольниками, а также обход внутри самих прямо-
угольников и далее делается "одновременньїй" обход по каждому из них:
сначала вьібираются их первьіе злементи, затем вторме, третьи, и т. д., до
последнего.
Обход решетками с учетом значений злементов
После того как обработаньї первьіе злементи прямоугольников (в нашем
примере - квадратов 2x2), если предположить, что они являются атрибута-
ми своих областей, вьігодно (для улучшения сжатия) группировать областе
282
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритми сжатия изображений
с одинаковмми атрибутами, т. е. с одинаковмми значеннями зтих первьіх
злементов.
Допустим, атрибути распределенм так:
к. 6 0 0
ь к. с 0
ь ь к. к
Тогда имеет смисл дальше действовать так:
к. 13 О 25 О 28 О 31
15 14 27 26 зо 29 33 32
ь 40 К 16 0 34 0 37
42 41 18 17 36 35 39 38
Ь 43 Ь 46 к. 19 к 22
45 44 48 47 21 20 24 23
То єсть сначала обходим квадрати с атрибутом "К", затем с атрибутом "6"
и, наконец, с "Ь".
КОНТУРНЬІЙ ОБХОД
Часть злементов принадлежит к одной группе, часть - к другой, причем
контур задан:
1 1 і 1 і 1 1 1
1 1 а їв і 1 1 1
1 а а а 1 1 1
1 а ж "3" 1 1
1 і 1 а 1 1 1 1
1 і 1 і 1 1 1 1
36 злементов - из группи "1", а 12 - из группи "2".
Очевидно, что имеет смисл отдельно оформить злементн группи "1":
1 29 28 27 26 22 21 31
2 зо 25 23 20 32
3 24 19 33
4 18 34
5 8 9 13 14 17 35
6 7 10 11 12 15 16 36
и затем точно так же остальние злементм, принадлежащие к группе "2".
283
Книга написана коллективом Шір:/Лууууу.сотрге88Іоп.ги/
(7000+ файлов о сжатии)
Методь/ сжатия данньїх
КОНТУРНЬІЙ ОБХОД С НЕИЗВЕСТНЬІМИ КОНТУРАМИ
Рассмотрим предьідущий пример, т. е. такое же распределение злемен-
тов групп по плоскости, но изначально, при начале обхода плоскости, зто
распределение неизвестно. Будем действовать таким методом:
1 44 41 40 35 34 29 28
2 43 42:+ 39 36 33 ЗО 27
3 45: 46 38 37 32 31 26
4 93І ю : 47 48 19;. 20 25
5 8 її 14 15 18 21 24
6 7 12 13 16 17 22 23
Обходим плоскость "столбцами с разворотами" и, обнаруживая злемент
другой группм (в злементах 9, 10, 14...), также делаем разворот на 180°. За-
тем (шаги 45-48) обходим оставшуюся часть плоскости, содержащую
(предположительно) злементи другой группьі.
В итоге имеем:
среди первмх 36 злементов 4 из группм "2", а 32 из группм "1";
из последних 12 злементов 8 из группм "2", а 4 из группм" 1".
В первой части 4/36=1/9 "исключений", во второй - 4/12=1/3.
А если бм делали просто обход "столбцами с разворотами":
1 12 13 24 25 36 37 48
2 11 14^ 23* 26 35 38 47
3 10 15 22* 27Й 34 39 46
4 9 '^6 16- 21 28'7 зз* 40 45
5 8 17 20* 29 32 41 44
6 7 18 19 зо 31 42 43
В итоге:
среди первмх 33 злементов 12 из группм "2", а 21 из группм "1";
из последних 15 злементов все из группм" 1".
То єсть в большей части получившсгося блока - более чем 1/3 "исключений".
"Квадратная змейка"
Рекурсивний метод для квадратних областей.
Если принять левмй верхний злемент за первий, то для квадрата 2x2
возможньї два варианта обхода без разрмвов:
1 4
2 3
и
1 2
4 3
То єсть либо первий переход внутри квадрата бил сверху вниз, тогда пя-
тьім шагом будет переход к левому верхнему злементу квадрата справа
284
К((р:/Лу\у\у.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
РезДел 2. Алгоритми сжатия изображений
(или к правому нижнему злементу квадрата сверху). Либо. наоборот, пер-
вмй переход внутри квадрата бьіл вправо, тогда пятмм шагом будет пере-
ход к квадрату снизу (или слева). Переформулируем так:
если нужно вийти к правому (или верхнему) квадрату, то первий шаг -
вниз, если к нижнему (или левому), то первий шаг - вправо;
пройденньїм путем однозначно задается, к какому квадрату нужно вий-
ти в каждьій конкретний момент;
только в самом начале єсть вибор одного из двух вариантов обхода.
Например:
хода зтого квадрата 2x2 мм должни вийти к нижнему квадрату 2x2.
Первий шаг перехода от 2x2 к 2x2 внутри 4x4 бмл вниз, - значит, мм
должни вийти к правому 4x4.
Первий переход внутри квадрата 16x16 бмл вправо, - значит, в резуль-
тате обхода 16x16 мм должнм прийти к нижнему, и т. д.
Разрмвов нет, и каждмй злемент принадлежит к областе, записанной
компактно.
Упражнение. Определите, какие числа должни бить в кезаполненннх клетках
примерз. Нарисуйте другой пример: при виборе второго злемента квадрата
делаем переход не слева направо, а сверху вниз.
Для квадрата 3x3 можно взять такие два "шаблона":
1 4 5
2 3 6
9 8 7
1 2 9
4 3 8
5 6 7
Первое правило будет "противоположнмм" первому правилу случая 2x2,
но остальнме два - такие же:
если нужно вийти к правому (или верхнему) квадрату, то первмй шаг -
вправо, если к нижнему (или левому), то первий шаг - вниз;
285
Книга написана коллективом 1йір:/Лууууу.сотрге88Іоп.ги/
Методьі сжатия данньїх(7000+ файлов о сжатии)
• пройденими путем однозначно задается, к какому квадрату нужно вий-
ти в каждмй конкретний момент;
только в самом начале єсть вьібор одного из двух вариантов.
Но для 3x3 єсть еще и такие вариантьі:
1 6 7
2 5 8
3 4 9
1 2 3
6 5 4
7 8 9
Видно, что они совершенно зквивалентньї, т. е. взаимозаменяемьі, по-
скольку в обоих случаях мьі виходим в правий нижний угол. Точно так же
зквивалентнн и два варианта обхода ими квадрата 9x9:
1 18 19
9 10 27
46 45 28
54 37 36
55 72 73
63 64 81
1 54 55
9 46 63
10 45 64
18 37 72
19 36 73
27 28 81
Совершенно аналогично для 5x5, и затем 25x25 и т. д.
Если требуетея обойти квадрат размера КхЬІ, сначала определяем, про-
изведением каких простих чисел является N. затем задаєм порядок зтих чи-
сел в произведении (а для каждого нечетного множителя еще и направление
обхода). Таким образом будет задан процесе обхода.
Если К, равное числу двоек в произведении, больше одного: К>1, то
сторона самого мелкого квадрата должна бить 2К"' или 2К злементов. На-
пример, если К.=3, то обход без разрмвов 2хЗх2х2 (от самого мелкого 2x2 к
6x6, затем к 12x12 и, наконец, к 24x24) невозможен:
286
1Шр:/Лууууу.сотрге88Іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритми сжатия изображений
63 64 9 10
59 68 5 14
55 72 1 18
54 37 36 19
50 41 32 23
46 45 28 ТІ
73
Каждая ячейка зтой таблицьі - квадрат 2x2; нижние 5 строк пропущена:
перейти к двум нижним квадратам 12x12 без разрьіва не сможем.
Других ограничений при обходе "квадратной змейкой" нет.
Каждий квадрат со стороной Ь>2 можно обходить обьічной змейкой,
а не "квадратной". Зто вмгодно в том случае, если наиболее различаю-
щиеся злемента сгруппированьї в противоположнмх углах квадрата.
7^. Упражнение. Нарисуйте порядок обхода квадрата 25x25, а затем - квадрата
12x12. Убедитесь, что разрьівов нет и каждьій злемент принадлежит к компакт-
но записанной обпасти.
Обход по спирали
Обход по спирали довольно тривиален. Строится квадрат 3x3, затем 5x5,
затем 7x7,9x9 и т. д.:
43 44 45 46 47 48 49
42 21 22 23 24 25 26
41 20 7 8 9 10 ТІ
40 19 6 1 2 11 28
39 18 5 4 3 12 29
38 17 16 15 14 13 зо
37 36 35 34 33 32 31
Если же строить круги радиуса 2, 3,4 и т. д., неизбежно будут присутст-
вовать точки разрьіва. Спираль может бмть и сходящейся. Суть ее можно
показать с помощью зтой же иллюстрации, только направление движения
обратное: от 49 к 1. Кроме того, она может бьггь с разворотами:
1 2 3 4 5 6 7
24 25 40 39 38 37 8
23 26 41 42 43 36 9
22 27 48 49 44 35 10
21 28 47 46 45 34 11
20 29 зо 31 32 33 12
19 18 17 16 15 14 13
287
Книга написана коллективом К((р:/Лу\у\у.сотрге‘і‘ііоп.і'и/
Методьі сжатия данньїх(7000+ файлов о сжатии)
Направление изменяется в точках, расположенньїх на диагонали: в дан-
ном примере зто "25" и "41".
Общие моментьі для прямоугольньіх методов
В любом случае можно начать с одного из четьірех углов и дальше дви-
гаться в одном из двух направлений: по вертикали и по горизонтали. Пер-
вое, т. е. положение первого утла, влияния на степень сжатия почти не ока-
зьівает, особенно при сжатии изображений. А вот второе, вьібор направле-
ння, может существенно улучшить сжатие, поскольку областе в зтих двух
случаях (основнеє направление по вертикали или по горизонтали) будут
сгруппированьї по-разному.
Например, отсканированнмй текст лучше ежимать, обходя по вертикали,
поскольку в нем больше длинньїх сплошньїх вертикальних линий, чем го-
ризонтальньїх.
Общие моментьі для методов сложной формьі
Может возникнуть необходимость помечать уже обработанньїе точки
плоскости, чтобьі избежать лишних вичислений, предотвращающих по-
вторнеє их занесение в £>. Тогда єсть два основних варианта: либо добавить
по одному "флатовому" биту для каждой точки плоскости, либо вибрать
(или добавить) значение для "флага", показнвающего, что точка уже внесе-
на в Р, и записьівать зто значение на место уже внесенннх точек.
Вопросьі для самоконтроля
1. Какие параметри надо определить, прежде чем сравнивать два алгорит-
ма компрессии?
2. Почему некорректно сравнивать временние параметри реализаций алго-
ритмов компрессии, оптимально реализованньїх на разньїх компьюте-
рах? Приведите примерьі ситуаций, когда архитектура компьютера дает
преимущества тому или иному алгоритму.
3. Предложите пример своего класса изображений.
4. Какими свойствами изображений ми можем пользоваться, создавая ал-
горитм компрессии? Приведите примерьі.
5. Что такое редактируемость?
6. Назовите основние требования приложений к алгоритмам компрессии.
7. Что такое симметричность?
8. Предложите пример своего класса приложений.
9. Приведите примерьі аппаратннх реализаций алгоритма сжатия изобра-
жений, с которьіми вам приходилось сталкиваться (повседневньїе и дос-
таточно новьіе).
288
К((р://уууууу.сотрге88Іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритми сжатия изображений
10. Почему високая скорость компрессии, вьісокое качество изображений и
високая степень компрессии взаимно противоречиви? Покажите проти-
воречивость каждой пари условий.
Глава 1. Сжатие изображения без потерь
Алгоритм ЯІ_Е
Первьій вариант алгоритма
Даннмй алгоритм необичайно прост в реализации. Кодирование длин
повторов - от английского Кип Ееп§Йі Епсос1іп§ (КЬЕ) - один из самих ста-
рих и самих простих алгоритмов архивации графики. Изображение в нем
(как и в нескольких алгоритмах, описанних ниже) витягивается в цепочку
байтов по строкам растра. Само сжатие в КЬЕ происходит за счет того, что
в исходном изображении встречаются цепочки одинаковьіх байтов.
Замена их на пари <счетчик повторений, значение> уменьшает
избнточность данньїх.
Алгоритм декомпрессии при зтом виглядит так:
ІпіСіаІіхаСіоп(...);
йо {
ЬуСе = ІтадеГіїе.ВеасШехСВуСе ();
і£ (является счетчиком(ЬуСе)) {
соипіег = ЬомбЬіСз(ЬуСе)+1;
чаїие = ІтадеГіїе.ВеасіМехСВуСе ();
£ог(і=1 Со соипСег)
ОесотргеззедГіїе.МгіСеВуЬе(уаіие)
1
еізе {
ОесотргеззесІГіїе .ИгіСеВуСе (ЬуСе)
) мИіІе(!ІтадеГіїе.ЕОГ());
В данном алгоритме признаком счетчика (сошііег) служат единици в
двух верхних битах считанного файла:
XX значение І
^Ьопоеторять^
Соответственно оставшиеся 6 бит расходуются на счетчик, которий мо-
жет принимать значення от 1 до 64. Строку из 64 повторяющихся байт ми
превращаем в 2 байта, т. е. сожмем в 32 раза.
289
Книга написана коллективом 1Шр:/Лууууу.сотрге88Іоп.ги/
Методи сжатия данньїх <7000+ файлов о сжатии)
С& Упражнение. Составьте алгоритм компрессии для первого варианта
алгоритма НІЕ.
Алгоритм рассчитан на деловую графику - изображения с большими об-
ластями повторяющегося цвета. Ситуация, когда файл увеличивается, для
зтого простого алгоритма не так уж редка. Ее можно легко получить, при-
меняя групповое кодирование к обработанним цветньїм фотографиям. Для
того чтобн увеличить изображение в 2 раза, его надо применить к зобра-
женню, в котором значення всех пикселов больше двоичного 11000000 и
подряд попарно не повторяются.
"(Зк Упражнение. Предпожите 2-3 примера "плохих" изображений для алгоритма ПСЕ.
Обьясните, почему размер сжатого файла больше размера исходного фгмла.
Данньш алгоритм реализован в формате РСХ. См. пример в привожений 2.
Второй вариант алгоритма
Второй вариант зтого алгоритма имеет большую максимальную степень
сжатия и меньше увеличивает в размерах исходньїй файл.
Алгоритм декомпрессии для него вьіглядит так:
ІпіМаїігаЕіоп (...);
до {
ЬуСе = ІтадеГіІе.КеадНехїВуЬе();
соипСег = Ьои7ЬіТз(ЬуТе)+1;
і£(если признак повтора(Ьу^е)) {
уаіие = ІтадеГіїе.КеадИехЬВуїе() ;
£ог (і=1 Ьо соипїіег)
СотргеззесІЕіІе.КгіЛеВу^е (уаіие)
}
еізе {
Гог(і=1 То соип^ег){
уаіие = ІтадеГіІе.КеадМехОВу^е();
СотргеззедЕіІе.Игі^еВуЬе(уаіие)
}
} иЬііє (! ІтадеЕіІе.ЕОГО );
Признаком повтора в данном алгоритме является единица в старшем
разряде соответствующего байта:
... ^Чп^іропускат^І
0 7 бит
1 7 бит
|| Что повторять
290
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алаоритжьі сжатия изображений
Как можно легко подсчитать, в лучшем случае зтот алгоритм сжимает
файл в 64 раза (а не в 32 раза, как в предьідущем варианте), в худшем уве-
личивает на 1/128. Средние показатели степени компрессии данного алго-
ритма находятся на уровне показателей первого варианта.
Упражнение. Составьте алгоритм компрессии для второго варианта
алгоритма НЬЕ.
Похожие схеми компрессии использованм в качестве одного из алго-
ритмов, поддерживаемнх форматом ТІРР, а также в формате ТОА.
Характеристики алгоритма НЬЕ:
Степени сжатия: первий вариант: 32, 2, 0,5. Второй вариант: 64, З,
128/129. (Лучшая, средняя, худшая степени).
Класе изображений: ориентирован алгоритм на изображения с не-
большим количеством цветов: деловую и научную графику.
Симметричность: примерно единица.
Характерньїе особенности: к положительним сторонам алгоритма, по-
жалуй, можно отнести только то, что он не требует дополнительной памяти
при архивации и разархивации, а также бистро работает. Интересная особен-
ность группового кодирования состоит в том, что степень архивации для не-
котормх изображений может бить существенно повишена всего лишь за
счет изменения порядка цветов в палитре изображения.
Алгоритм ЬХУ¥
Название алгоритм получил по первмм буквам фамилий его разработчи-
ков - Ьетреї, Тлу и ^єісЬ. Сжатие в нем, в отличие от КЬЕ, осуществляется
уже за счет одинаковмх цепочек байтов. Алгоритм является самим из-
вестннм представителем семейства словарньїх методов Ь278 (см. гл. З под-
разд. 1).
Алгоритм 12
Существует довольно большое семейство ЬХ-подобних алгоритмов, раз-
личающихся, например, методом поиска повторяющихся цепочек. Один из
достаточно простих вариантов зтого алгоритма, например, предполагает,
что в виходном потоке идет либо пара <длина совпадения, смещение отно-
сительно текущей позиции>, либо просто <длина совпадения> "пропуска-
емнх" байтов и сами значення байтов (как во втором варианте алгоритма
КЬЕ). При разжатии для пари <длина совпадения, смещение> копируютея
<длина совпадения> байт из виходного массива, полученного в результате
разжатия, на <смещение> байт раньше, а <длина совпадения> (т. е. число,
291
Книга написана коллективом К((р:/Лу\у\у.сотрге‘і‘ііоп.і'и/
Методи сжатия данньїх(7000+файлов о сжатии)
равное длина совпаденияу) значений "пропускаемьіх" байтов просто копи-
руются в вьіходной массив из входного потока. Данньїй алгоритм является
несимметричньїм по времени, поскольку требует полного перебора буфера
(скользящего окна) при поиске одинаковмх подстрок. В результате нам
сложно задать большой буфер из-за резкого возрастания времени компрес-
сии. Однако потенциально построение алгоритма, в котором на <длина сов-
падения> и на <смещение> будет вьіделено по 2 байта (старший бит стар-
шего байта длиньї совпадения - признак повтора строки І копирования по-
тока), дает нам возможность ежимать все повторяющиеся подстроки
размером до 32Кб в буфере размером 64Кб.
^0 15 бит І Что пропускать І ...
При зтом мьі получим увеличение размера файла в худшем случае на
32770/32768 (в 2 байтах записано, что нужно переписать в вьіходной поток
следуюшие 215 байт), что совсем неплохо. Максимальная степень сжатия
составит в пределе 8192 раза. В пределе, поскольку максимальнеє сжатие
мьі получаем, превращая 32 Кб буфера в 4 байта, а буфер ("словарь" в тер-
минах Ь2) такого размера мьі накопим не сразу. Однако минимальная под-
строка, для которой нам вьігодно проводить сжатие, должна состоять в об-
щем случае минимум из 5 байт, что и определяет малую ценность данного
алгоритма. К достоинствам отого варианта Ь2 можно отнести чрезвьічай-
ную простоту алгоритма декомпрессии.
Упражнение. Предложите другой вариант алгоритма 12, в котором на пару
«счетчик, смещение» будет вьіделено 3 байта, и подечитайте основнеє харак-
теристики своєю алгоритма.
Алгоритм і_7УУ
Рассматриваемьій нами ниже вариант алгоритма будет использовать де-
рево для представлення и хранения цепочек (фраз словаря в терминах
разд. 1). Очевидно, что зто достаточно сильное ограничение на вид цепочек
и далеко не все одинаковьіе подцепочки в нашем изображении будут ис-
пользованьї при сжатии. Однако в предлагаемом алгоритме вьігодно ежи-
мать даже цепочки, состоящие из 2 байт.
Процесе сжатия вигляд ит достаточно просто. Мьі считьіваем последова-
тельно символьї входного потока и проверяем, єсть ли в созданной нами
таблице строк такая строка. Если строка єсть, то мьі считьіваем следующий
292
1ійр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритми сжатия изображений
символ, а если строки нет, то мм заносим в поток код для предьідущей най-
денной строки, заносим строку в таблицу и напинаєм поиск снова.
Функция ІпііТаЬ1е() очищает таблицу и помещает в нее все строки еди-
ничной длинм.
ІпіЬТаЬІеО;
СоїпргеззесіГіїе . НгіТеСосіе (СІеагСойе) ;
СигЗСг=пустая строка;
»Ьі1е(не ІтадеЕіІе.ЕОГО){ //Пока не конец файла
С=ІтадеЕі1е. КеадМехбВуЄе () ;
і£(СигЗЬг+С єсть в таблице)
СигЗїг=СигЗбг+С;//Приклеить символ к строке
еізе {
со<іе=Сос1еГогЗі:гіпд (СигЗСг); //сосіе-не байт!
СотргеззесіГіїе .КгіЄєСосіє (сосіе) ;
АсігіЗбгіпдТоТаЬІе (СигЗСг+С) ;
СигЗбг=С; // Строка из одного символа
)
}
соде=СосіеЕогЗСгіпд (Сиг5С.г) ;
СоїпргеззесіГіїе. ИгібеСосіе (сосіе) ;
СошргеззедГіІе.ИгібеСосіе (Со<іеЕпдО£Іп£огтабіоп) ;
Как говорилось вміле, функция ІпііТаЬ1е() инициализирует таблицу
строк так, чтобьі она содержала все возможнме строки, состоящие из одного
символа. Например, если ми сжимаем байтовме даннме, то таких строк в
таблице будет 256 ("0", "1",..., "255"). Для кода очистки (СІеагСоде) и кода
конца информации (СосіеЕпсЮПпРогтаііоп) зарезервированьї значення 256 и
257. В рассматриваемом варианте алгоритма используется 12-битовмй код,
и, соответственно, под коди для строк нам остаются значення от 258 до
4095. Добавляемме строки записмваются в таблицу последовательно, при
зтом индекс строки в таблице становится ее кодом.
Функция К.еасШехіВуіе() читает символ из файла. Функция \УгііеСосіе()
записьівает код (не равньїй по размеру байту) в вьіходной файл. Функция
Аскі8ігіп§ТоТаЬ1е () добавляет новую строку в таблицу, приписьівая ей код.
Кроме того, в данной функции происходит обработка ситуации переполне-
ния таблици. В зтом случае в поток записмвается код предьідущей найден-
ной строки и код очистки, после чего таблица очищается функцией
ІпПТаЬ1е(). Функция Со<1еРог8ітіп§() находит строку в таблице и вмдает код
зтой строки.
293
Книга написана коллективом Шір:/Лууууу.сошрге88Іоп.пі/
Методи сжатия данньїх(7000+ файлов о сжатии)
Пример
Пусть мьі сжимаем последовательность 45, 55, 55, 151, 55, 55, 55. Тогда,
согласно изложенному вьіше алгоритму, мьі поместим в вьіходной поток
сначала код очистки <256>, потом добавим к изначально пустой строке "45"
и проверим, єсть ли строка "45" в таблице. Поскольку мм при инициализа-
ции занесли в таблицу все строки длиной в один символ, то строка "45" єсть
в таблице. Далее мм читаєм следующий символ 55 из входного потока и
провернем, єсть ли строка "45, 55" в таблице. Такой строки в таблице пока
нет. Ми заносим в таблицу строку "45, 55" (с первнм свободньїм кодом 258)
и записмваем в поток код <45>. Можно коротко представить архивацию
так:
"45" - єсть в таблице;
"45, 55" - нет. Добавляєм в таблицу <258>"45, 55". В поток: <45>;
"55, 55" - нет. В таблицу: <259>"55,55". В поток: <55>;
"55,151" - нет. В таблицу: <260>"55, 151". В поток: <55>;
"151,55” - нет. В таблицу: <261>"151,55". В поток: <151>;
"55, 55" - єсть в таблице;
"55,55,55" - нет. В таблицу: "55,55, 55" <262>. В поток: <259>.
Последовательность кодов для данного примера, попадающих в вмход-
ной поток: <256>, <45>, <55>, <55>, <151>, <259>.
Особенность заключается в том, что для декомпрессии нам не надо
сохранять таблицу строк в файл для распаковки. Алгоритм построен таким
образом, что ми в состояний восстановить таблицу строк, пользуясь только
потоком кодов.
Мьі знаєм, что для каждого кода надо добавлять в таблицу строку, со-
стоящую из уже присутствующей там строки и символа, с которого начина-
ется следующая строка в потоке.
Код зтой строки добавляется в таблицу
Сп, Сп+1, Сп+2, Сп+3, Сп+4, Сп+5, Сп+6, Сп+7, Сп+8, Сп+9,
Кодьі зтих строк идут в вьіходной поток
Алгоритм декомпрессии, осуществляющий зту операцию, вьіглядит сле-
дующим образом:
294
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритми сжатия изображений
сосіе=Гі1е. КеасІСосІе () ;
«Ні1е(сосіе != СосіеЕпсІО£Іп£огта1:іоп) {
і£(соде == СІеагСосіе) {
ІпіЬТаЬІеО;
соде=Гі1е. КеадСосіе ();
і£(сосіе == СосіеЕпсіО£Іп£огтаС.іоп) {
закончить работу;
)
еізе {
і£ (ІпТаЬІе (сосіе)) {
ІтадеГіїе.Игі£е5£гіпд(ГготТаЬІе(сосіе));
АддЗЬгіпдТоТаЬІе (5£гГготТаЬ1е (о1сі_со<іе) +
Гігз£СЬаг(3£гГготТаЬ1е(соде)));
о1сі_сосіе=сосІе ;
}
еізе {
Ои£3£гіпд= 3£гГгошТаЬ1е (о1<і_сосіе) +
Гігз£СЬаг(ЗїгГготТаЬІе (о1<і_со<іе));
ІтадеГіїе.Игі£еЗ£гіпд(Ои£3£гіпд);
АдсІЗ£гіпдТоТаЬ1е (Ои£5£гіпд);
о1сі_сос1е=со<іе;
}
}
сосіе=Гі1е. КеасіСосіе ();
)
Здесь функция КеасіСоде() читает очередной код из декомпрессируемого
файла. Функция ІпііТаЬ1е() вьшолняет те же действия, что и при компрес-
сии, т. е. очищает таблицу и заносит в нее все строки из одного символа.
Функция Ріг$іСЬаг() вьідает нам первмй символ строки. Функция ЗігРгот
ТаЬ1е() вьідает строку из таблицьі по коду. Функция АсМЗігіпвТоТаЬІеО до-
бавляет новую строку в таблицу (присваивая ей первьій свободнмй код).
Функция \¥гііеЗДгіп£0 записьівает строку в файл.
ЗІ Замечание 1. Как ви могли заметить, записиваемие в поток коди посте-
пенно возрастают. До тех пор пока в таблице не появишся, например, в первьій
раз код 512, все коди будут меньше 512. Кроме того, при компрессии и при де-
компрессии коди в таблице добавляются при обработке одного и того же сим-
вола, т. е. зто происходит "синхронно". Ми можем воспользоваться зтим
свойством алгоритма для того, чтоби повисить степень компрессии. Пока в
таблицу не добавлен 512-й символ, ми будем писать в виходной битовий поток
коди из 9 бит, а сразу при добавлений 512 - коди из 10 бит. Соответственно
декомпрессор также должен будет воспринимать все коди входного потока
9-битовими до момента добавлення в таблицу кода 512, после чего будет вос-
295
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.пі/
Методь/ сжатия данньїх (7000+ файлов о сжатии)
принимать все входние кодьі как 10-битовие. Аналогично ми будем поступать
при добавлений в таблицу кодов 1024 и 2048. Данньїй прием позволяет примерно
на 15% поднять степень компрессии:
2048
512 1024 Кодьі от 0 до 2048 Кодьі от 0 до 4095 1
0 Одо отО
до 1024 12 бит ।
512 10 бит 11 бит
9 бит
Замечание 2. При сжатии изображения нам важно обеспечить бистроту
поиска строк в таблице. Ми можем воспользоваться тем, что каждая сле-
дующая подстрока на один символ длиннее предидущей, кроме того, предиду-
щая строка уже бьіла нами найдена в таблице. Следовательно, достаточно
создать список ссьілок на строки, начинающиеся с данной подстроки, как весь
процесе поиска в таблице сведется к поиску в строках, содержащихся в списке
для предидущей строки. Понятно, что такая операция может бьіть проведена
очень бистро.
Заметим также, что реально нам достаточно хранить в таблице только
пару <код предидущей подстроки, добавленний символ>. Зтой информации
вполне достаточно для работи алгоритма. Таким образом, массив от 0 до 4095
с злементами <код предидущей подстроки; добавленний символ; список ссьілок
на строки, начинающиеся с зтой строки> решает поставленную задачу поиска,
хотя и очень медленно.
На практике для хранения таблици используется такое же бистрое, как в
случае списков, но более компактнеє по памяти решение - хеш-таблица. Табли-
ца состоит из 8192 (213) злементов. Каждий злемент содержит <код преди-
дущей подстроки; добавленний символ; код зтой строки>. Ключ для поиска
длиной 20 бит формируетея с использованием двух первих злементов, хранимих
в таблице как одно число (кеу). Младшие 12 бит зтого числа отдани под код,
а следующие 8 бит под значение символа.
В качестве хеш-функции при зтом используется
Іпсіех(кеу) = ((кеу » 12) л кеу) & 8191;
где » - побитовий едвиг вправо (кеу » 12 -ми получаем значение символа);
л-логическая операция побитового исключающего ИЛИ; &логическое побито-
воеИ.
Таким образом, за считанное количество сравнений ми получаем искомий
код или сообщение, что такого кода в таблице нет.
Подсчитаем лучшую и худшую степень сжатия для данного алгоритма.
Лучшее сжатие, очевидно, будет получено для цепочки одинаковьіх байт
большой длиньї (т. с. для 8-битового изображения, все точки которого име-
ют, для определенности, цвет 0). При зтом в 258 строку таблицьі мьі запи-
296
К((р:/Лу\у\у.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритми сжатия изображений
шем строку "0, 0", в 259 - "0, 0, 0", ... в 4095 - строку из 3839 (=4095-256)
нулей. При зтом в поток попадет (проверьте по алгоритму!) 3840 кодов,
включая код очистки. Следовательно, посчитав сумму арифметической про-
грессии от 2 до 3839 (т. е. длину сжатой цепочки) и поделив ее на 3840*12/8
(в поток записмваются 12-битовьіе кодм), ми получим лучшую степень
сжатия.
Упражнение. Вьічислить точнеє значение лучшей степени сжатия. Более
сложное задание: вьічислить ее с учетом замечания 1.
Худшее сжатие будет получено, если мьі ни разу не встретим подстроку,
которая уже єсть в таблице (в ней не должно встретиться ни одной одинако-
вой парм символов).
Упражнение. Составить алгоритм генерации таких цепочек.
В случае, если мьі постоянно будем встречать новую подстроку, мм за-
пишем в вьіходной поток 3840 кодов, которьім будет соответствовать строка
из 3838 символов. Без учета замечания 1 зто составит увеличение файла
почти в 1.5 раза.
реализован в форматах СІР и ТІРР.
Характеристики алгоритма Ь2\У:
Степени сжатия: примерно 1000, 4, 5/7 (лучшее, ереднее, худшее
сжатие). Сжатие в 1000 раз достигается только на одноцветньїх зобра-
женнях размером кратним примерно 7 Мб. (Почему 7 Мб - становится
понятно при раечете наилучшей степени сжатия.)
Класе изображений: ориентирован на 8-битовьіе изображения,
построенньїе на компьютере. Сжимает за счет одинаковмх подцепочек
в потоке.
Симметричность: почти симметричен, при условии оптимальной реали-
зации операции поиска строки в таблице.
Характерньїе особенности: ситуация, когда алгоритм увеличивает
изображение, встречается крайнє редко. Универсален.
Алгоритм Хаффмана
Алгоритм Хаффмана с фиксированной таблицей ССІТТ Саомр З
Классический алгоритм Хаффмана бьіл рассмотрен в разд. 1 данной кни-
ги. Он практически не применяетея к изображениям в чистом виде, а ис-
пользуется как один из зтапов компрессии в более сложньїх схемах.
297
Книга написана коллективом 1Шр:/Лууууу.сотрге88Іоп.ги/
Методи сжатия данньїх(7000+ файлов о сжатии)
Близкая модификация алгоритма используется при сжатии черно-бельїх
изображений (1 бит на пиксел). Полное название данного алгоритма ССІТТ
Огоир 3. Зто означает, что даннмй алгоритм бьіл предложен третьей груп-
пой по стандартизации Международного консультационного комитета по
телеграфии и телефонии (Сопзиііаііуе Соттійее Іпіетаііопаї Те1е§гарЬ апб
ТеїерЬопе). Последовательности подряд идуЩИХчерньїх и бельїх точек в
нем заменяются числом, равньїм их количеству. А зтот ряд уже, в свою оче-
редь, сжимается по Хаффману с фиксированной таблицей.
Определение. Набор идущих подряд точек изображения одного цвета
назьівается серией. Длина зтого набора точек назьівается длиной серии.
В таблицах, приведеннмх ниже (табл. 1.1 и 1.2), заданьї два вида кодов:
кодьі завершення серий - заданьї с 0 до 63 с шагом 1;
составние (дополнительньїе) кодьі - заданьї с 64 до 2560 с шагом 64.
Каждая строка изображения сжимается независимо. Мьі считаем, что в
нашем изображении существенно преобладает бельїй цвет, и все строки
изображения начинаются с белой точки. Если строка начинается с черной
точки, то мм считаем, что строка начинается белой серией с длиной 0. На-
пример, последовательность длин серий 0,3, 556, 10,... означает, что в зтой
строке изображения идут сначала 3 черньїе точки, затем 556 бельїх, затем 10
черньїхит. д.
На практике в тех случаях, когда в изображении преобладает черньїй
цвет, мм инвертируем изображение перед компрессией и записьіваем ин-
формацию об зтом в заголовок файла.
Алгоритм компрессии вьіглядит так:
£рг(по всем строкам изображения) {
Преобразуем строку в набор длин серий;
£ог(по всем сериям) {
(серия белая) {
Ь= длина серии;
«Ьі1е(Ь > 2623) { 11 2623=2560+63
Ь=Ь-2560;
ЗаписатьБельїйКодДля (2560);
}
ІГ(Ь > 63) {
Ь2=МаксимальнмйСостКодМеньшеЬ(Ь);
Ь=Ь-Ь2;
ЗаписатьБельїйКодДля (Ь2);
)
ЗаписатьБельїйКодДля (Ь) ;
//Зто всегда код завершення
)
298
1ііір:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритми сжатия изображений
еізе {
[Код, аналогичньїй белой серии,
с той разницей, что записиваются
черньїе коди]
}
}
// Окончание строки изображения
}
Поскольку черньїе и белме серии чередуются, то реально код для белой
и код для черной серии будут работать поперемснно.
В терминах регулярньїх виражений мьі получим для каждой строки на-
шего изображения (достаточно длинной, начинающейся с белой точки) вьі-
ходной битовмй поток вида:
((<Б-2560>)*[<Б-сст.>]<Б-зв.>(<Ч-2560>)*[<Ч-сст.>]<Ч-зв.>)+
[(<Б-2560>)*[<Б-сст.>]<Б-зв.>]
где ()* - повтор 0 или более раз; ()*.- повтор 1 или более раз; [] - включение
1 или 0 раз.
Для приведенного ранее примера: 0, 3, 556, 10... алгоритм сформирует
следующий код: <Б-0хЧ-ЗхБ-512хБ-44хЧ-10>, или, согласно таблице,
001101011001100101001011070000100 (разньїе кодьі в потоке вьіделеньї для
удобства). Зтот код обладает свойством префиксньїх кодов и легко может
бьггь свернут обратно в последовательность длин серий. Легко подсчитать,
что для приведенной строки в 569 бит мьі получили код длиной в 33 бита,
т. е. степень сжатия составляет примерно 17 раз.
Упражнение. Во сколько раз увеличится размер файла в худшем случае? По-
чему? (Приведеними в характеристиках алгоритма ответ не является лолньїм,
поскольку возможньї больлие значення худшей степени сжатия. Найдите их.)
Заметим, что единственное "сложное" вьіражение в нашем алгоритме:
Е2=МаксимальньійДопКодМеньшеЬ(Ь) - на практике работает очень про-
сто: Ь2=(Е»6)*64, где » - побитовьій сдвиг Ь влево на 6 бит (можно сде-
лать то же самое за одну побнтовую операцию & - логическое И).
Упражнение. Дана строка изображения, записанная в виде длин серий - 442,
2, 56, 3, 23, 3,104,1, 94,1, 231, размером 120 байт ((442+2+..+231)/8). Подсчи-
тать степень сжатия зтой строки алгоритмом ССІТТ бгоир 3.
Табл. 1.1 и 1.2 построенм с помощью классического алгоритма Хаффма-
на (отдельно для длин черньїх и бельїх серий). Значення вероятностей появ-
лення для конкретних длин серий бьіли полученьї путем анализа большого
количества факсимильньїх изображений.
299
Книга написана коллективом 1Шр:/Лууууу.сошрге88Іоп.ги/
Методьі сжатия данньїх (7000+ файлов о сжатии)
Таблица 1.1. Кодм завершений
Длина серии Код белой подстроки Код черной подстроки Длина серии Код белой подстроки Код черной подстроки
0 00110101 0000110111 32 00011011 000001101010
1 00111 010 33 00010010 000001101011
2 0111 11 34 00010011 000011010010
3 1000 10 35 00010100 000011010011
4 1011 011 36 00010101 000011010100
5 1100 0011 37 00010110 000011010101
6 1110 0010 38 00010111 000011010110
7 1111 00011 39 00101000 000011010111
8 10011 000101 40 00101001 000001101100
9 10100 000100 41 00101010 000001101101
10 00111 0000100 42 00101011 000011011010
11 01000 0000101 43 00101100 000011011011
12 001000 0000111 44 00101101 000001010100
13 000011 00000100 45 00000100 000001010101
14 110100 00000111 46 00000101 000001010110
15 110101 000011000 47 00001010 000001010111
16 101010 0000010111 48 00001011 000001100100
17 101011 0000011000 49 01010010 000001100101
18 0100111 0000001000 50 01010011 000001010010
19 0001100 00001100111 51 01010100 000001010011
20 0001000 00001101000 52 01010101 000000100100
21 0010111 00001101100 53 00100100 000000110111
22 0000011 00000110111 54 00100101 000000111000
23 0000100 00000101000 55 01011000 000000100111
24 0101000 00000010111 56 01011001 000000101000
25 0101011 00000011000 57 01011010 000001011000
26 0010011 000011001010 58 01011011 000001011001
27 0100100 000011001011 59 01001010 000000101011
28 0011000 000011001100 60 01001011 000000101100
29 00000010 000011001101 61 00110010 000001011010
ЗО 00000011 000001101000 62 00110011 000001100110
31 00011010 000001101001 63 00110100 000001100111
300
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритми сжатия изображений
Таблица 1.2. Составние коди
Длина серии Код белой подстроки Код черной подстроки Длина серии Код белой подстроки Код черной подстроки
64 11011 0000001111 1344 011011010 0000001010011
128 10010 000011001000 1408 011011011 0000001010100
192 01011 000011001001 1472 010011000 0000001010101
256 0110111 000001011011 1536 010011001 0000001011010
320 00110110 000000110011 1600 010011010 0000001011011
384 00110111 000000110100 1664 011000 0000001100100
448 01100100 000000110101 1728 010011011 0000001100101
512 01100101 0000001101100 1792 00000001000 совп. с белой
576 01101000 0000001101101 1856 00000001100 -//-
640 01100111 0000001001010 1920 00000001101 -//-
704 011001100 0000001001011 1984 000000010010 -//-
768 011001101 0000001001100 2048 000000010011
832 011010010 0000001001101 2112 000000010100 -//-
896 011010011 0000001110010 2176 000000010101 -п-
960 011010100 0000001110011 2240 000000010110 -п-
1024 011010101 0000001110100 2304 000000010111 -п-
1088 011010110 0000001110101 2368 000000011100 -II-
1152 011010111 0000001110110 2432 000000011101 -II-
1216 011011000 0000001110111 2496 000000011110 -н-
1280 011011001 0000001010010 2560 000000011111 -н-
Если в одном столбце встретятся два числа с одинаковмм префиксом, то
зто опечатка.
Зтот алгоритм реализован в формате ТІГР.
Характеристики алгоритма ССІТТ Сгоир З
Степени сжатия: лучшая стремится в пределе к 213.(3), средняя 2,
в худшем случае увеличивает файл в 5 раз.
Класе изображений: двуцветнне черно-бельїе изображения, в кото-
рьіх преобладают большие пространства, заполненньїе белмм цветом
(рис. 1.1 и 1.2).
Симметричность: близка к единице.
Характерньїе особенности: данньїй алгоритм чрезвьічайно прост
в реализации, бьіетр и может бьіть легко реализован аппаратно.
301
Мвтодьі сжатия данньїх
(7000+ файлов о сжатии)
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.пі/
Рис. 1.2. Изображение, для которого
менее вьігодно применение алгоритма
ССІТТ-3. (Меньше областей,
заполненньїх одним цветом. Много
коротких "черньїх" и "бельїх" серий)
Рис. 1.1. Изображение, для которого
очень вьігодно применение алгоритма
ССІТГ-3. (Большие области заполненьї
одним цветом)
Алгоритм разработан группой зкспертов 180 (Іоіпі Ві-ієуєі Ехрегіз
Огоир) специально для сжатия 1-битовьіх черно-бельїх изображений [5].
Например, факсов или отсканированньїх документов. В принципе может
применяться и к 2-, и к 4-битовьім картинкам. При зтом алгоритм разбивает
их на отдельньїе битовьіе плоскосте. 1ВІО позволяет управлять такими па-
раметрами, как порядок разбиения изображения на битовьіе плоскосте, ши-
рина полос в изображении, уровни масштабирования. Последняя возмож-
ность позволяет легко ориентероваться в базе больших по размерам изо-
бражений, просматривая сначала их уменьшенньїе копии. Настраивая зти
параметри, можно использовать описанньїй вьіше зффект "огрубленного
изображения" при получении изображения по сети или по любому другому
каналу, пропускная способность которого мала по сравнению с возможно-
стями процессора. Распаковьіваться изображение на зкране будет постепен-
302
Шір:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритми сжатия изображений
но, как би медленно "проявляйсь". При зтом человек начинает анализиро-
вать картинку задолго до конца процесса разархивации.
Алгоритм построен на базе р-кодировщика [6], патентом на которьій
владеет ІВМ. р-кодер, так же как и алгоритм Хаффмана, использует для
чаще появляющихся символов короткие цепочки, а для реже появляющих-
ся - длинньїе. Однако, в отличие от непо, в алгоритме используются и по-
оледовательности символов. 1
І-088ІЄ88 ЗРЕЄ
Зтот алгоритм разработан группой зкспертов в областе фотографии
(Зоіпі РЬоІО£гарЬіс Ехрегі Огоир). В отличие от ЗВІО, Ьо88ІЄ88 ЗРЕО ориен-
тирован на полноцветньїе 24- или 8-битовне картинки в градациях серого
изображения без палитрн. Он представляет собой специальную реализацию
.ІРЕО без потерь. Степени сжатия: 20, 2, 1. ІЮ88ІЄ88 ЗРЕО рекомендуется
применять в тех приложениях, где необходимо побитовое соответствие ис-
ходного и декомпрессированного изображений. Подробнее об алгоритме
Сжатия ЗРЕС см. разд. 3.
Заключение
Попробуєм на зтом зтапе сделать некоторне обобщения. С одной сторо-
ни, приведенньїе вьіше алгоритми достаточно универсальньї и покривают
все типьі изображений, с другой - у них, по сегодняшним меркам, слишком
маленькая степень сжатия. Используя один из алгоритмов сжатия без по-
терь, можно обеспечить архивацию изображения примерно в 2 раза. В то же
время алгоритми сжатия с потерями оперируют с козффициентами ІО-
200 раз. Помимо возможности модификации изображения, одна из основ-
них причин подобной разници заключается в том, что традиционнме алго-
ритми ориентеровани на работу с цепочкой. Они не учитивают так Нази-
ваемую когерентность областей в йзображениях. Идея когерентносте об-
ластей заключается в малом изменейии цвета и структури на небольшом
участке изображения. Все алгоритми, о которнх речь пойдет ниже, били
создани позднее специально для сжатия графики и используют зту идею.
Справедливосте ради следует отметить, что и в классических алгорит-
мах можно использовать идею когерентносте. Существуют алгоритми об-
хода изображения по фрактальной кривой, при работе которнх оно также
вьітягивается в цепочку; но за счет того, что кривая обегает областе изо-
бражения по сложной траектории, участки близких цветов в получающейся
цепочке удлиняются.
303
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.пі/
Методьі сжатия данньїх(7000+ файлов о сжатии)
Вопросьі для самоконтроля
1. На какой класе изображений ориентирован алгоритм КЬЕ?
2. Приведите два примера "плохих" изображений для первого варианта ал-
горитма КЬЕ, для которих файл максимально увеличитея в размере.
3. На какой класе изображений ориентирован алгоритм ССІТТ 0-3?
4. Приведите пример "плохого" изображения для алгоритма ССІТТ 6-3,
для которого файл максимально увеличитея в размере. (Приведенньїй в
характеристиках алгоритма ответ не является полньїм, поскольку требу-
ет более "умной" реализации алгоритма.)
5. Приведите пример "плохого" изображения для алгоритма Хаффмана.
6. Сравните алгоритми сжатия изображений без потерь.
7. В чем заключается идея когерентности областей?
Глава 2. Сжатие изображений с потерями
Проблемні алгоритмов сжатия с потерями
Первьіми для сжатия изображений стали применяться привмчньїе алго-
ритми. Те, что использовались и используются в системах резервного копи-
рования, при создании дистрибутивов и т. п. Зти алгоритми архивировали
информацию без изменений. Однако основной тенденцией в последнее вре-
мя стало использование нових классов изображений. Старне алгоритми пе-
рестали удовлетворять требованиям, предьявляемнм к ежатию. Многие
изображения практически не сжимались, хотя "на взгляд" обладали явной
избьггочностью. Зто привело к созданию нового типа алгоритмов - ежи-
мающих с потерей информации. Как правило, степень сжатия и, следова-
тельно, степень потерь качества в них можно задавать. При зтом достигает-
ся компромисс между размером и качеством изображений.
Одна из серьезньїх проблем машинной графики заключается в том,
что до сих йор не найден адекватний критерий оценки потерь качества
изображения. А теряетея оно постоянно - при оцифровке, при переводе в
ограниченную палитру цветов, при переводе в другую систему цветопред-
ставления для печати и, что для нас особенно важно, при сжатии с потеря-
ми. Можно привести пример простого критерия: ереднеквадратичное от-
клонение значений пикселов (Ь2 мера, или гооі шеап зциаге - КМ8):
І п‘п 1
4(х,у) = \Р^—2-----.
304
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритми сжатия изображений
По нему изображение будет сильно испорчено при понижений яркости
всего на 5% (глаз зтого не заметит - у разньїх мониторов настройка яркости
варьируется гораздо сильнеє). В то же время изображения "со снегом"-
резким изменением цвета отдельньїх точек, слабими полосами или "муа-
ром" - будут признанні "почти не изменившимися" (Обьясните почему.).
Свои неприятньїе стороньї єсть и у других критериев.
Рассмотрим, например, максимальнеє отклонение:
Ф,у) = тахк -уЛ-
'.У
Зта мера, как можно догадаться, крайнє чувствительна к биению от-
дельньїх пикселов. То єсть во всем изображении может существенно изме-
ниться только значение 1 пиксела (что практически незаметно для глаза),
однако согласно зтой мере изображение будет сильно испорчено.
Мера, которую сейчас используют на практике, назьівается мерой отно-
шения сигнала к шуму (реак-іо-реак зі^паї-іо-поізе гаїіо - Р8ЬІК):
ч іп і 2552-л2
с?(х,у) = 10 1о810 —------
2 Ь-л)
М./.І
Данная мера, по сути, аналогична ереднеквадратичному отклонению,
однако пользоваться ей несколько удобнее за счет логарифмического мас-
штаба шкальї. Ей присущи те же недостатки, что и ереднеквадратичному
отклонению.
Лучше всего потери качества изображений оценивают напій глаза. От-
личньїм считается сжатие, при котором невозможно на глаз различить пер-
воначальное и распакованное изображения. Хорошим - когда сказать, какое
из изображений подвергалось ежатию, можно только сравнивая две нахо-
дящиеся рядом картинки. При дальнейшем увеличении степени сжатия, как
правило, становятся заметньї побочньїе зффектьі, характерньїе для данного
алгоритма. На практике, даже при отличном сохранении качества, в изо-
бражение могут бмть внесенм регулярньїе специфические изменения. По-
зтому алгоритми сжатия с потерями не рекомендуетея использовать при
сжатии изображений, которьіе в дальнейшем собираются либо печатать с
високим качеством, либо обрабатмвать программами распознавания обра-
зов. Неприятньїе зффектьі с такими изображениями, как мьі уже говорили,
могут возникнуть даже при простом масштабировании изображения.
305
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.ги/
Иетоди сжатия данних(7000+ файлов о сжатии)
Алгоритм иРЕб
ЗРЕО - один из новьіх и достаточно мощньїх алгоритмов. Практически
он является стандартом де-факто для полноцветнмх изображений [1]. Опе-
рирует алгоритм областями 8x8, на которьіх яркость и цвет меняются срав-
нительно плавно. Вследствие зтого при разложении матрицм такой. области
в двойной ряд по косинусам (см.1 формули ниже) значимими оказьіваютоя
только первьіе козффициентьі.. .Таким образом, сжатие в ЗРЕО осуществляе
ется за счет плавности изменения цветов в изображении.
Алгоритм разработан группой зкспертов в области фотографии специ-
ально для сжатия 24-битовьіх изображений. ЗРЕО - Зоіпі РЬоіодгарИіс Ехрегі
Огоир - подразделение в рамках І8О - Международной организации по
стандартизации. Название алгоритма читается как [']еі'ре§]. В целом алго-
ритм основан на дискретном косинусоидальном преобразований (в даль-
нейшем - ДКП), применяемом к матрице изображения для получения неко-
торой новой матрицм козффициентов. Для получения исходного изображе-
ния применяется обратное преобразование.
ДКП раскладьівает изображение по амплитудам некоторьіх частот. Та-
ким образом, при преобразований мм получаем матрицу, в которой многие
козффициентм либо близки, либо равньї нулю. Кроме того, благодаря несо-
вершенству человеческого зрения можно аппроксимировать козффициентм
более грубо без заметной потери качества изображения.
Для зтого используется квантование козффициентов (циапііхаііоп). В са-
мом простом случае - зто арифметический побитовьій сдвиг вправо. При
зтом преобразований теряется часть информации, но может достигаться
большая степень сжатия.
Как работает алгоритм
Итак, рассмотрим алгоритм подробнее (рис. 2.1). Пусть мм сжимаем 24-
битовое изображение.
Рис. 2.1. Конвейєр операции, используемшй в алгоритме
Шаг 1. Переводим изображение из цветового пространства КОВ, с ком-
понентами, отвечающими за красную (Кед), зеленую (Огееп) и синюю
306
К((р://уууууу.сотрге88Іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритми сжатия изображений
(Віие) составляющие цвета точки, в цветовое пространство УСгСЬ (иногда
назмвают ¥15У).
В нем ¥ - яркостная составляющая, а Сг, СЬ - компоненти, отвечающие
за цвет (хроматический красний и хроматический синий). За счет того, что
человеческий глаз менее чувствителен к цвету, чем к яркости, появляется
возможность архивировать массивм для Сг и СЬ компонент с большими по-
терями и, соответственно, большими ступенями сжатия,ЯІодобное преобра-
зование уже давно используется в телевидении. На сигндлм, отвечающие за
цвет, там вьіделяется более узкая полоса частот. г
У прощенно перевод из цветового пространства КСВ в цветовое про-
странство ¥СгСЬ можно представить с помощью матрицм перехода:
¥ 0.2990 0.5870 0.1140 п 0
Сг = 0.5000 -0.4187 -0.0813 * с + 128
СЬ -0.1687 -0.3313 0.5000 в 128
Обратное преобразование осуществляется умножением вектора ¥11У на
обратную матрицу.
В. 1 0 1.402 ¥ 0
6 = 1 -0.34414 -0.71414 * СЬ - 128
В 1 1.772 0 1 Сг 128
Шаг 2. Разбиваем исходное изображение на матрицм 8x8. Формируем из
каждой 3 рабочие матрицм ДКП - по 8 бит отдельно для каждой компонен-
ти. При больших степенях сжатия зтот шаг может внполняться чуть слож-
нее. Изображение делится по компоненте ¥, как и в первом случае, а для
компонент Сг и СЬ матрицм набираются через строчку и через столбец. То
єсть из исходной матрицм размером 16x16 получается только одна рабочая
матрица ДКП. При зтом, как нетрудно заметать, ми теряем 3/4 полезной
информации о цветовьіх составляющих изображения и получаем сразу сжа-
тие в 2 раза. Мьі можем поступать так благодаря работе в пространстве
¥СгСЬ. На результирующем КбВ-изображении, как показала практика, зто
сказьівается несильно.
Шаг 3. В упрощенном виде ДКП при п=8 можно представить так:
Пм, V] = | Х СХ Я’
4 і=о і=о
307
Книга написана коллективом ШІр:/Лууууу.сошрге88Іоп.ги/
(7000+ файлов о сжатии)
Методи сжатия данньїх
где
-4=, Гог и=0,
А(и)= 72
1, ґог и*0.
Применяем ДКП к каждой рабочей матрице. При зтом мм получаем
матрицу, в которой козффициентм в левом верхнем утлу соответствуют
низкочастотной составляющей изображения, а в правом нижнем - вьісоко-
частотной. Понятие частоти следует из рассмотрения изображения как дву-
мерного сигнала (аналогично рассмотрению звука как сигнала). Плавное
изменение цвета соответствует низкочастотной составляющей, а резкие
скачки - вьісокочастотной.
Шаг 4. Производим квантование. В принципе зто просто деление рабо-
чей матрицм на матрицу квантования позлементно. Для каждой компонен-
ти (¥, її и V) в общем случае задается своя матрица квантования ч[и,у] (да-
лее-МК).
Ку[и, у] = Іп(Є£ЄгКоипс1
ГГ[и,у]
ч<7[и,у]
На зтом шаге осуществляется управление степенью сжатия и происходят
самме большие потери. Поняттю, что, задавай МК с большими козффициента-
ми, мм получим больше нулей и, следовательно, большую степень сжатия.
В стандарт ІРЕО включень! рекомендованньїе МК, построеннме опит-
ним путем. Матрицм для большей или меньшей степени сжатия получают
путем умноження исходной матрицм на некоторое число £атта.
С квангованием связанм и специфические зффектн алгоритма. При
больших значеннях козффициента §атта потери в низких частотах могут
бьіть настолько велики, что изображение распадется на квадрати 8x8. Поте-
ри в високих частотах могут проявиться в так назмваемом зффекте Гиббса,
когда вокруг контуров с резким переходом цвета образуется своеобразньїй
"нимб".
Шаг 5. Переводим матрицу 8x8 в 64-злементньій вектор при помощи "зиг-
заг"-сканирования, т. е. берем злементм с индексами (0,0), (0,1), (1,0), (2,0)...
308
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритми сжатия изображений
Л.і 4гз 4.6 4.7
аМ а1/ зб 4.4 4.5 4.6 4.7
а а23 4,о
аз/ аЗЛ 4л • д
84.1 42 1 1
4л 4.1
4.0 4,і
а7.0 а7.1
Таким образом, в начале вектора мм получаем козффициентм матрицм,
соответствующие низким частотам, а в конце - високим.
Шаг 6. Свертмваем вектор с помощью алгоритма группового кодирова-
ния. При зтом получаем парм типа <пропустить, число>, где "пропустить"
является счетчиком пропускаеммх нулей, а "число" - значение, которое не-
обходимо поставить в следующую ячейку. Так, вектор 42 3000-2 00001
... будет свернут в парм (0,42) (0,3) (3,-2) (4,1)....
Шаг 7. Свертмваем получившиеся парм кодированием по Хаффману с
фиксированной таблицей.
Процесе восстановления изображения в зтом алгоритме полностью сим-
метричен. Метод позволяет сжимать некоторне изображения в 10-15 раз
без серьезньїх потерь.
Существеннмми положительньїми сторонами алгоритма является то, что:
задаетея степень сжатия;
вмходное цветное изображение может иметь 24 бита на точку.
Отрицательннми сторонами алгоритма является то, что:
При повьппении степени сжатия изображение распадается на отдельнме
квадрати (8x8). Зто связано с тем, что происходят большие потери в
низких частотах при квантовании и восстановить исходнме данние ста-
новитея невозможно.
Проявляется зффект Гиббса- ореоли по границам резких переходов
цветов.
Как уже говорилось, стандартизован ЗРЕС относительно недавно -
в 1991 г. Но уже тогда существовали алгоритми, ежимающие сильнеє при
меньших потерях качества. Дело в том, что действия разработчиков стан-
дарте били ограниченьї мощностью существовавшей на тот момент техни-
309
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.пі/
(7000+ файлов о сжатии)
Методи сжатия данньїх
ки. То єсть даже на ПК алгоритм должен бьіл работать меньше минути на
среднем изображении, а его аппаратная реализация должна бить относи-
тельно простой и дешевой. Алгоритм должен бьіл бить симметричньїм
(время разархивации примерно равно времени архивации).
Вмполнение последнего требования сделало возможньїм появление та-
ких устройств, как цифровьіе фотоаппаратм, снимающие 24-битовме фото-
графии на 8-256 Мб флеш-карту: И&том зта карта вставляется в разьем на
вашем ноутбуке и Соответствующая програмна позволяет считать изобра-
жения. Не правда Йи, если би алгоритм бьіл несимметричен, било би не-
приятно долго ждать, пока аппарат "перезарядится" - сожмет изображение.
Не очень приятньїм свойством ІРЕО является также то, что нередко го-
ризонтальніше и вертикальньїе полоси на дисплее абсолютно не видни и мо-
гут проявиться только при печати в виде муарового узора. Он возникает при
наложений наклонного растра печати на горизонтальние и вертикальньїе
полоси изображения. Из-за зтих сюрпризов ІРЕО не рекомендуется активно
использовать в полиграфии, задавая високие козффициентьі матрицм кван-
тования. Однако при архивации изображений, предназначеннмх для про-
смотра человеком, он на данньїй момент незаменим.
Широкеє применение 1РЕО долгое время сдерживалось, пожалуй, лишь
тем, что он оперирует 24-битовьіми изображениями. Позтому для того, что-
бм с приемлемнм качеством посмотреть картинку на обичном мониторе в
256-цветной палитре, требовалось применение соответствующих алгорит-
мов и, следовательно, определенное время. В приложениях, ориентирован-
ньіх на придирчивого пользователя, таких, например, как игрм, подобнме
задержки неприемлемм. Кроме того, если имеющиеся у вас изображения,
допустим, в 8-битовом формате ОІГ перевести в 24-битовьій ІРЕО, а потом
обратно в ОІГ для просмотра, то потеря качества произойдет дваждьі при
обоих преобразованиях. Тем не менее вьіигрьіш в размерах архивов зачас-
тую настолько велик (в 3-20 раз), а потери качества настолько мали, что
хранение изображений в ЗРЕО оказьівается очень зффективньїм.
Несколько слов необходимо сказать о модификациях зтого алгоритма.
Хотя ІРЕО и является стандартом 180, формат его файлов не бьіл зафикси-
рован. Пользуясь зтим, производители создают свои, несовместимме между
собой формати и, следовательно, могут изменить алгоритм. Так, внутрен-
ние таблицьі алгоритма, рекомендованньїе І8О, заменяются ими на свои
собственнме. Кроме того, легкая неразбериха присутствует при заданий
степени потерь. Например, при тестировании вьіясняется, что "отличное"
качество, "100%" и "10 баллов" дают существенно различающиеся картин-
ки. При зтом, кстати, "100%" качества не означает сжатия без потерь.
Встречаются также вариантьі ІРЕО для специфических приложений.
310
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритми сжатия изображений
Как стандарт 180 )РЕО начинает все шире использоваться при обмене
изображениями в компьютерньїх сетях. Поддерживается алгоритм ІРЕС в
форматах Риіск Тіте, РозіЗсгірі Ьєуєі 2, ТіГГ 6.0 и на данньїй момент зани-
мает видное место в системах мультимедиа.
Характеристики алгоритма ^ЕС:
Е1. Степець сжатия: 2-200 (задается здльзователем).
Класе изображений: полноцветньїе битовьіе изображения или изо-
бражения в градациях серого без резких переходов цветов.(фотографии).
Симметричность: 1.
Характерньїе особенности: в некрторьіх случаях алгоритм создает
"ореол" вокруг резких горизонтальних и вертикальних границ в изобра-
жении (зффект Гиббса). Кроме того, при високой степени сжатия изо-
бражение распадается на блоки 8x8 пикселов.
Фрактапьньїй алгоритм
ИДЕЯ МЕТОДА
Фрактальное сжатие основано на том, что ми представляєм изображение
в более компактной форме - с помощью козффициентов системи итерируе-
мих функций (Кегаіей Гипсііоп Зузіет - далее по тексту как ІГ8). Прежде
чем рассматривать сам процесе архивации, разберем, как ІГ8 строит изо-
бражение, т. е. процесе декомпрессии.
Строго говоря, ІР8 представляет собой набор трехмерньїх аффиннмх
преобразований, в нашем случае переводящих одно изображение в другеє.
Преобразованию подвергаютея точки в трехмерном пространстве (х_коор-
дината, у_координата, яркость).
Наиболее наглядно зтот процесе продемонстрировал М. Г. Вагпзіеу в
книге [22]. Там введено понятие "фотокопировальной машини", состоящей
из зкрана, на котором изображена исходная картинка, и системи линз, про-
ецирующих изображение на другой зкран (рис. 2.2):
линзм могут проецировать часть изображения произвольной форми в
любое другеє место нового изображения;
обпасти, в которие проецируютея изображения, не пересекаются;
линза может менять яркость и уменьшать контрастность;
линза может зеркально отражать и поворачивать свой фрагмент изо-
бражения;
линза должна масштабировать (причем только уменьшая) свой фраг-
мент изображения.
311
Книга написана коллективом 1ійр:/Лууууу.сотрге88Іоп.пі/
Методи сжатия данньїх <7000+ файлов о сжатии)
Рис. 2.2. Машина Барнсли
Исходное
изображение
Получаемое
йзббражение
Расставляя линзьі и меняя их характеристики, мьі можем управлять по-
лучаемьім изображением. Одна итерация работьі машини заключается в
том, что по исходному изображению с помощью проектирования строится
новое, после чего новое берется в качестве исходного. Утверждается, что в
процессе итераций мм получим изображение, которое перестанет изменять-
ся. Оно будет зависеть только от расположения и характеристик линз и не
будет зависеть от исходной картинки. Зто изображение назьівается непод-
вижной точкой или аттрактором данной ІР8. Соответствующая теория
гарантирует наличие ровно одной неподвижной точки для каждой ІР8.
Поскольку отображение линз является сжимающим, каждая линза в явном
виде задает самоподобньїе области в нашем изображении. Благодаря самоподо-
бию мм получаем сложную структуру изображения при любом увеличении.
Таким образом, интуитивно поняттю, что система итерируеммх функций задает
фрактал (несгрого - самоподобньтй математический обьекг).
Наиболее известнм два изображения, полученнме с помощью ІР8: тре-
угольник Серпинского (рис. 2.3) и папоротник Барнсли (рис. 2.4).
Треугольник Серпинского задается тремя, а папоротник Барнсли - че-
тьірьмя аффинньїми преобразованиями (или, в нашей терминологии, "лин-
зами"). Каждое преобразование кодируется буквально считанньїми байтами,
в то время как изображение, построенное с их помощью, может занимать и
несколько мегабайт.
312
Й11р:/Лууууу.сотрге88іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритми/ сжатия изображений
Рис. 2.4. Папоротник Барнсли
Упражнение. Укажите в изображении 4 обпасти, обьединение которих покри-
вало бьі все изображение и каждая из которих била би подобна всему зо-
браженню (не забивайте о стебле папоротника).
Из вьішесказанного становится поняттю, как работает архиватор и поче-
му ему требуетея так много времени. Фактически фрактальная компрессия -
зто поиск самоподобнмх областей в изображении и определение для них
параметров аффинньїх преобразований (рис. 2.5).
Рис. 2.5. Самоподобньїе обпасти изображения
В худшем случае, если не будет применяться оптимизирующий алго-
ритм, потребуетея перебор и сравнение всех возможньїх фрагментов изо-
бражения разного размера. Даже для небольших изображений при учете
дискретносте мьі получим астрономическое число перебираемьіх вариан-
тов. Причем даже резкое сужение классов преобразований, например за счет
313
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.пі/
Методьі сжатия данньїх <7000+ файлов о сжатии)
масштабирования только в определенное количество раз, не дает заметного
вьіигрьіша во времени. Кроме того, при зтом теряется качество изображе-
ния. Подавляющее большинство исследований в области фрактальной ком-
прессии сейчас направлень! на уменьшение времени архивации, необходи-
мого для получения качественного изображения.
Далее приводятся основньїе определения и теореми, на которих базиру-
ется фрактальная компрессия. Зтот материал более детально и с доказа-
тельствами рассматривается в [3] и [4].
Определение. Преобразование К2 -> К2, представимое в виде
М^х) = XV
\У) Iе І
где а, Ь, с, фе,/- действительние числа и (х у) є К2 - назьівается двумер-
ньім аффинньїм преобразованием.
Определение. Преобразование и>: К3 -> К3, представимое в виде
ҐхУ (а Ь А (х\ (еУ
и'(х) = м' у = с Л и х у + /
<2; 5 Р) І2^ И.
\Ч)
тр.е а, Ь, с, ф е,/, р, д, г, з, і, и- действительние числа и (х у х) є К3, на-
зьівается трехмерньїм аффинньїм преобразованием.
Определение. Пусть / :Х->Х - преобразование в пространстве X.
Точка Ху-єХ, такая, что /(х/) = х/, назьівается неподвижной точкой
(аттрактором) преобразования.
Определение. Преобразование /:Х-»Х в метрическом пространстве
(X, 4) називаетея ежимающим, если существует число 8: 0 £ з < 1, такое,
что
4(/(х),Л.У))^з-<і(х,у), Ух.уєХ.
Замечание. Формально мьі можем использовать любое ежимающее ото-
бражение при фрактальной компрессии, но реально используются лишь трех-
мерньїе аффинньїе преобразования с достаточно сильньїми ограничениями на
козффициентьі.
Теорема. (О ежимающем преобразований.) Пусть /: X —> X - ежи-
мающее преобразование в полном метрическом пространстве (X, ф. Тогда
существует в точности одна неподвижная точка х{ є X отого преобразо-
314
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритми сжатия изображений
вания и для любой точки хєХ последовательность = 0,1,2...} схо-
дишся к х,.
Более общая формулировка зтой теореми гарантирует нам сходимость.
Определение. Изображением назьівается функция 8, определенная на
единичном квадрате и принимающая значення от 0 до 1 или
$(х,у)є[0...1] Ух,у є[0...1].
Пусть трехмерное аффинное преобразование и;: К3 -> К3, записано в виде
и опредслено на компакгном подмножестве £>. декартова квадрата
[0...1]х[0... 1] (мм пользуемся особмм видом матрицм преобразования, чтобм
уменьшить размерность областе определения с К3 до К2). Тогда оно переве-
дет часть поверхности 5 в область Я,, расположенную со сдвигом (е^ и по-
воротом, заданнмм матрицей
'а Ь (Г
с (і 0 .
<° 0 °,
При зтом, если интерпретировать значення функции 5(х,у) є[0...1] как
яркость соответствующих точек, она уменьшится в р раз (преобразование
обязано бмть сжимающим) и изменится на сдвиг ц.
Определение. Конечная совокупность IV сжимающих трехмернмх аффин-
нмх преобразований м>., определеннмх на областях £7, таких, что = Я,
и Я, суК^Ф 'і і і , назнвается системой итерируемих функции (ІР8).
Системе итерируеммх функций однозначно ставятся в соответствие не-
подвижная точка- изображение. Таким образом, процесе компрессии за-
ключаетея в поиске козффициентов системи, а процесе декомпрессии - в
проведений итераций системи до стабилизации полученного изображения
(неподвижной точки ІГ8). На практике бмвает достаточно 7-16 итераций.
Областе Я, в дальнейшем будут именоваться ранговими, а областе £), -
доменними (рис. 2.6).
315
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.пі/
Методьі сжатия данньїх (7000+ файлово сжатии)
ПОСТРОЄНИЕ АЛГОРИТМА
Как уже стало очевидним из изложенного вьіше, основной задачей при
компрессии фрактальньїм алгоритмом является нахождение соответствую-
щих аффинньїх преобразований. В самом общем случае ми можем перево-
дить любие по размеру и форме области изображения, однако в зтом случае
получается астрономическое число перебираемьіх вариантов разньїх фраг-
ментов, которое невозможно обработать на текущий момент даже на супер-
компьютере.
В учебном варианте алгоритма, изложенном далее, сделаньї следую-
щие ограничения на области:
1. Все области являются квадратами со сторонами, параллельньїми сто-
ронам изображения. Зто ограничение достаточно жесткое. Фактически
мм собираемся аппроксимировать все многообразие геометрических фи-
гур лишь квадратами.
2. При переводе доменной области в ранговую уменьшение размеров про-
изводится ровно в 2 раза (см. рис. 2.6). Зто существенно упрощает как
компрессор, так и декомпрессор, так как задача масштабирования не-
больших областей является нетривиальной.
3. Все доменньїе блоки - квадрати и имеют фиксированньїй размер. Изо-
бражение равномерной сеткой разбивается на набор доменних блоков.
4. Доменнне области берутся "через точку" и по X и по У, что сразу
уменьшает перебор в 4 раза.
5. При переводе доменной области в ранговую поворот куба возможен
только на 0, 90, 180 или 270п. Также допускается зеркальное отражение.
Общее число возможних преобразований (считая пустое)- 8.
6. Масштабирование (сжатие) по вертикали (яркости) осуществляется
в фиксированное число раз - 0.75.
Зти ограничения позволяют:
1. Построить алгоритм, для которого требуется сравнительно малое число
операций даже на достаточно больших изображениях.
316
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритиьі сжатия изображений
2. Очень компактно представить данньїе для записи в файл. Нам требуется
на каждое аффинное преобразование в ІГ8:
* Два числа для того, чтобм задать смещение доменного блока. Если
ми ограничим входньїе изображения размером 512x512, то достаточ-
но будет по 8 бит на каждое число.
* Три бита для того, чтобьі задать преобразование симметрии при пе-
реводе доменного блока в ранговий.
♦ 7-9 бит для того, чтобм задать сдвиг по яркости при переводе.
Информацию о размере блоков можно хранить в заголовке файла. Таким
образом, мм затратили менее 4 байт на одно аффинное преобразование.
В зависимости от того, каков размер блока, можно вмсчитать, сколько бло-
ков будет в изображении. Таким образом, мм можем получить оценку сте-
пени компрессии.
Например, для файла в градациях серого 256 цветов 512x512 пикселов
при размере блока 8 пикселов аффиннмх преобразований будет 4096
(512/8-512/8). На каждое потребуется 3.5 байта. Следовательно, если исход-
нмй файл занимал 262144 (512-512) байт (без учета заголовка), то файл с ко-
зффициентами будет занимать 14336 байт. Степень сжатия- 18 раз. При
зтом мм не учитмваем, что файл с козффициентами гоже может обладать
избьггочностью и сжиматься без потерь с помощью, например,
Отрицательнме сторони предложеннмх ограничений:
1. Поскольку все областе являются квадратами, невозможно воспользо-
ваться подобием обьекгов, по форме далеких от квадратов (которме
встречаются в реальних зображеннях достаточно часто.)
2. Аналогично мм не сможем воспользоваться подобием обьекгов в изобра-
жении, козффициент подобия между которьіми сильно отличается от двух.
3. Алгоритм не сможет воспользоваться подобием обьекгов в изображе-
нии, угол между котормми не кратен 90°.
Такова плата за скорость компрессии и за простоту упаковки козффи-
циентов в файл.
Сам алгоритм упаковки сводится к перебору всех доменних блоков и
подбору для каждого соответствующего ему рангового блока. Ниже приво-
дится схема зтого алгоритма.
£ог (аіі гапде Ьіоскз) {
тіп_<іізСапсе = МахітитОізСапсе;
= ітаде->СоруВ1оск(і,і);
£ог (аіі дотаіп Ьіоскз) { // С поворотами и отр.
сиггепС=Координатьі тек. преобразования;
Б=ітаде->СоруВ1оск (сиггеп!:) ;
317
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.ги/
Метод» сжатия данньїх (7000+ файлов о сжатии)
сиггеп£_сІІ5(:апсе = .Ь2йіз£апсе(В) ;
і£ (сиггепЬ_<ЗізІ:апсе < тіп_сіізЬапсе) {
// Если козффициентм ЬезС. хуже:
тіп_йіз£.апсе = сиггепС_йіз£апсе;
ЬезЬ = сиггепЬ;
}
} // Иех£ йотаіп Ьіоск
2аVе_Сое££ісіепЬ.5_Ло_£і1е (ЬезЬ) ;
} // Мех£ гапде Ьіоск
Как видно из приведенного алгоритма, для каждого рангового блока до-
лаєм его проверку со всеми возможньїми доменними блоками (в том числе
с прошедшими преобразование симметрии), находим вариант с наименьшей
мерой Ь2 (наименьшим среднеквадратичньїм отклонением) и сохраняем ко-
зффициентм зтого преобразования в файл. Козффициентм - зто (1) коорди-
нати найденного блока, (2) число от 0 до 7, характеризующее преобразова-
ние симметрии (поворот, отражение блока), и (3) сдвиг по яркости для зтой
парм блоков. Сдвиг по яркости вмчисляется как.
п п п п л
где Гу - значення пикселов рангового блока (А), а - значення пикселов
доменного блока (р). При зтом мера считается как
^(/г,о) = ££(^+9-о.75.^)2.
/«1 у=1
Мм не вмчисляем квадратного корня из Ь2 мерм и не делим ее на п, по-
скольку даннме преобразования монотонньї и не помешают нам найти зкс-
тремум, однако мм сможем вьшолнять на две операции меньше для каждого
блока.
Посчитаем количество операции, нсобходиммх нам для сжатия изобра-
жения в градациях серого 256 цветов 512x512 пикселов при размере блока
8 пикселов: Часть программм £ог (аіі гапде Ьіоскз) £ог (аіі йотаіп Ьіоскз) + зупипеЬгу Ьгапз£огтаі:іоп Вьічисление д и сІ(К,О) Число операции 4096 (=512/8-512/8) 492032 (=(512/2-8)* (512/2-8)*8) > 3*64 операций "+" > 2*64 операций
Итог: > 3* 128.983.236.608 операций "+" > 2* 128.983.236.608 операций
318
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритми сжатия изображений
Таким образом, нам удалось уменьшить число операций алгоритма ком-
прессии до вполне вмчисляемьіх величин.
Схема алгоритма декомпрессии изображений
Декомпрессия алгоритма фрактального сжатия чрезвмчайно проста. Не-
обходимо провести несколько итераций трехмерньїх аффинньїх преобразо-
ваний, козффициентьі которьіх бьіли полученм на зтапе компрессии.
В качестве начального может бьіть взято абсолютно любое изображение
(например, абсолютно черное), поскольку соответствующий математиче-
ский аппарат гарантирует нам сходимость последовательности изображе-
ний, получаемьіх в ходе итераций ІР8, к неподвижному изображению
(близкому к исходному). Обмчно для зтого достаточно 16 итераций.
Прочитаєм из файла козффициентьі всех блоков;
Создадим черное изображение нужного размера;
ПпСії(изображение не станет неподвижним){
Рог(ечегу гапде (К)){
Ц=ітаде->СоруВ1оск (П_соог<3_£ог_К) ;
Гог(ечегу ріхе1(і,5) іп СИе Ь1оск{
Під = 0.75£>іу + д;
} //ИехС ріхеї
} //МехС Ьіоск
}//ПпСі1 епй
Поскольку мьі записмвали козффициентм для блоков Кц (которме, как
ми оговорили, в нашем частном случае являются квадратами одинакового
размера) последовательно, то получается, что ми последовательно заполня-
ем изображение по квадратам сетки разбиения использованием аффинного
преобразования.
Как можно подсчитать, количество операций на 1 пиксел изображения в
градациях серого при восстановлении необмчайно мало (14 операций сло-
жения "+" и N операций умноження где N - количество итераций, т. е.
7-16). Благодаря отому декомпрессия изображений для фрактального алго-
ритма проходит бистреє декомпрессии, например, для алгоритма 1РЕО.
В простой реализации ДРЕО на точку приходится 64 операции сложения "+"
и 64 операции умноження При реализации бистрого ДКП можно полу-
пить 7 сложений и 5 умножений на точку, но зто без учета шагов КЬЕ,
квантования и кодирования по Хаффману. При зтом для фрактального ал-
горитма умножение происходит на рациональное число, одно для каждого
блока. Зто означает, что мьі можем, во-первьіх, использовать целочислен-
ную рациональную арифметику, которая бистреє арифметики с плавающей
точкой. Во-вторнх, можно использовать умножение вектора на число - бо-
лее простую и биструю операцию, часто закладмваемую в архитектуру
процессора (процессорм 861, Іпіеі ММХ, векторнме операции АіЬІоп
319
Книга написана коллективом 1Шр:/Лууууу.сотрге88Іоп.пі/
Методьі сжатия данньїх(7000+ файлов о сжатии)
и т. д.). Для полноцветного изображения ситуация качественно не изменяет-
ся, поскольку перевод в другое цветовое пространство используют оба ал-
горитма.
Оценка потерь и способьі их регулирования
При кратком изложении упрощенного варианта алгоритма бьіли пропу-
щеньї многие важнме вопросьі. Например, что делать, если алгоритм не мо-
жет подобрать для какого-либо фрагмента изображения подобнмй ему. Дос-
таточно очевиднеє решение- разбить зтот фрагмент на более мелкие
и попитаться поискать для них. В то же время понятно, что зту процедуру
нельзя повторять до бесконечности, иначе количество необходимнх преоб-
разований станет так велико, что алгоритм перестанет бить алгоритмом
компрессии. Следовательно, мьі допускаєм потери в какой-то части изобра-
жения.
Для фрактального алгоритма компрессии, как и для других алгоритмов
сжатия с потерями, очень важньї механизмм, с помощью котормх можно бу-
дет регулировать степень сжатия и степень потерь. К настоящему времени
разработан достаточно большой набор таких методов. Во-первьіх, можно ог-
раничить количество аффиннах преобразований, заведомо обеспечив степень
сжатия не ниже фиксированной величиньї. Во-вторьіх, можно потребовать,
чтобьі в ситуации, когда разница между обрабатьіваемьім фрагментом и наи-
лучшим его приближением будет вьіше определенного порогового значення,
зтот фрагмент дробилея обязательно (для него обязательно заводитея не-
сколько линз). В-третьих, можно запретить дробить фрагмента размером
меньше, допустим, четьірех точек. Изменяя пороговме значення и приоритет
зтих условий, мм будем очень гибко управлять козффициентом компрессии
изображения в диапазоне от побитового соответствия до любой степени сжа-
тия. Заметим, что зта гибкость будет гораздо ваше, чем у ближайшего "кон-
курента" - алгоритма ІРЕС.
Характеристики фрактального алгоритма:
Степень сжатия: 2-2000 (задаетея пользователем).
Класе изображений: полноцветнае 24 битовае изображения или изо-
бражения в градациях серого без резких переходов цветов (фотографии).
Желательно, чтоба области большей значимосте (для восприятия) бали
более контрастами и резкими, а области меньшей значимосте - некон-
трастнами и размьітами.
Симметричность: 100-100 000.
Характерньїе особенности: может свободно масштабировать изо-
бражение при разжатии, увеличивая его в 2-4 раза без появлення "лест-
ничного зффекта". При увеличении степени компрессии появляетея
"блочнай" зффект на границах блоков в изображении.
320
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритми/ сжатия изображений
Рекурсивний (волновой) алгоритм
Английское название рекурсивного сжатия - ууауеіеі. На русский язьік
оно переводится как волновое сжатие, как сжатие с использованием вспле-
сков, а в последнее время и как взйвлет-сжатие. Зтот вид сжатия известен
довольно давно и напрямую исходит из идеи использования когерентности
областей. Ориентирован алгоритм на цветньїе и черно-бельїе изображения с
плавними переходами. Идеален для картинок типа рентгенрвских снимков.
Степень сжатия задается и варьируется в пределах 5-100. При попштке за-
дать больший козффициент на резких границах, особенно проходящих по
диагонали, проявляется лестничннй зффект- ступеньки разной яркости
размером в несколько пикселов.
Идея алгоритма заключается в том, что ми сохраняем в файл разницу -
число между средними значеннями соседних блоков в изображенйи, кото-
рая обьічно принимает значення, близкие к нулю.
Так, два числа и а2,+і всегда можно представить в виде Ь1 г^ац+ац-ц)/!
и і2,=(а2|-а2;+і)/2. Аналогично последовательность а, может бьггь попарно
переведена в последовательность Ь12,.
Разберем конкретний пример: пусть ми сжимаем строку из восьми зна-
чений яркости пикселов (а,): (220, 211, 212, 218, 217, 214, 210, 202). Ми по-
лупим следующие последовательности Ь'і и Ь2,: (215.5, 215, 215.5, 206) и
(4.5, -3, 1.5,4). Заметам, что значення Ь2,- достаточно близки к нулю. Повто-
рим операцию, рассматривая Ь1, как а(. Данное действие вьшолняется как би
рекурсивно, откуда и название алгоритма. Ми полупим из (215.5,215,215.5,
206): (215.25, 210.75) (0.25, 4.75). Полученнме козффициентм, округлив до
цельїх и сжав, например, с помощью алгоритма Хаффмана с фиксирован-
ньіми таблицами, ми можем поместить в файл.
Заметам, что ми применяли наше преобразование к цепочке только 2 ра-
за. Реально ми можем позволить себе применение хуауеіеі-преобразования
4-6 раз. Более того, дополнительное сжатие можно полупить, используя
таблици алгоритма Хаффмана с неравномерним шагом (т. е. нам придется
сохранять код Хаффмана для ближайшего в таблице значення). Зта приеми
позволяют достань заметних степеней сжатия.
'Й&ч Упражнение. Мьі восстановили из файла цепочку (215, 211) (0, 5) (5, -3, 2, 4)
(см. пример). Постройте строку из восьми значений яркости пикселов, которую
воссоздаст алгоритм волнового сжатия.
Алгоритм для двумернмх данньїх реализуется аналогично. Если у нас
єсть квадрат из четирех точек с яркостями ал_2у, а2м,2р а2і,2)+\ и ах+і.і/н, то
321
Книга написана коллективом Шір:/Лууууу.сотрге88Іоп.пі/
Методьі сжатия данньїх (7000+ файлов о сжатии)
= (а2і.іі + аін\лі + агілз*\ + а2<+і,2/+і) /4,
= (аНЛ) + а2і+\Лі ~а2іЛІ*\ ~ а2і+І,2/+1) !
^і.і = (а2іЛІ ~а2МЛІ +а2і,2/+І “ а2/+1,2/Ч1)^>
&/./ = (а2/,2> —а2і+І,2; -а2і.2;+1 + а2і+1,2/+1)
Используя зти формули, ми для изображения 512x512 пикселов полу-
пим после первого преобразования 4 матрицм размером 256x256 злементов
(рис. 2.7).
Рис. 2.7. Вид двумерного ^теїеі-преобразования
В первой, как легко догадаться, будет храниться уменьшенная копия
изображения. Во второй - усредненньїе разности пар значений пикселов по
горизонтали. В третьей - усредненнме разности пар значений пикселов по
вертикали. В четвертей - усредненньїе разности значений пикселов по диа-
гонали. По аналогии с двумернмм случаем ми можем повторить наше пре-
образование и полупить вместо первой матрицьі 4 матрицм размером
128x128. Повторив наше преобразование в третий раз, мм полупим в итоге:
4 матрицм 64x64, 3 матрицьі 128x128 и 3 матрицм 256x256. На пракгике
при записи в файл значеннями, получаемьіми в последней строке (&*,),
обмчно пренебрегают (сразу получая вьіигрьіш примерно на треть размера
файла-1-1/4-1/16-1/64...).
К достоинствам зтого алгоритма можно отнести то, что он очень легко
позволяет реализовать возможность постепенного "проявлення" изображе-
ния при передане изображения по сети. Кроме того, поскольку в начале
322
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритми сжатия изображений
изображения мм факгически храним его уменьшенную копию, упрощается
показ "огрубленного" изображения по заголовку.
В отличие от 1РЕО и фрактального алгоритма данньїй метод не опериру-
ет блоками, например, 8x8 пикселов. Точнеє, мьі оперируем блоками 2x2,
4x4, 8x8 и т. д. Однако за счет того, что козффициентьі для зтих блоков мм
сохраняем независимо, мьі можем достаточно легко избежать дроблення
изображения на "мозаичнше" квадрати.
Характеристики волнового алгоритма:
Степень: 2-200 (задается пользователем).
Класе изображений: как у фрактального и ДРЕО.
Симметричность: ~1.5.
Характерньїе особенности: кроме того, при вьісокой степени сжатия
і изображение распадается на отдельньїе блоки..
*............................— ...........»».......>.................
Алгоритм иРЕЄ 2000
Алгоритм 1РЕО 2000 разработан той же группой зкепертов в области
фотографии, что и ІРЕО. Формирование 1РЕО как международного стан-
дарта бмло закопчено в 1992 г. В 1997 г. стало ясно, что необходим новий,
более гибкий и мощнмй стандарт, которьій и бьіл доработан к зиме 2000 г.
Основнме отличия алгоритма в ІРЕО 2000 от алгоритма в ІРЕО заключают-
ся в следующем.
Лучшее качество изображения при сильной степени сжатия. Или,
что то же самое, ббльшая степень сжатия при том же качестве для високих
степеней сжатия. Факгически зто означает заметное уменьшение размеров
графики "МеЬ-качества", используемой большинством сайтов.
Поддержка кодирования отдельньїх областей с лучшим качеством.
Известно, что отдельние области изображения критичнм для восприятия
человеком (например, глаза на фотографии), в то время как качеством дру-
гих можно пожертвовать (например, задним планом). При "ручной" опти-
мизации увеличение степени сжатия проводитея до тех пор, пока не будет
потеряно качество в какой-то важной части изображения. Сейчас появляет-
ся возможность задать качество в критических областях, ежав остальнме
области сильнеє, т. є. ми получаем еще большую окончательную степень
сжатия при субьективно равном качестве изображения.
Основной алгоритм сжатия заменен на ууауеіеі. Помимо указанного
повишения степени сжатия зто позволило избавиться от 8-пиксельной
блочности, возникающей при повьішении степени сжатия. Кроме того,
плавное проявление изображения теперь изначально заложено в стандарт
323
Книга написана коллективом 1ііір:/Лууууу.сотрге88Іоп.пі/
Методи сжатия дмньїх (7000+ файлов о сжатии)
(Рго§ге88ІУЄ 1РЕС, активно применяемнй в Интернете, появился много позд-
нее )РЕО).
Для повьшіения степени сжатия в алгоритме используется арифме-
тическое сжатие. Изначально в стандарте ДРЕС также бьіло заложено ариф-
метическое сжатие, однако позднее оно бьіло заменено менее зффективньїм
сжатием по Хаффману, поскольку арифметическое сжатие бмло защищено
патентами. Сейчас срок действия основного патента истек и появилась воз-
можность улучшить алгоритм.
Поддержка сжатия без потерь. Помимо ііривьічного сжатия с потерями
новий ІРЕС теперь будет поддерживать и сжатие без потерь. Таким обра-
зом, становится возможньїм использование ДРЕО для сжатия медицинских
изображений, в полиграфии, при сохранении текста под распознавание ОСК
системами и т. д.
Поддержка сжатия 1-битових (2-цветньіх) изображений. Ддя сохра-
нения 1-битовмх изображений (рисунки тушью, отсканированньїй текст и
т. п.) ранее повсеместно рекомендовался формат ОІЕ, поскольку сжатие с
использованием ДКП весьма незффективно для изображений с резкими пе-
реходами цветов. В ДРЕ6 при сжатии 1-битовая картинка приводилась к 8-
битовой, т. е. увеличивалась в 8 раз, после чего делалась попьггка сжимать,
нередко менее чем в 8 раз. Сейчас можно рекомендовать 5РЕО 2000 как
унивсрсальньїй алгоритм.
На уровне формата поддерживается прозрачность. Плавно накладм-
вать фон при создании М(5¥А¥-страниц теперь можно будет не только в ОІЕ,
но и в ДРЕО 2000. Кроме того, поддерживается не только І бит прозрачно-
сти (пиксел прозрачен/непрозрачен), а отдельньїй канал, что позволит зада-
вать плавний переход от непрозрачного изображения к прозрачному фону.
Кроме того, на уровне формата поддерживаются включение в изображе-
ние информации о копирайте, поддержка устойчивости к битовьім ошибкам
при передаче и широковещании, можно запрашивать для декомпрессии или
обработки внешние средства (ріид-іпз), можно включать в изображение его
описание, информацию для поиска и т. д.
Идея алгоритма
Базовая схема 1РЕО 2000 очень похожа на базовую схему ДРЕС. Отличия
заключаются в следующем:
вместо дискретного косинусного преобразования (ПСТ) используется
дискретное ууауеіеі -преобразование (ПХУТ);
вместо кодирования по Хаффману используется арифметическое сжатие;
в алгоритм изначально заложено управление качеством областей изо-
бражения;
324
Шір:/Лулулу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритиьі сжатия изображений
не используется явно дискретизация компонент І) и V после преобразо-
вания цветовьіх пространств, поскольку при В\УТ можно достичь того
же результата, но более аккуратно.
Рассмотрим алгоритм по шагам (рис. 2.8).
Рис. 2.8. Конвейєр операций, используемьій в алгоритме ЗРЕО 2000
Шаг 1. В ДРЕО 2000 предусмотрен сдвиг яркости (ОС ієуєі зЬій) каждой
компоненти (КОВ) изображения перед преобразованием в ¥ІДУ. Зто дела-
ется для вьіравнивания динамического диапазона (приближения к нулю гис-
тограммм частот), что приводит к увеличению степени сжатия. Формулу
преобразования можно записать как:
І\х,у) = І(х,у)-25Т-'.
Значение степени 8Т для каждой компоненти Я, О и В своє (определяет-
ся при сжатии компрессором). При восстановлении изображения виполня-
ется обратное преобразование:
Г(х,у) = І(х,у) + 25т~1-
Шаг 2. Переводим изображение из цветового пространства КСВ с ком-
понентами, отвечающими за красную (Кед), зеленую (Огееп) и синюю
(Віие) составляющие цвета точки, в цветовое пространство ¥ІДУ. Зтот шаг
аналогичен ЗРЕО (см. матрицн преобразования в описании ДРЕО), за тем
исключением, что кроме преобразования с потерями предусмотрено также
и преобразование без потерь. Его матрица вмглядит так:
1 К + 2О + В Г
I 4 ]
К-6
в-с
Обратное преобразование осуществляется с помощью обратной матрицм:
в
с
в
ц + с
V +О
325
Книга написана коллективом ййр:/Лууулу.сотрге88Іоп.ги/
Методьі сжатия данньїх (7000+ файлов о сжатии)
Шаг 3. Дискретное ууауеіеі-преобразование (П\УТ) также может бьіть
двух видов - для случая сжатия с потерями и для сжатия без потерь. Его ко-
зффициентм задаются табл. 2.1 и 2.2.
Таблица 2.1. Козффициентьі для сжатия с потерями
Козффициентьі при упаковке
І Низкочастотньїе козффициентьі 6д(/) Вьісокочастотньїе козффициентьі МО
0 1.115087052456994 0.6029490182363579
±1 0.5912717631142470 -0.2668641184428723
±2 -0.05754352622849957 -0.07822326652898785
±3 -0.09127176311424948 0.01686411844287495
±4 0 0.02674875741080976
Другие і 0 0
Козффициентьі при распаковке
І Низкочастотньїе козффициентьі ді(і) Вьісокочастотньїе козффициентьі дн(і)
0 0.6029490182363579 1.115087052456994
±1 -0.2668641184428723 0.5912717631142470
±2 -0.07822326652898785 -0.05754352622849957
±3 0.01686411844287495 -0.09127176311424948
±4 0.02674875741080976 0
Другие і 0 0
Таблица 2.2. Козффициенти для сжатия без потерь
При упаковке При распаковке
І Низкочастотньїе козффициентьі Вьісокочастот- ньіе козффици- ентьі М») Низкочастотньїе козффициентьі &(') Вьісокочастот- ньіе козффици- ентьі МО
0 6/8 1 1 6/8
±1 2/8 -1/2 1/2 -2/8
±2 -1/8 0 0 -1/8
Само преобразование в одномерном случае представляет собой скаляр-
ное произведение козффициентов фильтра на строку преобразуемьіх значе-
ний (в нашем случае - на строку изображения). При зтом четньїе вьіходя-
щие значення формируются с помощью низкочастотного преобразования,
а нечетнме - с помощью високочастотного:
N-1
(2л) = £ (і) її, и-2п),
і-о
у,.и,),л2п+о = £
і-0
326
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритми сжатия изображенич
Поскольку боЛЬШИНСТВО Й£(і), кроме окрестности і=0, равнм нулю, то
можно переписать приведенньїе формули с меньшим количеством опера-
ций. Для простоти рассмотрим случай сжатия без потерь.
_ - хй(2л - 2) + 2 • х,„(2п - 1) + 6 • хй(2л) + 2 • хй(2л + 1) - хм(2л + 2)
У оиі V*"/ **
8
,ч х,„(2л) х,А2п + 2)
У„, (2л +1) = —х,„ (2л +1)--
Легко показать, что данную запись можно зквивалентно переписать,
уменьшив еще втроє количество операций умноження и деления (однако
теперь необходимо будет подсчитать сначала все нечетние у). Добавим
также операции округлення до ближайшего целого, не превишающего за-
данное число а, обозначаемие как І а І:
Уом(2л + 1) = х,„(2л + 1)-
х<я(2л) + хі,(2л + 2)
2
У„11,(2п) = х1.„(2л) +
у„„,(2л-1)+у„м(2л + 1)+2
4
Упражнение. Самостоятельно уменьшите количество операций для случая
без потерь.
Рассмотрим на примере, как работает данное преобразование. Для того
чтоби преобразование можно било применять к крайним пикселам изобра-
жения, оно симметрично достраивается в обе сторони на несколько пиксе-
лов, как показано на рисунке ниже. В худшем случае (сжатие с потерями)
нам необходимо достроить изображение на 4 пиксела (рис. 2.9).
Рис. 2.9. Симметричное расширение изображения (яркости АБ...Е)
по строке вправо и влево
Пусть ми преобразуем строку из 10 пикселов. Расширим ее значення
вправо и влево и применим В^Т-преобразование:
327
Книга написана коллективом 1Шр:/Лууууу.сотрге88Іоп.ги/
Методи сжатия данних (7000+ файлов о сжатии)
л-2 -101 23456789 10 11
хіп 3 2 1 2 3 7 10 15 12 9 10 5 10 9
Ум 0 1 0 3 1 11 4 13 -2 8 -5
Полупившаяся строка 1, 0, 3, 1, 11, 4, 13, -2, 8, -5 и является цепочкой,
однозначно задающей исходньїе данньїе. Совершив аналогичньїе преобра-
зования с козффициентами для распаковки, приведенньїми вьіше в таблице,
полупим необходимьіе формульї:
х0„(2п) = ут,(2п)-
4
г + хои,(2п) + хоиІ(2п + 2)
хои +1) = Ут, (2л +1) + ---------------------------
Упражнение. Докажите, что во всех случаях округлення мьі будем получать
одинаковьіе входную и вьіходную цепочки.
Легко проверить (используя преобразование упаковки), что значення на
концах строк в уои, также симметричньї относительно и=0 и 9. Воспользо-
вавшись зтим свойством, расширим нашу строку вправо и влево и приме-
ним обратное преобразование:
л -2-10
Уом 0 1
Хоиг 1
123456789 10 11
0 3 1 11 4 13 -2 8 -5 8 -2
2 3 7 10 15 12 9 10 5 10
Как ВИДИМ, МЬІ полупили исходную цепонку (Хіп-Хот).
Й*. Упражнение. Примените прямое и обратное 0\Л/Т-преобразования к цепочке из
10 байт: 121,107,98,102,145,182,169,174,157,155.
Далее к строке применяется нересстропное преобразование, суть которо-
го заключается в том, что все нетнме козффициентм переписьіваются в на-
чало строки, а все нечетньїе - в конец. В результате зтого преобразования в
нападе строки формируется "уменьшенная копия" всей строки (низконас-
тотная составляющая), а в конце строки - информация о колебаниях знане-
ний промежутонньїх пикселов (вьісоконастотная составляющая).
ут, 1 0 3 1 11 4 13 -2 8 -5
у'оиІ 1 3 11 13 8 0 1 4 -2 -5
Зто преобразование применяется сначала ко всем строкам изображения,
а затем ко всем столбцам изображения. В результате изображение делится на
4 квадранта (примерьі смотрите в описании рекурсивного сжатия). Впервом
квадранте будет сформирована уменьшенная копия изображения, а в остальньїх
трех - високочастотная информация. После чего преобразование повторно
328
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритми сжатия изображений
применяется уже только к первому квадранту изображения по тем же правилам
(преобразование второго уровня) (рис. 2.10).
і Рис. 2.10. Вид йІРТ
Для корректного сохранения результатов под данньїе 2-го и 3-го квад-
рантов вьіделяется на 1 бит больше, а под данньїе 4-го квадранта - на 2 бита
больше. То єсть если исходньїе данньїе бьіли 8-битовьіе, то на 2-й и 3-й
квадранти нужно 9 бит, а на 4-й - 10, независимо от уровня применения
П\УТ. При записи козффициентов в файл можно использовать иерархичес-
кую структуру ПАМТ, помещая козффициентм преобразований с большего
уровня в начало файла. Зто позволяет получить "изображение для предва-
рительного просмотра", прочитав небольшой участок данних из начала
файла, а не распаковьівая весь файл, как зто приходилось делать при сжатии
изображения целиком. Иерархичность преобразования может также исполь-
зоваться для плавного улучшения качества изображения при передаче его
по сети.
Шаг 4. Так же как и в алгоритме 1РЕО, после ШУТ применяется кванто-
вание. Козффициентм квадрантов делятся на заранее заданное число. При
увеличении зтого числа снижается динамический диапазон козффициентов,
они становятся ближе к нулю, и мм получаем большую степень сжатия.
Варьируя зти числа для разньїх уровней преобразования, для разнмх цвето-
вьіх компонент и для разньїх квадрантов, мьі очень гибко управляєм степе-
нью потерь в изображении. Рассчитанньїе в компрессоре оптимальньїе ко-
зффициентьі квантования передаются в декомпрессор для однозначной рас-
паковки.
Шаг 5. Для сжатия получающихся массивов данньїх в ЗРЕ6 2000 ис-
пользуется вариант арифметического сжатия, назьіваемьій М()-кодером,
прообраз которого ((^М-кодер) рассматривался еще в стандарте ІРЕС, но
реально не использовался из-за патентних ограничений. Подробнее об ал-
горитме арифметического сжатия читайте в гл. 1 разд. 1.
329
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.пі/
Методьі сжатия данньїх (7000+ файлов о сжатии)
Области повьішенного качества
Основная задача, которую мм решаем, - повмшение степени сжатия
изображений. Когда практически достигнут предел сжатия изображения в
целом и различнме методи дают очень небольшой вмигрмш, мьі можем
существенно (в разьі) увеличить степень сжатия за счет изменения качества
разньїх участков изображения (рис. 2.11).
Проблемой зтого подхода является то, что необходимо каким-то образом
получать расположение наиболее важних для человека участков изображе-
ния. Например, таким участком на фотографии человека является лицо, а на
лице - глаза. Если при сжатии портрета с большими потерями будут размьі-
тм предмети, находящиеся на заднем плане - зто будет несущественно. Од-
нако если будет размьгго лицо или глаза - зкспертная оценка степени потерь
будет хуже.
Рис. 2.11. Локальнеє улучшение качества областей изображения
Работм по автоматическому виделению таких областей активно, ведутся.
В частности, созданм алгоритми автоматического внделения лиц на изо-
бражениях. Продолжаются исследования методов вьіделения наиболее зна-
чимих (при анализе изображения мозгом человека) контуров и т. д. Однако
очевидно, что универсальинй алгоритм в ближайшее время создан не будет,
поскольку для зтого требуется построить полную схему восприятия изо-
бражений мозгом человека.
На сегодня вполне реально применение полуавтоматических систем,
в котормх качество областей изображения будет задаваться интерактивно.
Данньїй подход уменьшает количество возможньїх областей применения
модифицированного алгоритма, но позволяет достичь большей степени
сжатия.
330
Шір:/Лулулу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритми сжатия изображений
Такой подход логично применять, если:
для приложения должна бьіть критична (максимальна) степень сжатия,
причем настолько, что возможен индивидуальньїй подход -к каждому
изображению;
изображение сжимается один раз, а разжимается множество раз.
В качестве примеров приложений, удовлетворяющих отим ограничениям,
можно привести практически все мультимедийньїе продуктьі на СО-К.ОМ.
И для СП-КОМ знциклопедий, и для игр важно записать на диск как можно
больше информации, а графика, как правило, занимает до 70% всего обьема
диска. При зтом технология производства дисков позволяет сжимать каждое
изображение индивидуально, максимально повьшіая степень сжатия.
Интересньїм примером являются \У\УХУ-сервер. Для них тоже, как пра-
вило, вьіполняются оба изложенньїх вьіше условия. При зтом совершенно
не обязательно индивидуально подходить к каждому изображению, по-
скольку, по статистике, 10% изображений будут запрашиваться 90% раз. То
єсть для крупних справочньїх или игровьіх серверов появляется возмож-
ность уменьшать время загрузки изображений и степень загруженности ка-
налов связи адаптивно.
В ЗРЕО 2000 используется 1-битовое изображение-маска, задающее йо-
вмшение качества в данной области изображения. Поскольку за качество
областей у нас отвечают козффициентм П\УТ-преобразования во 2, 3 и 4-м
квадрантах, то маска преобразуется таким образом, чтобм указмвать на все
козффициентьі, соответствующие областям повьішения качества (рис. 2.12)
Рис. 2.12. Преобразование маски области повьішения качества для обработки
О ІУТ-козффициентов
Зти области обрабатмваются далее другими алгоритмами (с меньшими
потерями), что и позволяет достичь искомого баланса по общему качеству
и степени сжатия.
331
Книга написана коллективом ШІр:/Лууууу.сошрге88Іоп.ги/
(7000+ файлов о сжатии)
Методьі сжатия данньїх
Характеристики алгоритма ЛРЕС 2000:
Степень сжатия: 2-200 (задается пользователем). Возможно сжатие
без потерь.
Класе изображений: полноцветньїе 24-битовьіе изображения. Изо-
бражения в градациях серого без резких переходов цветов (фотографии).
1-битовьіе изображения.
Симметричность: 1-1.5.
Характернме особенности: позволяет удалять визуально неприятньїе
зффектм, повнішая качество в отдельньїх областях. При сильном сжатии
появляетея блочность и большие волньї в вертикальном и горизонтальном
направленнях.
Заключение
В заключение рассмотрим табл. 2.3 и 2.4, в которьіх сводятся воєдино
параметри различньїх алгоритмов сжатия изображений, рассмотренньїх на-
ми вьіше.
Таблиця 2.3
Алгоритм Особенности изображения, за счет которнх происходит сжатие
КЬЕ Подряд идущие одинаковьіе цвета: 222222 15 15 15
Одинаковьіе подцепочки: 2 3 15 40 2 3 15 40
Хаффмана Разная частота появлення цвета: 22322432224
ССІТТ-3 Преобладание белого цвета в изображения, большие области, заполненньїе одним цветом
Рекурсивний Плавньїе переходи цветов и отсутствие резких границ
ЗРЕО Отсутствие резких границ
Фрактальньїй Подобие между злементами изображения
Таблиця 2.4
Алгоритм Козффициен- тьі сжатия Симметрич- ность по времени На что ориентирован Потери Раз- мер- ность
КЬЕ 32,2,0.5 1 3,4-х битовьіе Нет Ю
Ь2У/ 1 000,4, 5/7 1.2-3 1 -8 битовьіе II Ю
Хаффмана 8, 1.5, 1 1-1.5 8 битовьіе II Ю
ССІТТ-3 213(3), 5, 0.25 ~1 1 -битовьіе Н Ю
ЗВІО 2-30 раз ~1 1 -битовме II 20
Ьоззіезз 1РЕО 2 раза ~1 24-бит. сер. II 20
Рекурсивное сжатие 2-200 раз 1.5 24*битовьіе, серьке Да 20
ЗРЕО 2-200 раз ~1 24-битовьіе, сер. II 20
Фрактальньїй 2-2 000 раз 1 000-10 000 24-бит. сер. II 2.50
332
Й11р:/Лууууу.сотрге88іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритми сжатия изображений
В табл. 2.5 отчетливо видньї тенденции развития алгоритмов сжатия
изображения последних лет:
ориентация на фотореалистичньїе изображения с 16 мли. цветов (24 бита);
использование сжатия с потерями, возможность за счет потерь регули-
ровать качество сжатьіх изображений;
использование избьіточности изображений в двух измерениях;
появление существенно несимметричньїх алгоритмов;
увеличивающаяся степень сжатия изображений.
Вопросьі для самоконтроля
1. В чем разница между алгоритмами с лотерей информации и без потери
информации?
2. Приведите примерьі мер потери информации и опишите их недостатки.
3. За счет чего сжимает изображения алгоритм ІРЕО?
4. В чем заключается идея алгоритма фрактального сжатия?
5. В чем заключается идея рекурсивного (волнового) сжатия?
6. Можно ли применять прием перевода в другеє цветовое пространство
алгоритма ІРЕО в других алгоритмах компрессии?
7. Сравните приведеннме в зтой главе алгоритми сжатия изображений.
Глава 3. Различия между форматом
и алгоритмом
Напоследок несколько замечаний относительно разницьі в терминоло-
гии, путаницьі при сравнении рейтингов алгоритмов и т. п.
Посмотрите на краткий перечень форматов, достаточно часто исполь-
зуемьіх на РС, Арріе и БМХ платформах: АЛЕХ, АІрЬа Місгозузіепв
ВМР, Аиіо1о§іс, АУНКК, Віпагу Іпіогтаїіоп Рііе (ВІР), Саісотр ССКР,
САЬ8, Соге ІЛС, СиЬісотр РісІигеМакег, Ог. Наіо СІЛ, Епсарзиіаіесі
РозіЗсгірІ, ЕК Маррег Кавіег, Епіаз ЬАЬІ/018, Рігзі РиЬІізЬег АКТ, ОЕМ УЛІ
Іта§е Рііе, ОІЕ, ООЕ8, НіІасЬі Казіег Рогтаі, РСЬ, КТЬ, НР-48зх ОгарЬіс
ОЬ)есІ (ОКОВ), Н8ІІРЕО, Н8І Ка\у, ІРР/ІЬВМ, Іт§ Зой^аге 8еІ, Іоуіап VI,
ІРЕО/ІРІР, Ьитепа СЕЬ, МасіпІозЬ РІСТ/РІСТ2, МасРаіпІ, МТУ Кау Тгасег
Рогтаі, 08/2 Віїтар, РСРАІТЛ/Рісіог Ра§е Рогтаі, РСХ, РЛ8, РоїїаЬІе
ВіїМар (РВМ), 0ЛУ, 0КТ Ка\у, КІХ, 8со<11, Зііісоп ОгарЬісз Іта£е, 8РОТ
1та§е, 8іогк, 8ип Ісоп, 8ип Кавіег, Таг§а, ТІРР, ІЛаЬ Казіег Тооікіі Рогтаі,
УІТес, Уіуід Рогтаі, 5Уіп<1о\у8 Віїтар, АУопіРегіесІ ОгарЬіс Рііе, ХВМ, ХРМ,
Х\УЛ.
333
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.ги/
Методи сжатия данньїх(7000+ файлов о сжатии)
В оглавлении вьі можете видеть список алгоритмов компрессии. Един-
ственньїм совпадением оказьівается 1РЕС, а зто, согласитесь, не повод, что-
бьі повсеместно использовать слова формат и алгоритм компрессии как
синонимьі (что, увьі, можно часто наблюдать).
Между зтими двумя множествами нет взаимно-однозначного соответст-
вия. Так, различние модификации алгоритма КЬЕ реализованьї в огром-
ном количестве форматов. В том числе в ТІГГ, ВМР, РСХ. И если в опре-
деленном формате какой-либо файл занимает много места, зто не озна-
чает, что плох соответствующий алгоритм компрессии. Зто означает
зачастую лишь то, что реализация алгоритма, использованная в зтом фор-
мате, дает для донного изображения плохие результати. Не более того.
(См. примерм в приложении 2.)
В то же время многие современньїе формати поддерживают запись с
использованием нескольких алгоритмов архивации либо без использования
архивации. Например, формат ТІРР 6.0 может сохранять изображения с
использованием алгоритмов КЬЕ-РаскВііз, КЬЕ-ССІТТ, Ь2\М, Хаффмана с
фиксированной таблицей, 1РЕС, а может сохранять изображение без архи-
вации. Аналогично формати ВМР и ТОА позволяют сохранять файли как с
использованием алгоритма компрессии КЬЕ (разньїх модификации!), так и
без использования оного.
Вьівод 1. Для многих форматов, говоря о размере файлов, необходимо
указьівать, использовался ли алгоритм компрессии, и если использовался,
то какой.
Можно пополнить перечень ситуаций некорректного сравнения алго-
ритмов. При сохранении абсолютно черного изображения в формате
1000x1000x256 цветов в формате ВМР без компрессии ми получаем, как и
положено, файл размером чуть более 1 000 000 байт, а при сохранении с
компрессией КЬЕ, можно получить файл размером 64 байта. Зто бил би
превосходньїй результат - сжатие в 15 тис. раз(!), если би к нему имела от-
ношение компрессия. Дело в том, что данньїй файл в 64 байта состоит толь-
ко из заголовка изображения, в котором указаньї все его данньїе. Несмотря
на то что такая короткая запись изображения стала возможна именно благо-
даря особенности реализации КЬЕ в ВМР, еще раз подчеркнем, что в дан-
ном случае алгоритм компрессии даже не применялся. И то, что для абсо-
лютно черного изображения 4000x4000x256 мьі получаем козффициент
сжатия 250 тьіс. раз, совсем не повод для продолжительньїх змоций по по-
воду зффективности КЬЕ. Кстати, данньїй результат возможен лишь при
определенной положений цветов в палитре и далеко не на всех программах,
которьіе умеют записьівать ВМР с архивацией КЬЕ (однако все стандартньїе
334
ййр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритми сжатия изображений
средства, в том числе средства системи ХУішіоте, читают такой сжатмй
файл нормально).
Всегда полезно помнить, что на размер файла оказьівают существенное
влияние большое количество параметров (вариант реализации алгоритма,
параметри алгоритма - как внутренние, так и задаваемие пользователем, -
порядок цветов в палитре и многое другое). Например, для абсолютно чер-
ного изображения 1000x1000x256 градаций серого в формате 1РЕО с помо-
щью одной программи при различних параметрах всегда получался файл
примерно в 7 Кб. В то же время, меняя опции в другой программе, я полу-
чил файли размером от 4 до 68 Кб (всего-то на порядок разницм). При зтом
декомпрессированное изображение для всех файлов било одинаковмм - аб-
солютно черний квадрат (яркость 0 для всех точек изображения).
Дело в том, что даже для простих форматов одно и то же изображение
в одном и том же формате с использованием одного и того же алгорит-
ма архивации можно записать в файл несколькими корректньїми спосо-
бами. Для сложних форматов и алгоритмов архивации возникают ситуации,
когда многие программи сохраняют изображения разнмми способами. Та-
кая ситуация, например, спожилась с форматом ТІЕГ (в силу его большой
гибкости). Долгое время по-разному сохраняли изображения в формат
ІРЕО, поскольку соответствующая группа І8О (Международной организа-
ции по стандартизации) подготовила только стандарт алгоритма, но не
стандарт формата. Сделано так било для того, чтобн не вмзнвать "войнм
форматов". Абсолютно противоположное положение сейчас с фрактальной
компрессией, поскольку єсть стандарт де-факто на сохранение фрактальньїх
козффициентов в файл (стандарт формата), но алгоритм их нахождения
(бнстрого нахождения!) является технологической тайной создателей про-
грамм-компрессоров. В результате для вгіолне стандартной программи-
декомпрессора могут бнть подготовленьї файли с козффициентами, суще-
ственно различающиеся как по размеру, так и по качеству получающегося
изображения.
Приведеннне примери показивают, что встречаются ситуации, когда ал-
горитми записи изображения в файл в различних программах различаются.
Однако гораздо чаще причиной разницм файлов являются разнме парамет-
ри алгоритма. Как уже говорилось, многие алгоритми позволяют в извест-
нмх пределах менять свои параметри, но не все программи позволяют зто
делать пользователю.
Вьівод 2. Если ви не умеете пользоваться программами архивации или
пользуетесь программами, в которнх "для простоти использования" убрано
управление параметрами алгоритма, не удивляйтесь, что для отличного ал-
горитма компрессии в результате получаются большие файли.
335
Книга написана коллективом Шір:/Лууууу.сотрге88Іоп.ги/
Методи сжатия данньїх(7000+ файлов о сжатии)
ЛИТЕРАТУРА ПО АЛГОРИТМАМ СЖАТИЯ
1. ІУаІІасе О. К. ТЬе 1РЕ6 яіііі рісіпге сотргеззіоп зіапдапі // Соттипісаііоп
оГАСМ. Аргії 1991. Уоі. 34, № 4.
2. Зтіік В., Воює Ь. АІ^огіЙіт Рог тапіриіаїіп^ сотргеззед іта§ез // Сот-
риіег СгарЬісз апсі арріісаїіопз. ЗеріетЬег 1993.
3. }асциіп Л.РгасіаІ іта§е содіп§ Ьазесі оп а іЬеогу оР ііегаіес! сопігасііуе
іта§е ІгапзРогтагіопз І І Уізиаі Сотт. апсі Іта§е Ргосеззіп^. 1990. Уоі.
8РІЕ-1360.
4. РіхИег ¥. Егасіаі іта§е сотргеззіоп // 8і§ОгарЬ-92.
5. Рго£ге8зіуе Ві-ієуєі Іта§е Сотргеззіоп, Кєуізіоп 4.1 И І8О/ІЕС
ЛС1/8С2/У/С9, СО 11544. 1991. 8еріетЬег 16.
6. РеппеЬакег IV. В., МИскеП Ь„ Ьап&іоп С. С., Агрз В. В. Ап оуєгуієау оР Йіе
Ьазіс ргіпсіріез оР йіе р-собег асіарііуе Ьіпагу агіЙітегіс собег // ІВМ Іоитаї оР
гезеагсЬ апі сіеуеіортепі. МоуетЬег 1988. Уо1.32, N0.6. Р. 771-726.
7. Нц0тап. О. А. А теіЬосі Рог (Ье сопзігисгіоп оР тіпітит гейипбапсу сосіез.
П Ргос. оРІКЕ. 1952. Уо1.40. Р. 1098-1101.
8. Зіатіагсіізаііоп оР Сгоир 3 Гасзітіїе аррагаіиз Рог сіоситепі Ігапзтіззіоп.
ССІТТ Кесоттепсіаііопз. Газсісіе УІІ.2. 1980. Т.4.
9. Александров В. В., Горский Н. Д. Представление и обработка изображе-
ний: рекурсивний подход // Л.: Наука, 1985. 190 с.
10. Климов А. С. Формати графических файлов // С.-Пб.: ДиаСофт. 1995.
11. Ватолин Д. С. МРЕС - стандарт І8О на видео в системах мультимедиа І І
Откритьіе системи. Лето 1995. № 2.
12. Ватолин Д. С. Тенденции развития алгоритмов архивации графики І І
Открнтне системи. Зима 1995. № 4.
13. Ватолин Д. С. Алгоритми сжатия изображений//М.: Диалог-МГУ, 1999.
14. Добеиіи И. Десять лекций по вейвлетам / Пер. с анг. Е. В. Мищенко, под
ред. А. П. Петухова. М.; Ижевск, 2001.464 с.
15. Яншин В. В. Анализ и обработка изображений (принципи и алгоритми)
//М.: Машиностроение,1995.
їб.Павлидис Т Алгоритми машинной графики и обработка изображений //
М.: Радио и связь 1986,400 с.
УІ.Претт У. Цифровая обработка изображений в двух томах Н М.: Мир,
1982. 790 с.
18. Розеншельд А. Распознавание и обработка изображений // М.: Мир, 1972.
232 с.
19. Материали конференции "Графикон" (статьи по сжатию публиковались
практически ежегодно) доступим в научних библиотеках и, частично, на
ЬНр:/Л¥АУ\¥.£гарЬісоп.ги.
336
1Шр:/Лууууу.сотрге88Іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 2. Алгоритми сжатия изображений
20. Ярославский Л. П. Введение в цифровую обработку изображений // М.:
Сов. радио, 1969. 312 с.
21. Яблонский С. В. "Введение в дискретную математику" // М.: Наука, 1986.
Раз. "Теория кодирования".
22. Вагпзіеу М. Р., Нигд Ь. Р. Ргасіаі Іша^е Сотргеззіоп //А. К. Ргезз 5¥е1-
Іеезіеу, Мазз. 1993.
23. Более 150 статей по сжатию изображений можно найти на Ьйр://£гарЬісз.
сз.тзи.8и/1іЬгагу/.
ЛИТЕРАТУРА ПО ФОРМАТАМ ИЗОБРАЖЕНИЙ
24. Климов А. С. Формати графических файлов І І М.: НИПФ "ДиаСофт
Лтд.", 1995.
25. Романов В. Ю. Популярньїе формати файлов для хранения графических
изображений на ІВМ РС // М.: Унитех, 1992.
26. Сван Т. "Формати файлов ХУіпсіохуз // М.: Бином, 1995.
21. НатіІІоп Е. 1РЕС Рііе ІпіегсЬап£Є Рогтаі // Уегзіоп 1.2. ЗеріетЬег 1,1992,
8ап Іозе СА: С-СиЬе Місгозузіетз, Іпс.
28. АИиз Согрогаїіоп Веуеіорег’з Оезк. ТІРР - Кєуізіоп 6.0, Ріпаї. 1992. Зшіе 3.
337
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.пі/
(7000+ файлов о сжатии)
РАЗДЕЛ З
СЖАТИЕ ВИДЕОДАННЬІХ
Введение
Основной сложностью при работе с видео являются большие обьемм
дискового пространства, необходимого для хранения даже небольших
фрагментов. Причем даже применение современньїх алгоритмов сжатия не
изменяет ситуацию кардинально. При записи на один компакт-диск "в бм-
товом качестве" на него можно поместить несколько тисяч фотографий,
примерно 10 ч музики и всего полчаса видео. Видео "телевизионного" фер-
мата 720x576 пикселов 25 кадров в секунду в системе К.ОВ требует потока
данньїх примерно в 240 Мбит/с (т. е. 1.8 Гб/мин). При зтом традиционние
алгоритми сжатия изображений, ориентированнме на отдельние кадри, не
спасают ситуации, поскольку даже при уменьшении потока в 10 раз он со-
ставляет достаточно большие величини.
В результате подавляющее большинство сегодняшних алгоритмов сжа-
тия видео являются алгоритмами с лотерей данних. При сжатии использу-
ется несколько типов избнточности:
1) когерентность областей изображения - малое изменение цвета
изображения в соседних пикселах (свойство, которое зксплуати-
руют все алгоритми сжатия изображений с потерями);
2) избьіточность в цветовьіх плоскостях - используется большая
важность яркости изображения для восприятия;
3) подобие между кадрами - использование того факта, что на ско-
рости 25 кадров в секунду, как правило, соседние кадри изменя-
ются незначительно.
Первьіе два пункга знакомн вам по алгоритмам сжатия графики. Ис-
пользование подобия между кадрами в самом простом и наиболее часто ис-
пользуемом случае означает кодирование не самого нового кадра, а его раз-
ности С предьідущим кадром. Для видео типа "говорящая голова" (передача
новостей, видеотелефоньї) ббльшая часть кадра остается неизменной и даже
такой простой метод позволяет значительно уменьшить поток данньїх. Бо-
лее сложнмй метод заключается в нахождении для каждого блока в сжи-
маемом кадре наименее отличающегося от него блока в кадре, используе-
мом в качестве базового. Далее кодируется разница между зтими блоками.
Зтот метод существенно более ресурсоемкий.
тмшіиои
338
КНрі/Луууху.сотргекіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 3. Алгоритми сжатия видео
Основньїе понятия
Определимся с основними понятиями, которме используются при сжа-
тии видео. Видеопоток характеризуется разрешением, частотой кадров и
системой представлення цветов. Из телевизионнмх стандартов пришли
разрешения в 720x576 и 640x480 и частотм в 25 (стандарти РАЬ или
8ЕСАМ) и 30 (стандарт МТ8С) кадров в секунду. Для низких разрешений
существуют специальнме названих СІГ - Сопппоп Іпіегс1іап£е Рогтаі, рав-
нмй 352x288, и РСІР- Оиагіегесі Соттоп ІпіегсЬап§е Рогтаі, равнмй
176x144. Поскольку СІР и 9СІР ориентированьї на крайнє небольшие пото-
ки, то с ними работают на частотах от 5 до 30 кадров в секунду.
Требования приложений к алгоритму
Для алгоритмов сжатия видео характерни большинство тех же требова-
ний приложений, которьіе предьявляются к алгоритмам сжатия графики,
однако єсть и определенная специфика:
Произвольньїй доступ - подразумевает возможность найти и показать
любой кадр за ограниченное время. Обеспечивается наличием в потоке дан-
них так називаеммх точек входа - кадров, сжатьіх независимо (т. є. как
обьщное статическое изображение). Приемлеммм временем поиска произ-
вольного кадра считается 1/2 с.
Бистрий поиск вперед/назад - подразумевает бистрий показ кадров,
не следующих друг за другом в исходном потоке. Требует наличия допол-
нительной информации в потоке. Зта возможность активно используется
всевозможними проигривателями.
Показ кадров фильма в обратном направлений. Редко требуется в
приложениях. При жестких ограничениях на время показа очередного кадра
виполнение зтого требования может резко уменьшить степень сжатия.
Аудиовизуальная синхронизация - самое серьезное требование. Дан-
нме, необходимие для того, чтобм добиться синхронности аудио и видео
дорожек, существенно увеличивают размер фильма. Для видеосистемм зто
означает, что если мм не успеваем достать и показать в нужннй момент
времени некий кадр, то мм должньї уметь коррекгно показать, например,
кадр, следующий за ним. Если мм показьіваем фильм без звука, то можно
позволить себе чуть более медленннй или более бистрий показ. Во времена
сравнительно несовершенного немого кино кадри шли настолько неравно-
мерно, насколько неравномерно крутил ручку камери оператор. Показ без
звука фильма, снятого столь несовершеннмми методами, воспринимается
нормально даже при условии, что частота показьіваемьіх кадров постоянна
(и герой фильма передвигаются то карикатурно бистро, то медленно). Од-
339
Книга написана коллективом Кйр:/Лу\у\у.сотрге‘і‘ііоп.і'и/
Методи сжатия данньїх (7000+ файлов о сжатии)
нако смотреть фильм (например, боевик), в котором видеосистема не успе-
вает за звуком, становися мучением.
Устойчивость к ошибкам - требование, обусловленное тем, что боль-
шинство каналов связи ненадежньї. Испорченное помехой изображение
должно бистро восстанавливаться. Требование достаточно легко удовле-
творяется необходимим числом независимих кадров в потоке. При зтом
также уменьшается степень сжатия, так как на зкране 2-3 с (50-75 кадров)
может бьіть одно и то же изображение, но мьі будем винуждени нагружать
поток независимими кадрами.
Время кодирования/декодирования. Во многих системах (например,
видеотелефонах) общая задержка на кодирование-передачу-декодирование
должна составлять не более 150 мс. Кроме того, в приложениях, где необхо-
димо редактирование, нормальная интерактивная работа невозможна, если
время реакции системи составляет более 1 с.
Редактируемость. Под редактируемостью понимается возможность из-
менять все кадри так же легко, как если би они били записани независимо.
Масштабируемость - простота реализации концепции "видео в окне".
Мм должнм уметь бистро изменять висоту и ширину изображения в пиксе-
лах. Масштабирование способно породить неприятние зффекти в алгорит-
мах, основанних на ДКП (дискретном косинусном преобразований). Кор-
ректно реализовать зту возможность для МРЕ6 на данний момент можно,
пожалуй, лишь при достаточно сложних аппаратних реализациях, только
тогда алгоритми масштабирования не будут существенно увеличивать вре-
мя декодирования. Интересно, что масштабирование достаточно легко осу-
ществляется в так називаемих фрактальньїх алгоритмах. В них, даже при
увеличении изображения в несколько раз, оно не распадается на квадрати,
т. е. отеутствует зффект "зернистосте". Если необходимо уменьшать изо-
бражение (что хоть и редко, но бивает нужно), то с такой задачей хорошо
справляются алгоритми, основаннне на шаусіеі-преобразовании (см. описа-
ние ЗРЕО 2000).
Небольшая стоимость аппаратной реализации. При разработке хотя
би приблизительно должна оцениваться и учитмваться конечная стоимость.
Если зта стоимость велика, то даже при использовании алгоритма в между-
народних стандартах производители будут предлагать свои, более конку-
рентоспособние алгоритми и решения. На практеке зто требование означа-
ет, что алгоритм должен реализовиваться небольшим набором микросхем.
Упражнение. Покажите, что требования произвольного доступа, бьістрого по-
иска, показа в обратном направлений, аудиовизуальной синхронизации и ус-
тойчивости к ошибкам противоречат условию вьісокой степени сжатия потока.
340
КНрі/Луууху.сотргекіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 3. Алгоритми сжатия видео
Описанньїе требования к алгоритму противоречивьі. Очевидно, что ви-
сокая степень сжатия подразумевает архивацию каждого последующего
кадра с использованием предидущего. В то же время требования на аудио-
визуальную синхронизацию и произвольний доступ к любому кадру за ог-
раниченное время не дают возможности витянуть все кадри в цепочку.
И тем не менее можно попитаться прийти к некоторому компромиссу. Сба-
лансированная реализация, учитнвающая систему противоречивих требо-
ваний, может достигаться на практике за счет настроек компрессора при
сжатии конкретного фильма.
Определение требований
Под процедурой определения требований, предьявляемнх к алгоритму,
понимается уяснение классов программного и аппаратного обеспечения, на
которме он ориентирован и, соответственно, вмработка требований к нему.
Носители информации, на которме ориентирован алгоритм:
ПУП-К.ОМ - сравнительно низкая стоимость, очень високая плотность
записи информации делают его наиболее перспективним устройством
для хранения оцифрованного видео.
СП-КОМ- низкая стоимость при вмсокой плотности записи информа-
ции делают его наиболее привлекательнмм устройством для хранения
оцифрованного видео. К недостаткам относится сравнительно малий
обьем, однако диск обладает рекордно низким отношением стоимости
диска к обьему.
Жесткий диск - наиболее бмстрое и гибкое устройство, обладающее очень
малим временем поиска, что необходимо для некоторьіх приложений. Од-
• нако он имеет високеє соотношение стоимости диска к обьему.
Перезаписиваемий оптический диск - одно из наиболее перспективних
устройств, способннх сочетать в себе достоинства СО-КОМ (низкая се-
бестоимость хранения информации, большой обьем, произвольний дос-
туп) и жесткого диска (возможность перезаписи).
Компьютернне сети (как глобальнне, так и локальньїе). Характеризуют-
ся возможностью бистро получать практически неограниченнне обьемьі
информации. К недостаткам сетей, с которими борются так називаемьіе
технологію <2о8 (Риаіііу оГ Зєгуісє - гарантированное качество сервиса),
относятся возможние задержки пакетов и произвольное изменение про-
пускной способности канала.
Программное обеспечение, использующее видеокомпрессию, можно
подразделить на две группи - симметричное и асимметричное.
341
Книга написана коллективом К((р:/Лу\у\у.сотрге‘і‘ііоп.і'и/
Матодьі сжатия данньїх(7000+ файлов о сжатии)
Асимметричньїе приложения предьявляют серьезньїе требования к деко-
деру (как правило, по времени и памяти), но для них безразличньї затратні ре-
сурсов при кодировании. Примером являются различньїе мультимедиа-знцик-
лопедии, путеводители, справочники, игрьі и просто фильмьі. При такой поста-
новив задачи появляется возможность применить сложньїе алгоритми
компрессии, позволяющие получить большую степень сжатия данньїх.
Симметричньїе приложения предьявляют одинаково жесткие требова-
ния на время, память и другие ресурси как при кодировании, так и при де-
кодировании. Примерами такого рода приложений могут служить видео-
почта, видеотелефон, видеоконференции, редактирование и подготовка ви-
деоматериалов.
Обзор стандартов
В 1988 г. в рамках Международной организации по стандартизации
(180) начала работу группа МРЕО (Моуіп£ Рісйігея Ехрегіз Огоир) - группа
зкспертов в области цифрового видео (І8О-ІЕС/Л’С1/8С2Л¥О11/МРЕ6).
Группа работала в направленнях, которьіе можно условно назвать МРЕО-
Уідео- сжатие видеосигнала в поток со скоростью до 1.5 Мбит/с, МРЕ6-
Аікііо - сжатие звука до 64, 128 или 192 Кбит/с на канал и МРЕО-8узІеш-
синхронизация видео- и аудиопотоков [1]. Нас в основном будут интересо-
вать достижения МРЕС-Уійео, хотя очевидно, что многие решения в зтом
направлений принимались с учетом требований синхронизации.
Как алгоритм МРЕО имеет несколько предшественников. Зто, прежде
всего, универсальньїй алгоритм .ІРЕО. Его универсальность означает, что
.ІРЕО показнвает неплохие результати на широком классе изображений.
Если бить более точним, то стандарт МРЕО, как и другие стандарти на
сжатие, описивает лишь виходной битовьій поток, неявно задавая алгорит-
ми кодирования и декодирования. При зтом их реализация перекладивается
на программистов-разработчиков. Такой подход откривает широкие гори-
зонти для тех, кто желает оптимально реализовать алгоритм для конкретно-
го вичислительного устройства (контроллера, ПК, распределенной внчис-
лительной системи), операционной системи, видеокартн и т. п. [2]. При
специализированних реализациях могут бить учтеньї весьма специфиче-
ские требования на время работьі, расход памяти и качество получаемих
изображений. Алгоритми сжатия видео весьма гибки, и зачастую для раз-
ньїх подходов к реализации можно получить существенную разницу по ка-
честву видео при одной и той же степени сжатия. Более того, для одного и
того же сжатого файла с помощью разньїх алгоритмов декодирования мож-
но получить существенно различающиеся по визуальному качеству филь-
ми. Зачастую "простая" реализация стандарта дает дергающий видеоряд
342
Шір:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 3. Алгоритми сжатия видео
с хорошо заметньїми блоками, в то время как программи известньїх произ-
водителей проигрмвают зтот же файл вполне плавно и без бросающейся в
глаза блочности. Зти нюанси необходимо хорошо себе представлять, когда
речь заходит о сравнений различньїх стандартов.
В сентябре 1990 г. бил представлен предварительньїй стандарт кодирования
МРЕО-1. В январе 1992 г. работа над МРЕО-1 била завершена и начата работа
над МРЕО-2, в задачу которого входило описание потока даннмх со скоростью
от 3 до 10 Мбит/с [3]. Практически в то же время била начата работа над
МРЕО-3, которьій бил предназначен для описання потоков 20-40 Мбит/с. Од-
нако вскоре вияснилось, что алгоритмические решения для МРЕО-2 и МРЕО-3
принципиально близки и можно безболезненно расширить рамки МРЕО-2 до
потоков в 40 Мбит/с. В результате работа над МРЕО-3 била прекращена.
МРЕО-2 бил окончательно доработан к 1995 г.
В 1991 г. группой зкспертов по видеотелефонам (ЕОУТ) при Междуна-
родном консультативном комитете по телефонии и телеграфии (ССІТТ)
предложен стандарт видеотелефонов рх64 КЬіІ/з [4,9]. Запись рх64 означает,
что алгоритм ориентирован на параллельную передачу оцифрованного ви-
деоизображения по р-каналам с пропускной способностью 64 Кбита/с. Та-
ким образом, захвативая несколько телефонних линий, можно получать
изображение вполне приемлемого качества. Одним из главнмх ограничений
при создании алгоритма являлось время задержки, которое должно било со-
ставлять не более 150 мс. Кроме того, уровень помех в телефонних каналах
достаточно висок, и зто, естественно, нашло отражение в алгоритме. Мож-
но считать, что рх64 КЬіІк - предшественник МРЕО для потоков данньїх
менее 1,5 Мбит/с и специфического класса видео.
В группе при СМТТ (совместний комитет при ССІТТ и ССІК,-
Іпіегпагіопаї Сопзиііаііуе Сопппійее оп ЬВоа<1са$ііп£) работьі били направле-
нм на передачу оцифрованного видео по вмделеннмм каналам с вмсокой
пропускной способностью и радиолиниям. Соответствующие стандарти
Н21 и Н22 ориентировани на 34 и 45 Мбит/с, и сигнал передаетея с очень
високим качеством.
МРЕО-4 изначально бил задумай как стандарт для работи со сверхниз-
кими потоками. Однако в процессе довольно долгой подготовки стандарт
претерпел совершенно революционнме изменения, и сейчас собственно
сжатие с низким потоком входит в него как одна составная часть, причем
достаточно небольшая по размеру. Например, сам формат сегодня включает
в себя такие вещи, как синтез речи, рендеринг изображений и описання па-
раметров визуализации лица на стороне программи просмотра.
Разработка МРЕО-7 била начата в 1996 г. Собственно к алгоритмам
сжатия видео зтот стандарт имеет еще меньшее отношение, чем МРЕО-4,
343
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.пі/
Методь/ сжатия данньїх <7000+ файлов о сжатии)
поскольку его основная задача заключается в описаним контента и управле-
ний им. Описание МРЕО-7 вмходит за рамки зто книги.
Параллельно все зто время существовали формати Моііой-ЗРЕС и не-
давно появившийся Моїіоп-ІРЕС 2000, предназначенние в основном для
удобства обработки сжатого видео. Рассмотрим основньїе стандарти и ле-
жащие в их основе алгоритми поподробнее.
Глава 1. Базовьіе технологии сжатия
видеоданньїх
Описание алгоритма компрессии
Технология сжатия видео в МРЕ6 распадается на две части: уменьшение
избиточности видеоинформации во временном измерении, основанное на
том, что соседние кадри, как правило, отличаются несильно, и сжатие от-
дельних изображений.
Для того чтобн удовлетворить противоречивмм требованиям и увели-
чить гибкость алгоритма, рассматривается 4 типа кадров:
І-кадри - кадри, сжатие независимо от других кадров (І-Іпіга рісіигез);
Р-кадрн- сжатие с использованием ссилки на одно изображение (Р-
Ргебісіесі);
В-кадрн- сжатие с использованием ссилки на два изображения (В-
Вібігесііоп);
ВС-кадрм - независимо сжатие с большой лотерей качества (использу-
ются только при бистром поиске).
І-кадри обеспечивают возможность произвольного доступа к любому
кадру, являясь своеобразними входними точками в поток данних для деко-
дера. Р-кадри используют при архивации ссилку на один І- или Р-кадр, по-
внілая тем самим степень сжатия фильма в целом. В-кадрн, используя
ссилки на два кадра, находящиеся впереди и позади, обеспечивают наи-
висшую степень сжатия. Сами в качестве ссилки использоваться не могут.
Последовательность кадров в фильме может бить, например, такой:
ІВВРВВРВВРВВІВВРВВ... Или, если мм не зкономим на степени сжатия,
такой, как на рис. 1.1
344
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 3. Алгоритми сжатия видео
Рис. 1.1.1-кадри - независимо сжатие (І-Іпігарісіигез); Р-кадри - сжатие
с использованием ссилки на одно изображение (Р-РгесіїсІе<і); В-кадри - сжатие
с использованием ссилки на два изображения (В-Вйіїгесііоп)
Частота І-кадров вьібирается в зависимости от требований на время про-
извольного доступа и надежности потока при передане через канал с ошиб-
ками. Соотношение Р- и В-кадров подбирается, исходя из требований к ве-
личине компрессии и ограничений декодера. Как правило, декодирование
В-кадров требует больше вмчислительнмх мощностей, однако позволяет
повисить степень сжатия. Именно варьирование частоти кадров разннх ти-
пов обеспечивает алгоритму необходимую гибкость и возможность расши-
рения. Понятно, что для того, чтобм распаковать В-кадр, мм должни уже
распаковать те кадри, на которме он ссмлается. Позтому для последова-
тельности ІВВРВВРВВРВВІВВРВВ кадри в фильме будут записали так:
0**312645..., где цифри - номера кадров, а звездочкам соответствуют либо
В-кадрм с номерами -1 и -2, если мм находимся в середине потока, либо
пустме кадри (ничего), если мм в начале фильма. Подобньш формат обла-
дает достаточно большой гибкостью и способен удовлетворять самим раз-
личнмм наборам требований.
Одним из основних понятий при сжатии нескольких изображений явля-
ется понятие макроблока. При сжатии кадр из цветового пространства КОВ
переводится в цветовое пространство ¥ІІУ. Каждая из плоскостей сжимае-
мого изображения (¥, 11, V) разделяется на блоки 8x8, с которьіми работает
ДКП. Причем плоскости П и V, соответствующие компоненте цветности,
берутся с разрешением в 2 раза меньшим (по вертикали и горизонтали), чем
исходное изображение. Таким образом, мм сразу получаем сжатие в 2 раза,
пользуясь тем, что глаз человека хуже различает цвет отдельной точки изо-
бражения, чем ее яркость (подробнее об зтих преобразованиях смотрите в
описании алгоритма ІРЕО). Блоки 8x8 группируются в макроблоки. Макро-
блок - зто группа из четмрех соседних блоков в плоскости яркостной ком-
понента ¥ (матрица пикселов 16x16 злементов) и два соответствующих им
по расположению блока из плоскостей цветности V и V. Таким образом,
кадр разбивается на независимме единицм, несущие полную информацию о
части изображения. При зтом размер изображения должен бить кратен 16.
Отдельнме макроблоки сжимаются независимо, т. е. в В-кадрах мм можем
сжать макроблок конкретний как І-блок, Р-блок со ссмлкой на предьідущий
кадр, Р-блок со ссьілкой на последующий кадр и, наконец, как В-блок. ,
4
345
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.пі/
Методь. сжатия данньїх(7000+файлов о сжатии)
Алгоритм сжатия отдельньїх кадров в МРЕО похож на соответствующий
алгоритм для статических изображений - ЗРЕО. Если говорить коротко, то
сам алгоритм сжатия представляет собой конвейєр преобразований. Зто
дискретнеє косинусное преобразование исходной матрицм 8x8, квантование
матрицьі и вьітягивание ее в вектор у!1,у12,у21,у31,у22, ..., у88 (зигзаг-
сканирование), сжатие вектора групповмм кодированием и, наконец, сжатие
по алгоритму Хаффмана.
Общая схема алгоритма
В целом весь конвейєр преобразований можно представить так:
1. Подготовка макроблоков. Для каждого макроблока определяется, каким
образом он будет сжат. В І-кадрах все макроблоки сжимаются независи-
мо. В Р-кадрах блок либо сжимается независимо, либо представляет со-
бой разность с одном из макроблоков в предьідущем опорном кадре, на
которьій ссьілается Р-кадр.
2. Перевод макроблока в цветовое пространство ¥ІЗУ. Получение нужного
количества матриц 8x8.
3. Для Р- и В-блоков производится вьічисление разности с соответствую-
щим макроблоком в опорном кадре.
4. ДКП
5. Квантование.
6. Зигзаг-сканирование.
7. Групповое кодирование.
8. Кодирование Хаффмана.
При декодировании весь конвейєр повторяется для обратньїх преобразо-
ваний, начиная с конца.
Йспользование векторов смещений блоков
Простейший способ учитьівать подобие соседних кадров - зто вичитать
каждмй блок сжимаемого кадра из соотв'етствующего блока предидущего.
Однако более гибким является алгоритм поиска векторов, на которне сдви-
нулись блоки текущего кадра по отношению й предьідущему. Для каждого
блока в изображении мьі находим блок, близкий по некоторой метрике (на-
пример, по сумме квадратов разности пикселов), в предьідущем кадре в не-
которой окрестности текущего положення блока. Если минимальное рас-
стояние по вьібранной метрике с блоками в предьідущем кадре больше вьі-
бранного порога, блок сжимается независимо (рис. 1.2.).
346
Таким образом, вместе с каждим блоком в поток теперь сохраняются
координати смещения максимально похожего блока в предьідущем І- или Р-
кадре, либо признак того, что данние сжатм независимо. Зти координати
задают вектор смещения блока (шоііоп уєсіог). В ситуациях, когда камера
наезжает на обьект или дает панораму, использование векторов смещений
блоков позволяет значительно уменьшить амплитуду разности кадров и, как
следствие, значительно поднять степень сжатия.
Если ми проанализируем реальние фильми, то окажется, что часто блок
сдвигается не на кратное число пикселов, а, например, на 10.4 пиксела (ка-
мера бистро движется вправо, план сьемки сдвигается равномерно и прохо-
ди? полннй кадр размером 352x240 за 1.35 с). При зтом оказнвается, что
для повьішения степени сжатия вигодно строить 4 области поиска векторов
смещений: исходную, сдвинутую на полпиксела по горизонтали, сдвинутую
на полпиксела по вертикали и сдвинутую на полпиксела по горизонтали и
по вертикали (по диагонали), которие строятся с помощью достаточно би-
стрих алгоритмов билинейной или кусочно-линейной аппроксимации. Зтот
прием также позволяет уменьшить разность между блоками и повисить
степень сжатия при минимальной дополнительной информации, которую
надо сохранять в файл (плюс 2 бита на кажднй блок). Правда, строить ап-
проксимированньїе блоки придется и при декомпрессии, однако зто сравни-
тельно дешевая по времени операция, которая весьма незначительно увели-
чивает общее время декомпрессии.
Также надо понимать, что алгоритм поиска оптимальних векторов смеще-
ния заключается, вообще говоря, в переборе. Существуют различньїе методи
уменьшения зтого перебора, и настройки видеокодеков, регулирующие ско-
рость сжатия, нередко варьируют именно параметри метода перебора.
347
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.пі/
Методи сжатия данньїх(7000+ файлов о сжатии)
Возможности по распараллеливанию
Даже бегльїй взгляд на зтот обобщенньїй алгоритм позволяет заметить,
что он сравнительно легко распараллеливается. Изображение 320x288 со-
держит 330 макроблоков, которие можно кодировать и декодировать неза-
висимо. Каждьій макроблок, в свою очередь, содержит 6 блоков данньїх для
ДКП. Распараллелить ДКП очень важно, так как, не считая поиска векторов
смещения, зто самая медленная операция. Заметим также, что остальньїе
преобразования легко конвейеризуются. В результате мьі получаем парал-
лельно-конвейерную схему обработки потока видеоданннх.
Достаточно заманчиво вьіглядит возможность распараллелить обработку
различньїх кадров, но здесь мьі сталкиваемся со сложностями. Как правило,
компрессор строится таким образом, чтобьі после сжатия изображение под-
вергалось обратньїм преобразованиям. Таким образом, мьі получаем кадр с
потерями и архивируем остальньїе кадрьі, отталкиваясь от него. Зто позво-
ляет не накапливать ошибки, получаемьіе еще при квантовании. Таким об-
разом, если на зкране между кадрами наблюдались большие изменения и
качество изображения пришлось понизить, то при стабилизации изображе-
ния качество бистро повишается практически до качества исходного видео-
ряда. Неприятньїй зффект, порождаемьій зтим приемом, заключается в том,
что появляется мерцание отдельньїх точек (или областей) изображения, зна-
чение цвета в которьіх округляется то в большую, то в меньшую сторону.
При распаковке наши возможности по параллельной обработке различ-
ньїх кадров достаточно ограниченьї, поскольку велика зависимость между
кадрами в потоке (велик процент Р- и В-кадров).
Другие пути повьішения степени сжатия
Описаннмй вьіше алгоритм в целом крайнє близок к большинству при-
меняемьіх сейчас на практике алгоритмам сжатия видео. Однако новьіе (или
хорошо забьггьіе старие) идеи появляются ежегодно. Если для алгоритмов
сжатия без потерь можно говорить о росте степени сжатия на 1 % в год (от-
носительно предьідущего года) для достаточно большого тестового массива
данньїх, то для алгоритмов сжатия видео речь обьічно идет о 3-5 % прибав-
ки степени сжатия для достаточно большого видеофрагмента при том же
визуальном качестве.
Если, с одной сторони, повьішается степень сжатия, то, с другой сторо-
ни, растет сложность программи и падает скорость работи как при ком-
прессии так и при декомпрессии.
Перечислим основнме пути повьішения степени сжатия.
348
К((р:/Лу\у\у.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 3. Алгоритми сжатия видео
Изменение алгоритма сжатия І-кадров. Вьіше приведен алгоритм, ос-
нованими на ДКП. Сегодня все чаще используются алгоритми, основанние
на взйвлетах (см. описание ЗРЕ6 2000).
Изменение алгоритма сжатия без потерь. Вьіше приведен алгоритм,
использующий сжатие по алгоритму Хаффмана. Однако недавно закончил-
ся основной патент на арифметическое сжатие (дающее преимущество 2-
15 %), и соответственно, все чаще используется именно оно.
Изменение алгоритма работьі с векторами смещения блоков. Подбор
векторов смещений блоков по наименьшему ереднеквадратичному смеще-
нию не является оптимальним. Существуют алгоритми, дающие лучший
результат при некоторих дополнительнмх затратах времени при сжатии.
Применение обработки козффициентов. Можно питаться получить
больше информации об изображении из сохраненних козффициентов. На-
пример, возможно бнетрое сравнение козффициентов после ДКП в сосед-
них блоках и их уереднение по достаточно сложньїм алгоритмам. Зтот при-
ем заметно снижает количество артефактов, вносимих в изображение ДКП,
при зтом допусках реализацию, работающую в реальном времени.
Применение обработки получающихся кадров. Известная беда алго-
ритмов сжатия изображений - неизбежная "блочность" (хорошо заметние
границьі макроблоков). В принципе существуют алгоритми, работающие с
кадром совсем без применения блоков (даже без векторов смещения бло-
ков), но такой подход пока не оправдьівает себя ни по степени сжатия, ни по
скорости работн декодера. Однако можно построить достаточно бьіетрме
алгоритми постобработки, которме достаточно аккуратно уберут видимме
границьі между блоками, не внося существенних помех в само изображе-
ние. Существуют также алгоритми, устраняющие на лету зффект Гиббса
(см. описание ІРЕО), и т. п. Таким образом, существенно улучшаетея визу-
альное качество изображения. Зто также означает, что можно повисить
степень сжатия при том же визуальном качестве.
Улучшение алгоритмов масінтабирования изображений. Как прави-
ло, видео на компьютере просматривают во весь зкран. При зтом даже при-
менение очень простого и бистрого кусочно-линейного масштабирования
способно кардинально снизить скорость проигрнвания ролика. То єсть
примитивная операция масштабирования изображения будет работать за-
метно дольше, чем сложний алгоритм декодера. Однако скорости совре-
менних компьютеров бистро растут, и те алгоритми, что вмзьівали падение
скорости до 7 кадров в секунду на СеІегрп-300, дают живое видео - больше
30 кадров - на Р4-1200 (начинает использоваться расширенньш набор ко-
манд и т. п.). Появляется возможность использовать более сложние и каче-
ственнме алгоритми масштабирования на весь зкран, получая более висо-
349
Книга написана коллективом Шір:/Лууууу.сотрге88Іоп.пі/
Методьі сжатия данньїх(7000+ файлов о сжатии)
|кое качество, чем для использовавшейся ранее билинейной интерполяции
(в большинстве видеокарт реализованной аппаратно).
Применение предварительной обработки видео. Если ми хотим полу-
чить достаточно високую степень сжатия, то можно заранее предсказать,
: что в нашем изображении пострадают вьісокие частоти. Оно станет сгла-
женньїм, пропадут многие мелкие детали. При зтом, как правило, появля-
ются дополнительньїе артефакти в виде полосок, ореолов у резких границ,
воли. Значительно повисить качество изображения после кодирования по-
зволяет предобработка с удалением високих частот. При зтом существуют
алгоритми, обрабатнвающие поток таким образом, что визуально качество
. изображения не изменяется, однако после декодера ми получаем сущест-
і венно более качественное изображение.
Вьіше перечисленн лишь отдельнне направлення работи. Фактически за
( 90-е гг. изменения и улучшения коснулись всех модулей алгоритма, постро-
енного по классической схеме. Свою лепту в зтот процесе вносят также
; производители микропроцессоров, и в особенности Іпіеі. Процессори, на-
чиная с Р4, специально предназначени для обработки потокових даннмх.
Особенности архитектурм процессора (в частности, небольшой по сравне-
нию с процессорами АМВ кеш первого уровня) дают значительное пре-
имущество одним алгоритмам и делают незффективннми другие. Однако
общее совершенствование алгоритмов сжатия видео идет очень бистро, и в
ближайшее время можно ожидать только увеличения скорости появлення
нових разработок.
Глава 2. Стандартьі сжатия видеоданньїх
Моііоп^РЕб
Моїіоп-ІРЕС (или М-ДРЕО) является наиболее простим алгоритмом сжа-
тия видеоданньїх. В нем каждий кадр ежимаетея независимо алгоритмом
ІРЕО. Зтот прием дает високую скорость доступа к произвольнмм кадрам
как в прямом, так и в обратном порядке следования. Соответственно легко
реализуютея плавнне "перемотки" в обоик направленнях, аудиовизуальная
синхронизация и, что самое главное, редактирование. Типичнме операции
ДРЕО сейчас поддерживаютея на аппаратном уровне большинством видео-
карт, и данньїй формат позволяет легко оперировать большими обьемами
данньїх при монтаже фильмов. Независимое сжатие отдельньїх кадров по-
зволяет накладмвать различнме зффектьі, не опасаясь, что взаимное влия-
ние соседних кадров внесет дополнительньїе искажения в фильм.
350
1Шр:/Лууууу.сотрге88Іоп.пі/ (7000+ файлов, 850Мб о сжатии)
Раздел 3. Алгоритми сжатия видео
Характеристики Моііоп-ЛРЕС:
Поток, разрешение (сжатие): поток и разрешение произвольнме,
сжатие в 5—10 раз.
Плюси: обеспечивает бмстрмй произвольньїй доступ. Легко редакти-
ровать поток. Низкая стоимость аппаратной реализации.
Минусьі: сравнительно низкая степень сжатия.
МРЕ6-1
Алгоритм МРЕО-1 в целом соответствует описанной вьіше общей схеме
построения алгоритмов сжатия.
Характеристики МРЕС-1:
Поток, разрешение: 1.5 Мбит/с, 352x240x30,352x288x25.
Плюси: сравнительно прост в аппаратной реализации, содержит пре-
образования, поддерживаемме на аппаратном уровне большим количест-
вом видеокарт.
Минусь!: невисокая степень сжатия. Малая гибкость формата.
Н.261
Стандарт Н.261 специфицирует кодирование и декодирование видеопо-
тока для передачи по каналу рх64 Кбит, где р=1...30. В качестве канала мо-
жет виступать, например, несколько телефонних линий.
Входной формат изображения - разрешения СІЕ или РСІР в формате
УІІУ (ССІК 601), частота кадров от 30 ірз и ниже. Используется уменьше-
ние разрешения в 2 раза для компонент цветности.
В вмходной поток записмваются два типа кадров: ІЬГГКА - сжатие неза-
висимо (соответствуют І-кадрам) и П4ТЕК - сжатие со ссилкой на преди-
дущий кадр (соответствуют Р-кадрам). В передаваемом кадре не обязатель-
но присутствуют все макроблоки изображения; если блок изменился незна-
чительно передавать его обично нет смисла. Сжатие в НЧТКА-кадрах
осуществляется по схеме сжатия отдельного изображения. В ШТЕК.-кадрах
производится аналогичное сжатие разности каждого передаваемого макро-
блока с "наиболее похожим" макроблоком из предидущего кадра (компен-
сация движения). Для сглаживания артефактов ДКП предусмотрена воз-
можность применения размьггия внутри каждого блока 8x8 пикселов. Стан-
дарт требует, чтобн ІИТКА-кадри встречались в потоке не реже чем через
каждне 132 ІЬІТЕК-кадра (чтобн не накапливалась погрешность кодирова-
ния и била возможность восстановиться в случае ошибки в потоке).
351
Книга написана коллективом 1Шр:/Лууууу.сотрге88Іоп.ги/
Методи сжатия даннь.х (7000+ файлов о сжатии)
Степень сжатия зависит в основном от метода нахождения "похожих"
макроблоков в предьідущем кадре, алгоритма решения, передавать ли кон-
кретний макроблок, вьібора способа кодирования каждого макроблока
(ШТЕК/ШТКА) и вьібора козффициентов квантования результатов ДКП.
Ни один из перечисленньїх вопросм стандартом не регламентируются, ос-
тавляя свободу для построения собственньїх оптимальних алгоритмов.
Характеристики Н.261:
Поток, разрешение: рх64 Кбит, р=1.. .30, СІР или рСІР.
Плюси: прост в аппаратной реализации.
І Минусьі: невисокая степень сжатия. Ограничения на формат.
Н.263
Данний стандарт является расширением, дополнением и значительньїм
усложнением Н.261. Он содержит "базовий" стандарт кодирования, практи-
чески не отличающийся по алгоритмам сжатия от Н.261, плюс множество
опциональннх его расширений.
Кратко перечислим наиболее важньїе отличия.
Использование арифметического кодирования вместо кодов Хафф-
мана. Дает возможность на 5-10 % повисить степень сжатия.
Возможность задания векторов смещения, указиваюіцих за грани-
цьі изображения. При зтом граничние пиксели используются для предска-
зания пикселов вне изображения. Данний прием усложняет алгоритм деко-
дирования, но позволяет значительно улучшить изображение при резкой
смене плана сцени.
Возможность задания вектора смещения для каждого блока 8x8
в макроблоке, что в ряде случаев существенно увеличивает сжатие и сни-
жает блочность изображения.
Появление В-кадров, которие позволяют увеличить степень сжатия, за
счет усложнения и увеличения времени работьі декодера.
Поддержка большого числа форматов входньїх видеоданньїх: зиЬ-
РСІГ, рСІГ, СІГ, 4С1Р, 16СІР и отдельно настраиваемьіх. Основнеє отличие
от более универсальньїх форматов заключается в адаптации для нескольких
фиксированних разрешений, что позволяет делать менее универсальнне, но
более бьістрьіе процедури обработки кадров. Построенний таким образом
декодер работает несколько бистреє.
Компенсация движения с субпиксельной точностью. Возможность
сдвинуть блок на полпиксела также увеличивает степень сжатия, но увели-
чивает время работьі декодера.
352
К((р:/Лу\у\у.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 3. Алгоритми сжатия видео
Особьій режим сжатия ІМТКА макроблоков со ссьілкой на соседние
макроблоки в обрабатьіваемом кадре, особьій режим квантования и специ-
альная таблица Хаффмана для улучшения сжатия І-кадров в ряде случаев.
Сглаживание границ блоков декодированного изображения для
уменьшения зффекта "блочности". Зачастую при резком движении в кадре
при сжатии алгоритм оказьівается вьінужден повьісить степень квантования
блоков после ДКП, чтобьі улежиться в отведенньїй на передачу битовьій
поток. При зтом в кадре возникают хорошо вам знакомьіе по ІРЕС блоки
размером 8x8. Как показала практика, "сращивание" границ, когда крайние
пиксельї блоков едвигают по яркости так, чтобьі уменьшить разницу, позво-
ляет зачастую заметно повисить визуальное качество фильма.
Изменение разрешения и деформирование базового кадра, исполь-
зующегося в качестве базового при сжатии.
Различньїе режими квантования и кодирования по Хаффману.
Характеристики Н.263:
Поток, разрешение: 0.04-20 Мбит/с, яиЬ-рСІР, ССІР, СІР, 4СІР,
16СІР и отдельно настраиваемьіе разрешения.
Плюси: алгоритм Н.263, так же как Н.261, допускает биструю аппа-
ратную реализацию, однако при зтом позволяет добиться большей степе-
ни сжатия при том же качестве. Поддерживает сжатие звука.
Минусн: по количеству заложенньїх идей находитея между МРЕСг-2
и МРЕО-4.
МРЕ6-2
Как уже говорилось, МРЕО-2 занимаетея ежатием оцифрованного видео
при потоке данних от 3 до 10 Мбит/с. Многое в нем заимствовано из фор-
мата ССІК-601. ССІК-601 представляет собой стандарт цифрового видео с
размером передаваемого изображения 720x486 при 60 полукадрах в секун-
ду. Строки изображения передаютея с чередованием, и два полукадра со-
ставляют кадр. Зтот прием нередко применяют для уменьшения мерцания.
Хроматические канали (II и V в ¥11V) передаютея размером 360x243 60 раз
в секунду и также чередуютея, уже между собой. Подобное деление назьіва-
ется 4:2:2. Перевод из ССІК-601 в МРЕО-І прост: надо поделить в 2 раза яр-
костную компоненту по горизонтали, поделить поток в 2 раза во временном
измерении (убрав чередование), добавить вторую хроматическую компо-
ненту и викинуть "лишние" строки, чтоби размер по вертикали делилея на
16. Ми получим поток УСУ кадров размером 352x240 с частотой 30 кадров
в секунду. Здесь все просто.
353
Книга написана коллективом КНр:/Лу\у\у.сотрге‘і‘ііоп.і'и/
Методи сжшпия ймньїх(7000+файлов о сжатии)
Проблеми начинаются, когда появляется возможность увеличить поток
даннмх и довести качество изображения до ССІК-601. Зто не такая простая
задача, как кажется. Проблема состоит в чередовании полукадров во вход-
ном формате. Тривиальное решение- работать с кадрами 720x486 при
ЗО кадрах в секунду, как с обьічньїм видео. Зтот путь приводит к неприят-
ньім зффектам при бмстром движении обьектов на зкране. Между двумя
исходньїми полукадрами 720x243 сдвиг становится заметнмм, а так как наш
кадр формируется из исходнмх полукадров через строку, то при сжатии
происходит разммвание движущегося обьекта. Виновно в зтом зффекте
ДКП, и как-то исправить ситуацию, не уменьшив степени сжатия видео или
не потеряв в визуальном качестве, нельзя. Достаточно распространеннмм
является применение "деинтерлейсинга" (от английского сіеіпіегіасіпв - уда-
ление чередования строк). Зта операция позволяет удалить чередование,
смещая четние строки в одном направлений, а нечетние в другом, пропор-
ционально относительному движению обьекта в данной области зкрана.
В результате ми получаем визуально более качественное изображение, но
несколько более длительную предобработку перед сжатием.
Другим решением является архивация четньїх и нечетнмх кадров в пото-
ке ССІК-601 независимо. При зтом ми, конечно, избавимся от артефактов,
возникающих при бмстром движении обьектов, но существенно уменьшим
степень сжатия, так как не будем использовать важнейшей вещи - избмточ-
ности между соседними кадрами, которая очень велика.
Характеристики МРЕС-2:
Поток, разрешение: 3-15 Мбит/с, универсальнмй.
Плюси: поддержка достаточно серьезнмх звукових стандартов ПоІЬу
Оі^ііаі 5.1, ОТ8, високая универсальность, сравнительная простота аппа-
ратной реализации.
Минусм: недостаточная на сегодня степень сжатия, недостаточная
гибкость.
МРЕО-4
МРЕО-4 кардинально отличается от принимаемнх ранее стандартов.
Рассмотрим наиболее интересние и полезнме нововведення.
Расчет трехмернмх сцен и работа с синтетическими обьектами.
В состав декодера МРЕО-4 как составная часть входит блок визуализации
трехмернмх обьектов (Апітаїіоп Ргате\уогк еХіепзіоп - АГХ - то, что в
просторечии назмвают данньїми для трехмерного движка). Те, кто кодиро-
вал видео, знают, сколько проблем доставляют титрьі и вообще любме на-
354
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 3. Алгоритми сжатия видео
кладмваемьіе поверх фильма обьектм (логотипи, заставки и т. п.). Если хо-
рошо вмглядит основной план - будут подпорченм накладмваемме обьек-
тьі, если хорошо смотрятся они - будет низкой общая степень сжатия.
ВМРЕ6-4 предлагается решить проблему кардинально. Накладмваемме
обьектм рассчитмваются отдельно и накладмваются потом. Кроме того,
можно использовать видеопоток даже как текстуру, накладьіваемую на по-
верхности рассчитмваемих обьекгов. Такая гибкая работа с трехмерньїми
обьектами позволяет существенно поднять степень сжатия при заметно
лучшем качестве изображения. Более того, никто не мешает делать видео-
ролики вообще без живого видео, а состоящие только из рассчитанньїх
(синтетических) обьекгов. Размер их описання будет в рази меньше, чем
размер аналогичнмх фильмов, сжатьіх просто как поток кадров. Кстати, от-
дельно в стандарте предусмотрена работа со "спрайтами" - статическими
изображениями, накладьіваемьіми на кадр. При зтом размер спрайта может
бить как совсем маленький (логотип канала в уголке зкрана), так и превьі-
шать размер кадра и "прокручиваться" (т. е. в качестве спрайта может бьіть
задан фон, а небольшие видеообьектм, например голова диктора, будут на
него накладмвать). Зто дает значительную гибкость при создании МРЕС-4-
фильмов и позволяет заметно уменьшить обьем кодируемой информации.
Обьектно-ориентированная работа с потоком данних. Теперь работа
с потоком данньїх становится обьектно-ориентарованной. При зтом даннме
могут бьггь живим видео, звуковими даннмми, синтетическими обьектами
и т. д. Из них создаются сценм, отими сценами можно управлять. Для про-
стих смертних при зтом мало что изменится, однако для программистов
обьектная среда означает кардинальнеє упрощение работьі с возникающими
сложнмми структурами.
Помещение в поток двоичного кода "С++ подобного" язика ВІГ8.
С помощью ВІГ8 в поток добавляютея описання обьекгов, классов обьекгов
и сцен. Также на нем можно менять координати, размерм, свойства, пове-
дение и реакцию обьекгов на действия пользователя. В своє время ГІазЬ
бмл назвав революцией 20 графики в Интернете. Аналогичнмй прорив в
области видео совершает МРЕО-4.
Активная зрительская позиция. Как бьіло замечено вмше, ВІЕ8 позво-
ляет задавать реакцию обьекгов сценм на действия пользователя. Потенци-
ально возможно удаление, добавление или перемещение обьекгов, ввод ко-
манд с клавиатурм. Собмтийная модель заимствована из развивавшегося
уже долгое время язмка моделирования виртуальной реальносте УКМЬ.
Для тех, кто играл в написаннме на УКМЬ игрм, очевидно, что в МРЕ6-4
будет совершенно реально создавать "квест"-подобнме (и не только) игрм.
Широчайший простор открмваетея для создания обучающих и развлека-
355
Книга написана коллективом К((р:/Лу\у\у.сотрге‘і‘ііоп.і'и/
Методи сжатия данних(7000+ файлов о сжатии)
тельннх програми. Представляєте, скачиваете из Интернета один файл, ко-
торьій сразу в себе содержит все, что необходимо для небольшого курса
лекций, причем вьі можете прослужать его, видя говорящую голову препо-
давателя, или, отключив его, увеличить фрагменти (спрайтьі) с материала-
ми. А в конце - пройти короткий тест на понимание предмета. Кстати, в
стандарте предусмотрена обработка команд на стороне сервера, т. е. про-
грамма-просмотрщик может отослать данние на сервер и получить оттуда
оценку. Отличие от предидущих стандартов революционное.
Синтезатор лиц и фигур. В стандарт заложен интерфейс к модулю син-
теза лиц и фигур. Например, в файле сохраняются ключевьіе данние о про-
филе лица и текстури лица, а при записи фильма сохраняются только козф-
фициенти изменения форми. Для передач типа новостей зтот прием позво-
ляет в десятки раз сократить размер файла при замечательном качестве.
Сйнтезатор звуков и речи. Помимо синтеза лиц в стандарт МРЕ6-4
также заложени алгоритми синтеза звуков, и даже речи(!).
Улучшенньїе алгоритми сжатия видео. В стандарте предусмотренн
блоки, отвечающие за потоки 4.8-65 Кбит/с с прогрессивной разверткой и
большие потоки с поддержкой чересстрочной развертки. Для передачи по
ненадежннм каналам возможно использование помехоустойчивнх методов
кодирования (за счет незначительного увеличения обьема передаваемих
данньїх резко снижается вероятность искажения изображения). При переда-
не видео с одновременним просмотром заложена возможность огрубить
изображение, если декодер из-за ограничений канала связи не успевает по-
лучить всю информацию. Всего в стандарт заложено 3 уровня детализации.
Зта возможность позволит легко адаптировать алгоритм для трансляций
видео по сети.
Поддержка профилей на уровне стандарте. Понятно, что реализация
всех возможностей стандарта превращает декодер в весьма сложную и
большую конструкцию. При зтом далеко не для всех приложений необхо-
димьі какие-то сложньїе специфические функции (например, синтез речи).
Создатели стандарта поступили просто: они оговорили набори профилей,
кажднй из которьіх включает в себя набор обязательньїх функций. Если в
фильме записано, что ему для проигрмвания необходим такой-то профиль и
декодер зтот профиль поддерживает, то стандарт гарантирует, что фильм
будет проигран правильно.
Вьіше кратко перечисленьї некоторне отличия МРЕО-4 от предидущих
стандартов. Надо отметить, что на момент создания стандарта острой по-
требности в описаннмх вьіше вещах еще не бьіло. Иначе говоря, мм имеем
дело с хорошо продуманной работой по формированию стандарта, которая
бьіла закопчена к тому времени, когда в нем возникла первая необходи-
мость.
356
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раздел 3. Алгоритми сжатия видео
Создателями МРЕО-4 учтен опит предшественников (в частности,
УКМЬ), когда слишком раннєє появление стандарте и отсутствие в нем ме-
ханизма профилей серьезно подорвало его массовое применение. Будем на-
деяться, что массовому применению МРЕО-4 такие проблеми не грозят.
Характеристики МРЕС-4:
Поток, разрешение: 0,0048-20 Мбит/с, поддерживаются все основ-
нме стандарти видеопотоков.
Плюси: поддержка достаточно прогрессивньїх звукових стандартов,
високая степень универсальности, поддержка нових технологий (различ-
нне види синтеза звука и изображения).
Минуси: високая сложность реализации.
Сравнение стандартов
Название Годьі Разрешения и поток Аудио Применение
МРЕО-1 1992 352x240x30, 352x288x25, 1.5 Мбит/с МРЕО-1 ЬауегІІ УійеоСО первого поколених
Н.261 1993 352x288x30, 176x144x30, 0,04-2 Мбит/с (рх64 Кбит/с, где р от Ідо 30) Аппаратно реализован- ньіе кодеки, видеоконфе- ренции
МРЕО-2 1995 Универсальньїй, 3-15 Мбит/с МРЕО-1 ЬауегІІ, ОоІЬу Оцріаі5.1, ОТ8 ПУП
Н.263 1998 зиЬ-ОСІР, ОСІР, СІР, 4СІР, ІбСІРина- страиваемьіе особо Поддерживается Аппаратно реализован- ньіе кодеки, видеотеле- фоньї, ви- деоконфе- ренции
МРЕО-3 не принят 1993- 1995 Телевидение вьісокой четкости, 20-40 Мбит/с НОТУ
МРЕО-4 1999 Универсальньїй, 0,0048-20 Мбит/с МРЕО-1 ЬауегІІ, МРЕО-1 ЬауегІІІ, ЮоІЬу ОІ£ІІа1 5.1, ОТ8 УібеоСО второго поколених
357
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.ги/
МвтоЛм сжатия данньїх <7000+ файлов о сжатии)
Название За счет чего достигается сжатие Дополнительньїе возможности
МРЕО-1 ІСТ, ОСТ
Н.261 ІСТ, ост, мс Передача потока данних по р-кана- лам с пропускной способностью 64 Кбит (телеконференции по не- скольким телефонним линиям)
МРЕО-2 ІСТ, ост, мс
МРЕО-4 ІСТ, \Уауе1еі, МС, спрайтм, обьектм с прозрачнмм фо- ном, 34-рендеринг Встроенншй язик описання ВІР8, синтезатор речи, функции анимации лиц, ЗО-рендеринг и т. д.
Вопросьі для самоконтроля
1. Какие параметри над о определить, прежде чем сравнивать два алгорит-
ма сжатия видео?
2. Приведите примерьі ситуаций, когда архитектура компьютера дает пре-
имущество тому или иному алгоритму сжатия видео.
3. Какими свойствами видеопотока мьі можем пользоваться, создавая алго-
ритм сжатия? Приведите примерьі.
4. Что такое аудиовизуальная синхронизация? Почему вьіполнение ее тре-
бований значительно снижает степень сжатия?
5. Назовите основньїе требования к алгоритмам сжатия видео.
6. Что такое І-кадрм, Р-кадрм?
7. Приведите примерьі программно-аппаратной реализации алгоритмов
сжатия видео (повседневньїе и достаточно новьіе).
8. Приведите примори областей использования видео, НЕкритичнмх к тре-
бованию "устойчивости к ошибкам".
ЛИТЕРАТУРА
1. Ье Саіі О. ТЬе МРЕС Уісіео Сотргеззіоп АІ^огійші // Зіцпаї Ргосеззіпд:
Іта^е Соттипісаііоп. 1992. Уоі. 4, № 2. Р. 129- 140.
2. ІУаІІасИ О. 8., КипараШ 8., Сокеп М.Р. Ассеїегаіеб МРЕО сотргеввіоп оГ
Оупатіс роїі^опаї зсепев // АСМ. Іип 1994.
3. РАР-статья по МРЕО. Уег 2.0-3.0. Мау 1993. РНАОЕ 8ОГТ5УАКЕ. Вег-
Ііп.
4. Ілои Міп%. Оуєгуієау о£ йіе рх64 кЬіі/в уісієо сосііп^ зіапсіагі // Соттипіса-
ііоп оГАСМ. Аргії 1991. Уоі. 34. № 4.
5. Апііегзоп М. УСК циаііїу уібео аі 1,5 МЬіІ/в И ІЧаііопаї Соттипісаііоп
Еогит. СЬіса^о, Осі. 1990.
358
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Раїдм 3. Альоритньї сжипші
6. СНеп С. Т. ап<1 Іе Оаіі О.А. А КіЬ огіег асіарііуе ігапвГогт сосііп$ аІдогііЬт
іог кідЬ-іїсіеІііу гесопвігисііоп оГ зіііі іта^ез // Ргосеедіп^в о£ іЬе 8РІЕ. Зап
Піедо, Айв. 1989.
7. Соііпк оГ тоуіпв рісіигез апсі азвосіаіед аидіо // Соттіііее ОгаЙ о£ Зіап-
йагі 18011172:18О/МРЕО 90/176 йес. 1990.
8. ЗРЕО сіі£ііа1 сотргеввіоп апсі сосііпв о£ сопііпиоиз-іопе віііі ітавез. 180
10918.1991.
9. Уісіео содес £ог аисііо уіаиаі аегуісеа аі рх64 КЬіі/з. ССІТТ Кесоттепсіа-
ііопН.261.1990.
Ю.МРЕО ргороааі раскаде сіеасгірііоп. Ооситепі І8ОЛУО8/МРЕ6 89/128.
Зиіу 1989.
П.ІпіетаііопаІ Теїесоттипісаііоп ІЗпіоп. УіЙео Сосііпв Гог Ьоху Віігаіе
Соттипісаііоп, ІТІЗ-Т Кесоттешіаііоп Н.263.1996.
12.ЯТР Рауіоад Роппаі Гог Н.263 Уісіео Зігеатз, Іпіеі Согр. Зері. 1997.
Ь«р://іумлу.йиі8.ог8/гіс8/гіс219О.Ьіт1.
13. МіісНеІІ Л, РеппеЬакег И'.В., Ро& С.Е. ап<1 Іебаїї "МРЕС Уісіео
Сотргеввіоп Зіапдагд" // Оі^іиі Миііітедіа Зіапсіагсів Зегіез. Мєху ¥огк,
К¥:СЬартап&На11,1997.
И.НазкеІІ В. О., Ригі А. апсі Меігауаіі А. N. ОІ£Ііа1 Уісіео: Ап Іпігойисііоп іо
МРЕО-2 // 18ВК 0-412-08411-2. Ке\у ¥огк, И¥: СЬартап & Наїї, 1997.
15.1таве апсі Уісіео Сотргеввіоп Зіапсіагсіа АІвогіЙшів апд Агскііесіигеа,
8есопсі Есііііоп Ьу Уааисіеу ВЬаакагап. Возіоп НагсІЬоипсі: К1и\уег
Асасіетіс РиЬІізкегз, 472 р.
Іб.ЯЬга Т.. МРЕО-4 Уегу Ьову Вії Яаіе Уісіео // Ргос. ІЕЕЕ І8СА8 Соп-
Гегепсе, Ноп£коп£, Зипе 1997. Иіф://члумгат.ЬЬі.сіе/тре8-уідео/рарег8
/8Ікога/у1Ьу.Ьіт.
17. Као К. В. апЛ їір Р. Оізсгеіе Совіпе ТгапзГопп - АІвогііЬтв, АсІуапОДез,
Арріісаііопа // Ьопдоп: Асасіетіс Ргеза, 1990.
18.І8О/ІЕС ЛС1/8С29ЛУО11 N4030 Оуєгуієау оПЬе МРЕО-4 8іап4агд //
Уоі. 18 - 8іп&ароге Уегзіоп, МагсЬ 2001. Ьіір://тре£.іе1есотііа1іа1аЬ.сот
/зіапсіаг<іа/пфек-4/трев-4.Ьіт.
19.18О/ІЕС 1ТС1/8С29/У/О1Ш МРЕО-4 Уідео Ргеяиепііу Авкей Оиевііопз //
МагсЬ 2000 ЬПр://тре8.іе1есотііа1іа1аЬ.сот/£ая/тр4-уісі/тр4-уі(і.Ьіт.
20. ІЮ. СЬаігтап о£ Зійду Огоир 11. ТНе пєху арргоасЬез іо чиаіііу азаеазтепі
апсі теавигетепі іп сіівііаі Ьгоадсазііп^. Оос. 10-110/9,6. ОсіоЬег 1998.
21. Кикп Реіег, АІ£огііЬтв, Сотріехііу Апаїузів апд Уіві АгсЬііесіигез іог
Мре£-4 Моііоп Еаіітаііоп // Возіоп НагсІЬоипсі: Кіихуег Асасіетіс
РиЬІізЬегз, іипе 1999.18ВИ 0792385160,248 р.
22. Цифровое телевидение // Под ред. М. И. Кривошеева. М.: Связь, 1980.
359
Книга написана коллективом ййр:/Лууууу.сотрге88Іоп.ги/
Методьі сжатия данньїх (7000+ файлов о сжатии)
23. Кривошеев М. И. Основні телевизионнмх измерений. 3-є изд., доп. и пе-
рераб. М.: Радно и связь, 1989.
Ссьалки на программьі и реализации алгоритмов
24. ОрепВІуХ Рог \Уіп<іоуу8, Ьіпих и т. д. - качественньїй открмтнй кодек
МРЕО-4) Ьйр://хууу\у.ргоіесІтауо.сот/рго)ес(8/
25. МРЕО4ІР: Орел Зоигсе МРЕО4 епсодег & десодег - другой вариант
МРЕО-4-декодера, доступний для изучения в исходнмх текстах
Ьир:/Л¥\¥жтре£4ір.пеі/
26. Ореп-8оигсе ОпЗ кодек - открмтая часть проекта ОК2, коммерческий
кодек, тексти которого открмти для модификаций всеми желающими
Ьйр://іуи^¥.урЗ .сота/
27. Универсальнмй конвертер УіїїиаЮиЬ, Орел Зоигсе.
Ьир://«п¥іу.уігіиа1<іиЬ.ог8/
28. РиЬІіс Зоигсе Сосіе Кеіеазе оГ МаісЬіп^ Ригвиіі Уісіео Содес 1ійр://\¥\у\у-
уі(іео.еес8.Ьегке1еу.е<1и/<іо5¥п1оа<і/тр/
29. Исходнме тексти МРЕО, ЗРЕО и Н.261 (простме варианти) Ьйр://іудуду-
8еІ.£тсі.(іе/ЕГ)8/8УОІ8/(іе8І8пепу/арр1ісаііоп8/апа1у5І8/
360
1і((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
ПРИЛОЖЕНИЯ
П-1. Контекстньїй компрессор Оитту
/* Контекстний компрессор Оитту, автор М.Смирнов.
* Исходньїй текст зтой программьг также можно найти на сайї
* Ьіір://сотргеззіоп.дгарИісоп.ги/
*
* Применение:
* е іп£і1е оиЬііІе - закодировать іпіііе в оиЬііІе
* сі іпіііе оиііііе - декодировать іпіііе в оиЬііІе
*/
ііпсіисіе <зЬсііо.Ь>
/* Класе для организации ввода/внвода данних */
сіазз ОГіїе {
ГІЬЕ *£;
риЬІіс:
іпі КеайЗутЬоІ (уоісі) {
геіигп деіс(£);
);
іпС ИгіЬеЗутЬоІ (іпС с) (
геіигп риіс(с, £);
};
ГІЬЕ* Сергіїв (уоісі) {
геЬигп £;
)
уоід ЗеіГіїе (ГІЬЕ *£і1е) {
£ = £і1е;
}
) Оа£аГі1е, Сотргеззеагіїе;
/* Реализация гапде-кодера, автор Е.Шелвин
* Ьіір://мии.ріїаЬз.огд.иа/зЬ/агідетоб.гір
*/
£уреде£ ипзідпесі іп£ иіпі;
#<іе£іпе ЛО(п) £ог (іпі _=0; _<п; _++)
#<іе£іпе ТОР (1«24)
сіазз КапдеСобег
{
иіпі сосіе, гапде, ЕГИит, СасЬе;
_іп£б4 Іон; // Місгозоіі С/С++ 64-Ьі£ іпЬедег £уре
/ГШЗГ/ПЮ
361
Книга написана коллективом 1Шр:/Лууууу.сотрге88Іоп.ги/
Ійтоамсутітааннмх(7000+файлов о сжатии)
ГІЬЕ *£;
риЬІіс:
уоіа ЗїагїЕпсойе ( ЕІЕЕ *оиї. )
{
Хом-ЕГМит-СасИе-О; гапде-(иіп£)-1;
£ - оиї;
}
уоіа 5Наг£Оесоае( ГІЬЕ *іп )
{
соае-0;
гапде-(иіпї.)-1;
£ - іп;
00(5) себе-(сосіе«8) І де£с(£);
}
уоіа ГіпізЬЕпсоае( уоіа )
(
Хом+-1;
00(5) знітом ();
}
уоіа гіпізьоесоае< уоіа ) о
уоіа епсоае(иіпі. сшпЕгед, иіпї £гед, иіпС ЬоНГгед)
{
Хом +- ситЕгед * (гапде/- НоНЕгед);
гапде*- £гед;
мНі1е( гапдесТОР ) 8Иі£і;Еои(), гапде«-8;
}
іпііпе уоіа 5Иі£НЬои( уоіа )
<
і£ ( (1ом»24) !-0хГГ ) {
риНс ( СасНе + (1ом»32), £ );
іпі. с - 0хГГ+(1ои»32) ;
мНі1е( ЕТМит ) ри£с(с, £), ГЕМит—;
СасНе - иіпН (Хом) »24;
} еХзе ГГМит++;
Хом - иіпН(Хом)«8;
)
иіп£ деЬ_£гед (иіпС йоНГгед) {
геЬигп еоае / (гапде/- СоЬГгед);
)
уоіа аесоае ирааїе (иіп£ ситГгед, иіп£ £гед, иіпі: £оХЕгед)
{
362
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Пршюжния
сосіе -= сиіпГгед* гапде;
гапде *= ігед;
иЬіІе ( гапде<ТОР ) сосіе= (сосіе«8) | деЬс (£), гапде«=8;
}
} АС;
/* конец реализации гапде-кодера */
/* Структури данних, глобальнне переменнне, константи */
зігисі: СопбехіМосіеІ {
іпб езс,
ТобГг;
іпб соипб[256);
};
СопбехбМосіеІ ст[257],
*збаск[2];
іпі сопбехб [1],
ЗР;
сопзб іпі. МАХТобГг = 0хЗ£££;
/* Собственно реализация компрессора */
уоісі іпіб_тосіе1 (уоісі) {
£ог ( іпб з = 0; з < 256; з++ )
ст[256].соипб(З] = 1
ст[256].ТобГг = 256;
ст[256].езс = 1;
сопбехб [0] = ЗР = 0;
}
іпб епсосіе_зут (СопбехЬМодеї *СМ, іпб с) {
збаск [ЗР++] = СМ;
і£ (СМ->соипї[с]){
іпб СитГгедОпдег = 0;
іог (іпб і = 0; і < с; і++)
СитРгедОпсіег += СМ->соипб [і];
АС.епсосіе (СитГгедІІпсіег, СМ->соипі [с],
СМ->ТобГг + СМ->езс) ;
геіигп 1;
)е1зе{
і£ (СМ->езс){
АС.епсосіе (СМ->ТоїГг, СМ->езс, СМ->ТобГг +
СМ->езс);
)
363
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.ги/
МшлоЛш сжатия данних (7000+ файлов о сжатии)
геЬигп 0;
іпї десосіе_8ут (Соп^ехСМосіеІ *СМ, іпС *с) {
зїаск [ЗР++] = СМ;
і£ (!СМ->езс) геГигп 0;
іп£ сит_£гед = АС.деЬ_£гед (СМ->То£Ег + СМ->езс);
і£ (сит_£гед < СМ->То£Гг){
іп£ СитГгедОпсіег = 0;
іпі: і = 0;
£ог (;;) {
і£ ( (СитЕгедОпсіег + СМ->соип1: [і]) <= сит_£гед)
СитГгедСпсіег += СМ->соипї[і];
еізе Ьгеак;
)
АС.десосІе_ирсіаСе (СитЕгедСпдег, СМ->соип£[і],
СМ->То1:Рг + СМ->езс);
*с = і;
геЬигп 1;
]е1зе{
АС.<іесо<іе_ирсіаІ:е (СМ->ТоЬЕг, СМ->езс,
СМ->То£Ег + СМ->езс);
геїигп 0;
уоісі гезсаіе (СопСех^МобеІ *СМ) {
СМ~>То£Ег = 0;
£ог (ігЛ. і - 0; і < 256; і++) {
СМ->соип£[і] -= СМ->соипк(і] » 1;
СМ->ТоСГг += СМ->соип£[і];
уоісі ирдайе_тоде1 (іпЬ с) {
иИііє (5Р) {
ЗР—;
і£ (зСаск[ЗР]->ТоСРг >- МАХ_ТоСЕг)
гезсаіе (зЬаск[ЗР]);
з<:аск[ЗР]->ТоСЕг += 1;
і£ (!з£аск[ЗР]->соипЬ[с])
з£аск[ЗР]->езс += 1;
зСаск[ЗР]->соипС[с] += 1;
уоісі епсосіе (уоісі) (
364
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
___________________________________________Лриложемця
ІПС с,
зиссезз;
іпіс_тосІе1 ();
АС. 3£аг£Епсосіе (СотргеззедЕіІе. СеНГіІе ()) ;
иЬііє (( с = Оа£аГі1е.КеасіЗутЬо1 () ) != ЕОГ) {
зиссезз = епсосІе_зут («.ст[соп£ех£ [0] ], с);
і£ (.'зиссезз)
епсоде_зут (&ст[256], с);
ир<іа1:е_тосіе1 (с);
соп£ех£ [0] = с;
}
АС.епсосіе (ст[соп£ех£ [0] ] .То£Гг, ст[соп£ех£ [0] ] .езс,
ст[соп£ех£[0] ] .ТоЬЕг + ст[соп£ех£[0] ] .езс) ;
АС.епсосіе (ст[256].То£Гг, ст[25б] .езс,
ст[25б] .Тої-Гг + ст[256].езс);
АС.ГіпізЬЕпсосіе ();
)
УОІЙ сіесосіе (УОІСІ) {
іп£ с,
зиссезз;
іпі£_тосіе1 ();
АС. З Саг £0е сосіе (СотргеззедЕіІе.СеСГіїе()) ;
£ог (;;) {
зиссезз = с1есосіе_зут (&ст[соп£ех£[0]], &с);
і£ (!зиссезз){
зиссезз = йесоде_зут (&ст[256], &с);
і£ (!зиссезз) Ьгеак;
)
ирдаС.е_тодеі (с);
сопйехі: [0] - с;
0а£аЕі1е.ИгіЬеЗутЬо1 (с);
уоісі таіп (іпї агдс, сЬаг* агду [ ]) {
ГІЬЕ *іп£, *ои££;
і£ (агду[1][0] == 'є') {
іп£ = Гореп (агду[2], "гЬ");
ои££ » Гореп (агду[3], "иЬ");
СаїаЕі1е.Зе£Гі1е (іп£);
СотргеззесіЕіІе.ЗеґГіїе (ои££);
епсосіе ();
£с1озе (іп£) ;
£с1озе (ои££);
)е1зе і£ (агду[1] [0] == '<!'){
іп£ - £ореп (агду[2], "гЬ");
оиї£ = £ореп (агду[3], "иЬ");
365
Книга написана коллективом 1Шр:/Лууууу.сотрге88Іоп.ги/
Методи сжатия данньїх(7000+ файлов о сжатии)
СотргеззедГіїе.ЗеЕЕіІе (іп£);
ВаЕаЕіІе.ЗеЕГііе (ои££);
йесосіе () ;
Гсіозе (іп£);
£с1озе (оиЕ£);
}
}
П-2. Сжатие цветного изображения
Сжатие двуцветного изображения
Ватолин Д.С. Ватолин Д.С.
Алгоритми Алгоритми
сжатия сжатия
изображений изображений
В рамках курсе Врамкахкурса
Ю.М.Баяковскоао "Машинная» арафика-2" Ю.М.Баякоаскоао "Машинная» графика~2"
Изображение 1000x1000x2 цвета
125.000 байт
Изображение 1000x1000x2 цвета
125.000 байт с внесеннями в него
помехами
Ниже приведена степень компрессии изображений в зависимости от
применяемого алгоритма.
Алгоритм НЬЕ Алгоритм 12УУ ССІТТ Сгоир 3 ССІТТ Сгоир 4
Без помех 10,6 (ТІРР-ССІТТ КЬЕ) 6,6 (ТІРР-РаскВііз) 4,9 (РСХ) 2,99 (ВМР) 2,9 (ТОА) 12 (ТІРР-Ь2\У) 10,1 (СІР) 9,5 (ТІРР)
с поме- хами 5 (ТІРР-ССІТТ КЬЕ) 2,49 (ТІРР-РаскВіїв) 2,26 (РСХ) 1,7 (Т6А) 1,69 (ВМР) 4,7 (ТІРР) 5,12 (ТІРР)
366
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Припожвния
Виводи, которие можно сделать, анализируя данную таблицу:
Лучшие результати показал алгоритм, оптимизированний для зтого
класса изображений ССІТТ Огоир 4, и модификация универсального ал-
горитма Ь2Л¥.
Даже в рамках одного алгоритма велик разброс значений алгоритма
компрессии. Заметим, что реализации КЬЕ и для ТІЕР показали за-
метно лучшие результати, чем в других форматах. Более того, во всех
колонках все вариантм алгоритмов сжатия, реализованние в формате
ТІРР, лидируют.
Сжатие 16-цветного изображения
Изображение 619x405x16 цвета 125 350 байт
В таблице приведена степень компрессии изображений в зависимости от
применяемого алгоритма.
Алгоритм ВІЕ Алгоритм ІХ№І
Первое изображение 5,55 (ТІРР-РаскВіів) 5,27 (ВМР) 4,8 (ТОА) 2,37 (РСХ) 11 (ТІРР-Ь2)¥)
Вивод, которнй можно сделать, анализируя данную таблицу: несмотря
на то что данное изображение относится к классу изображений, на которие
ориентирован алгоритм КЬЕ (отвечает критериям "хорошего" изображения
для алгоритма КЬЕ), заметно лучшие результати для него дает более уни-
версальний алгоритм
367
Книга написана коллективом 1Шр:/Лууууу.сотрге88Іоп.ги/
Метадьі сжатия данньїх (7000+ файлов о сжатии)
Сжатие изображения в градациях серого
Изображение 600x700x256 градаций
серого сразу после сканирования.
420.000 байт
То же изображение с вьіровненной
гистограммой плотности серого
На гистограмме хорошо видни
равномерние большие значення в
области темних и "почти бельїх"
После виравнивания пики єсть только
в значениях 0 и 255. В изображении
присутствуют далеко не все значення
тонов
яркости
Алгоритм КЬЕ Алгоритм ЬХШ Алгоритм ЗРЕС
Ори- гинал 0,99 (ТІРР-РаскВіїз) 0,98 (ТОА) 0,88 (ВМР) 0,74 (РСХ) 0,976 (ТІРР-Е2АУ) 0,972 (СИР) 3,7 (ЗРЕС ч=30) 2,14 (ЗРЕС ч=100)
После обра- ботки 2,86 (ТІРР-РаскВііх) 2,8 (Т6А) 0,89 (ВМР) 0,765 (РСХ) 3,02 (ТІРР-Ь2\У) 0,975 (ОІР)1 6.ЯЯН0) 3,7 (ЗРЕС 4=30) 2,4 (ЗРЕС 4=100)
1 Для формата СІР в зтом случае можно получить изображение меньшего раз-
мера, используя дополнительньїе параметри.
368
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Приложений
Вьіводьі, которме можно сделать анализируя таблицу:
Лучшие результати показал алгоритм сжатия с лотерей информации.
Для оригинального изображения только ІРЕО смог уменьшить файл. За-
метам, что увеличение контрастносте уменьшило степень компрессии
при максимальном сжатии - врожденное свойство ІРЕ6.
Реализации КЬЕ и Ь2\У для ТІГГ опять показали заметно лучшие ре-
зультати, чем в других форматах. Степень сжатия для них после обра-
ботки изображения возросла в 3 раза(!). В то время как ОІР, РСХ и ВМР
и в зтом случае увеличили размер файла.
Сжатие полноцветного изображения
Изображение 320х320хНСВ — 307 200 байт
Ниже приведена степень компрессии изображений в зависимости от
применяемого алгоритма.
Алгоритм КЬЕ Алгоритм Алгоритм ЗРЕ6
Первое изображе- ние 1,046 (ТОА) 1,037 (ТІРР- РаскВііз) 1,12 (ТІРР-Ь2)У) 4,65 (ОІР) С потерями! Изобра- жение в 256 цветах 47,2 (ЗРЕО 4=10) 23,98 (ЗРЕО 4=30) 11,5 (ЗРЕО 4=100)
Вьіводьі, которме можно сделать, анализируя таблицу:
Алгоритм ІРЕС при визуально намного меньших потерях (ц=100) сжал
изображение в 2 раза сильнеє, чем Ь2ХУ с использованием перевода в
изображение с палитрой.
Алгоритм Ь2\У, примененньїй к 24-битовому изображению практически
на дает сжатия.
Минимальное сжатие, полученное алгоритмом КЬЕ, можно обьяснить тем,
что изображение в нижней части имеет сравнительно большую область од-
нородного белого цвета (полученную после обработки изображения).
369
Книга написана коллективом 1Шр:/Лууууу.сошрге88Іоп.ги/
(7000+ файлов о сжатии)
Методи сжатия данних
Сжатие полноцветного изобр=---"“ _
320х320хКСВ - 307 200 байт
Сжатиі
Сжатие в 100раз (3.04Кб)
фрактальньїм алгоритмом
На данном примере хорошо видно, что при високих *.
сии алгоритм ІРЕО оказьівается полностью неконкурентос,
ство изображения для фрактального алгоритма визуально н.
чем у \уауе1еІ-алгоритма, однако для него не используется ш.
изображения (достаточно "разумное" сглаживание), из-за которо
вого алгоритма размьіваются мелкие детали изображения.
370
К((р://уууууу.сотргеззіоп.ги/ (7000+ файлов, 850Мб о сжатии)
УКАЗАТЕЛЬ ТЕРМИНОВ
7
7-Хір • 115,262
сРРМП • 172
С8-АСЕБР • 62
СТО • 179
л*
АЬгаЬатзоп 176
АСЕ -116,262
АСТ • 14
АО8М • 176
АгсЬіує Сотрагізоп Тезі - См. АСТ
АКНАМОЕЬ • 174,247
АК5 •116
АК12-116
АКТезі • 14
А8СІІ • 7
В
ВеІІ-78,90
Вепсіег • 90,110
Вепі1еу-8е<І£есуіск -213
ВІР8 355
ВієпсНпе -128
Віоот • 90,174
ВМР • 177
ВМР • 333,334
Воа- 174
Вгепі 90
Вгоадсазііп£ • 277
Вштоууз - МПіееІег ТгапзГогт • 183
В5УТ- 183,229,230,235
САВАКС - 108,115,116,262
Саі^агу Сотргеззіоп Согриз, Са1§СС • 12
СапіегЬигу Сотргеззіоп Согриз,
СапіСС • 14
ССІК-601 • 353,354
ССІТТ Огоир 3 • 34,278, 297, 298
СЕЬР•62
СІР • 339
СМ • 168
Сопіехі ІГЄЄ ^ЄІ£ЙІІП£ • 179
о
ОАРС175,177 ,
ОС •‘^7,262
ОеЯаіе • 94
Оеіпіег1асіп£ • 354
Оеііа Содіп£ - 56
Оеіеппіпізііс зсаііп^ -162
ОНРС- 177
Оізіапсе Со(1іп£ 202
ОМС- 180
О\УТ • 326
Оупатіс Магкоу сотргеззіоп 180
Е
Еііаз сосіез • 23
Е1ЧІІС • 49
Епитегаііуе Сосііп£ • См. ЕМІС
Езсаре • 130,132
Еуеп-КодеЬ сосіез 26
Ехсіизіоп 133
Г
Репи-іск Реіег • 202
Ріаіа 90,112
РіЬопассі сосіез - 27
Ріпііе-сопіехі тодеііп^ -125
Риіі ирсіаіез • 153
-
ОІР -279, 297,310, 333
ОоІотЬ сосіез 25
Огеесіу рагзіп£ • 106
Огеепе-90,112
Я
Н.261 -351
Н.263 • 352
НА • 168
/1И4ЮГ7ІІИ0П
371
Книга написана коллективом ІШрї/Лууууу.сотргеззіоп.ги/
Методи сжатия данньїх (7000+ файлов о сжатии)
Негкіои- 174 Нігуоіа- 168 Ноап§- 91 Ьоззіезз ЗРЕС 303 Ьоззу сотргеззіоп • 7 ЬРС- 29,54 апаїузіз 62
І зупіНезіз 62
ІР8 • 311,312,315,317,319 Ітр- 116 ІМР 262 Іпґо-2ІР- 103,116.,. Іпіетеі • 278 іпуєгзіоп Ргедиепсіез • 204 І8О- 302,306,310,335 Ісегасесі Рипсііоп Зузіет • 311 оптимальная модель 59 синтез моделей • 63 ) ЬІШ- 113 Ьуарко- 174 ’ Ь2- 291,292 Ь277 • 77,78,79 Ь277-РМ • 91,113 Ь278 • 77,87 Ь2В• 90
У ЗАК- 116,247 ЗВІЄ- 302,303,332 ЗРЕС- 277,306,320,335 ЗРЕС 2000- 324 ЗРЕС-2000- 323 Зип£ • 116 Ь2ВУ/- 90,110 Ь2СВ • 90 Ь2РС • 90,112 Ь2РС-РМ- 91,113 Ь2Н- 90 Ь2М\У- 90 Ь2Р- 91 Ь2ЮУ1 • 90
к Каа • 94 Корт.А. • зо Ь288- 83 Ь2\У • 90,95,278,279,291,292,297 Е25У-РМ- 91,113
£ Ь2Х • 115
Ь2мера- 318 М
Ьапдсіоп 119,175 Ьагу таісЬіпв • 104 Маісй 1еп£іЬ • 79 МЕЬР • 62
Ьетке- 116 Ьетреї • 77 Ьепвйі Іпгіех Ргезегуіпд ТгапаГогтагіоп • См. ЬІРТ ЬРР- 107 ЬСНА- 174 Ьіпеаг Ргесіісііоп Содіп^ См. ЬРС ЬІРТ- 252 МісгозоЙ- 116 Міііег- 90 ММХ- 278 Моїіоп-ЗРЕС • 344,350,351 Моує То Ргопі • См. МТР МРЕС-1 • 343,351 МРЕС-2- 343,353
Ьосаі Огдег Езіітаііоп • См. ЬОЕ ЬОЕ- 156,169 МРЕС-4 • 343,354 МТР- 193
ЬОЕМА- 175 N
Ьоп§ • 91 Ьоп^езі Ргадтепі Рігзі См. ЬРР п-граф • 248
ЬоокаИеасі ЬиЙег • 79 О
ЬоЗЗІЄЗЗ сотргеззіоп • 7 Ойзеї- 79
372
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Указатяль термшюе
Р
Рагаііеі Віоскв 8огііщ> См. РВ8
Рауіоу-116
РВ8-29,30,51,229
РСХ • 290,333,334
ріхеї -319
Ріхеї • 273
РЮУАКЕ -116
РК2ІР-94,116
РРМ-93,131,133
РРМФ-154,165
РРМ А -143,177
РРМВ • 143,177
РРМС • 143
РРМй-146,172
РРМО • 143
РРМП • 172
РРМИ • 160,170,247,262
РРМопзіг- 146,172
РРМУ172
РРМ2- 144,174
Ргесіісііоп Ьу Рагііаі МаісЬіп§ • См. РРМ
Р8ЯК • 305
6
С2СІР • 339
Риапіігаііоп • 306
К
Кайіх вогііпй - 214
КАК-115,116
Кесепсу зсаііп^ 160
Кеог<іегіп£ -211
Кергевепіаііоп оПпОДегз 19
Кісе содез - 25
Ківзапеп • 119,175
КК- 169,247
ККСС- 169
КЬЕ • 195,289,291,304,334
КМ8 • 304
КоЬегіз • 175
Косіеіі • 26
КозЬаІ -116
К-битньїй злемент - 6
5
Засіакапе КипіЬіко - 215
8ВС • 247,262
8са1аг Риапіігаііоп 52
8сЬіп<ІІег Мікаеі - 202
ЗсІїіпЛег ТгапзРогт • 191
8ЕСАМ • 339
Зесопсіагу
Еісаре Емітаїіогі • См. 5ЕЕ
ЕутЬої Езіітаїіоп См. ЕЕЕ
8ЕЕ • 144
8ЕМ19,66
Зерагаіе Ехропепіз апсі Мапііззаз См.
8ЕМ
8ери1ігіп£ • 271
8ЕРІЛТОК-180
ЗЬеІшіеп • 172
ЗЬкагіп 172
Зтітоу • 170
8огі ТгапзГогтаііоп -191
88Е - 163
8Т • 229,230,235
Зіагі-зіер-зіор сосіев 27
Зіогег 83
8иЬЬапсІ Со<ііп£ 67 |
8иіїіх 5огііп£ 215
Зиііоп • 174
Згутапзкі • 83
у
Тауіог-169
Тескпеїузішп -116
ТСА • 291,334
ТІЕЕ -291,297,301,333,334,335
иНАКС • 174,247,262
ІІпісосіе • 8
Спізуз • 95
Спіуегзаі Сойіпб • 21
Цпіуегваї тосіеПіп£ апсі сосііп£ -119
Іірсіаіе ехсішіоп 153
рагйаі • 154
373
Книга написана коллективом йіір:/Лууууу.сошрге88Іоп.ги/
ММхмЬі смвтия денних (7000+ файлов о сжатии)
V
Уаіепііпі • 174
Уесіог риапііхаїіоп • 52
Уіііег • 91
УР-52
УКМЬ • 355
УУССТ • 14
IV
ХУауеІеі -279,321,322
АУе^тап 90
ХУеІсН • 90
ІУіІІіапк • 90,177
ЗУіпКАК • См. КАК
5¥іп2ір - 116
УУоІЕ-90, ПО
У/ОКО • 178
ЮПУ-275
X
XI 174
У
УВ8 262
УСгСЬ • 307
УЦУ-307
г
2І£ап$1ііп • 116,168
гір юз, не
2іу • 77
-
Абрахамсон • 176
Алгоритм • 15
Ьоззіезз }РЕО 65
РМа 64
Хаффмана • 207
Алгоритм Хаффмана 299
Алфавит • 8,33
Арифметическое сжатие • 36
Асимметричньїе приложения - 342
Атрибут•229
Аудиовизуальная синхронизация 339
Б
База
длиньї совпадения 98
смещения • 99
Байт•6
БарроузМайк- 183
Барроуза - Уилера преобразование - См.
преобразование >
Белл-78,90 '
Бендер • 90,110
Биграф • См. п-граф
Бит • 6
Блок - 6
Блочность • 349
Блум • 90,174
Брент • 90
Буфер упреждающий 79
Буферизация смещений -113
В
Валентини - 174
Вектор обратного преобразования 187
Векторное квантование - См. квантова-
ние
Вероятность ухода • 132,142
Взвешивание 128
неявнеє 130
Видеопоток• 339
Витгер • 91
Вулф • 90,110
Взйвлет-фильтр • 74
І^оломб • 25
Границь! диапазона допустимих
значений - 66
Грини • 90, 112
Данньїе -6
качественньїе • 7
количественньїе • 7
обьем б
Двоичная дробь- 38
374
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
термшюе
Двумерное аффинное
преобразование -314
Декодирование• б
Декомпрессия 6
Дельта-кодирование • 56,71
пример' 56
Джанг 116
ДййамйческЬе ма|>ковское сжатие • 180
Дискретное ууауеіеі-преобразование •
326
Дискретное взйвлетное преобразование
•73
ДКП • 307,308,340,348,349,354
Длина совпадения • 79
Длина соответствия См. длина совпа-
дения
Ж
Жадний разбор 106
Жимански-83
З
Зив • 77
Зиганшин • 116,168
Зигзаг-сканирование 308,346
Значащие цифри 19
- ——
Ивзн 26
Исключение • 133
Исключение при обновлений • 153
частичное • 154,162
Источник
данньїх - 120
Маркова 132
Источник данних • 8
Бернулли 8
Маркова 8
*
Кац • 94
Квантование
векторное • 52
скалярное • 52
Квантование козффициентов 306
Класе изображений • 273
Класе приложений • 274
Когерентності областей 338
Код-7
сминимальной избьіточностью - 33
слова - 32
злементарньїй - 32
Код завершення серии 298
КбТКонца инфорягашг 293 “ “.
Кодер-120 ..... ,г.
Кодирование • 6,32,11
1’2 • 198
алфавитное • 32
длин повторов • См. ЯІ£
интервальное • 43
линебно’предсказмвающее • См. ЦРС
нумеруючеє ’ См. ЕІЇ11С
расстояний - См. йізіапсв Сосііпф
статистическое -120
субполосное • См. БиЬЬап<1 Со<ІЇп%
универсальнов • 21
Кодировщик • 120.
Коди
Голомба • 25
Ивзна-Родз • 26
префикеньїе • 22
Райса '25
средняя длина' 17
старт-шаг-стоп 27
Фибоначчи • 27
Хаффмана - 96
Злиаса • 23,26,91
Компрессия б
Компрессор -120
Оитту • 142
РРМ-137
Контейнер 231
Контекст 65,125
активний 126
детерминированний • 154,161
дочерний 127
левосторонний -125
правосторонний • 125
•предок • 127
375
Книга написана коллективом Шір:/Лууууу.сошрге88Іоп.ги/
Методь, сжатия данньїх (7000+ файлов о сжатии)
разбросанний 170
родительский 127
ухода • 144
Контекстная модель • 126
детерминированная 146, 154
с замаскированними символами • 147
с незамаскированними
символами 146
уходов • 145
Контекстное
моделирование - 106,112,124
ограниченного порядка • 125
с полним смешиванием 128
с частинним смешиванием 128
чистеє порядка N • 127, 176
Контур • 246
Козффициент сжатия 9
—
Лемке 116
Лемпел • 77
Ленивое сравнение - 104
Лестничньїй зффект 321
Линейная комбинация - 54
Линейно-предсказьівающее
кодирование • См. ЬРС
Литерал • 79
Лонг•91
Лзнгдон • 119,175
Ляпко • 174
М
Макроблок • 345
Мантисса • 19
Масштабируемость • 340
Матрица циклических перестановок
185
Машина Барнсли -312
Метод • 15
Методи Зива - Лемпела • 77
Механизм уходов • 132
Миллер • 90
Моделирование 119
адаптивнеє 123
блочно-адаптивное 123, 168
контекстное ограниченного
порядка 125
полуадаптивное • 122
статическое 122
Моделировщик • 120
Модель
"аналоговий сигнал" • 67
иерархическая 207
источника данних 120, 127
структурная -207
шумовая 59
зволюционная • 59
Н
Накопленная частота • 136
Наследование информации - 158
отложенное 159
Неподвижная точка (аттрактор) - 314
Нормализация • 39
Нумерующее кодирование • См. ЕЇШС
О
Обработка данньїх предварительная
См. предобработка
Обратньїе частоти • 204
Обход плоскости • 62
ОВУ • 142
Оптимальний разбор -106,108
Оценка вероятности ухода -142
адаптивние методи См. 8ЕЕ
априорние методи • 142
метод А • 143, 176
метод В 143
метод С • 143
метод О 143
метод Р • 143
метод 8ЕЕ-СІ1 146
метод 8ЕЕ-СІ2 146
метод X-143
метод ХС 143
метод 2-144, 170
Ошибка предсказания - 55
минимизация 59
376
К((р://уууууу.сотрге88Іоп.ги/ (7000+ файлов, 850Мб о сжатии)
Указатель териинов
п
Павлов 116
Палитра • 273
Палитризация изображений - 54
Папоротник Барнсли -312
Параллельньїе блоки - 229
Перемещение стопки книг • См. МТР
Перестановка • 237
Переупорядочение символов -211
Поиск границ • 71,239
Полное обновление счетчиков • 153
Порядок модели РРМ 132,167
Последовательность злементов • 6
Постпроцессор • 246
Поток • 6
Предобработка • 246
Предсказание
наиболее вероятньїх символов 162
по частинному совпадению См. РРМ
Представление цельїх чисел • 19
Преобразование
Барроуза - Уилера 183
относительньїх адресов 262
сортирующее частичное 191
табличних структур • 266
Шиндлера 191
Преобразование блока - 11
Преобразование потока - 11
Препроцессинг • См. предобработка
Препроцессор • 246
Префикс слова • 32
Производная блока - 236
-
Разделение мантисс и зкспонент • См.
8ЕМ
Разжатие - 6
Разложение на полусуммм
и разности • 67
Размер блока в В^Т 209
Райс • 25
Распаковка•6
Редактируемость • 340
Рекурсивное сжатие '321, 332
Риссанен • 119, 175
Робертс •175
Родз•26
Рошал • 116
С
Садакане Кунихико -215
Саттон • 174
Свойство префикса 32
Сепулирование • См. 8ери1ігіп§
Серия•298
Сжатие
блока • 6
с потерями • 7
Сжатие параллельньїх потоков - 71
Символ•7
Символ ухода - 130
Символьї конца строки - 256
Симметричнне приложения • 342
Система К.ОВ • 273
Системи цветопредставления • 273
Скользящее окно - 78,239
СКС - См. символьї конца строки
Словарь • 75,247
классификация • 247
контекстно-зависимьій 112
скользящий • 78
Слово • 7
Смешивание • 128
Смещение • 79
Смирнов • 170
Сортировка
Бентли-Седжвика 213
бистрая • 213
используемая в В1¥Т 212
направление -211
параллельних блоков См. РВ8
поразрядная • 214
суффиксов -215
Составньїе (дополнительньїе) кодьі • 298
Сравнение
алгоритмов контекстного моделиро-
вания • 179
архиваторов Ь2- 116
архиваторов РРМ 174
377
Книга написана коллективом тір:/Лууууу.сошрге88іоп.ги/
Мвтодш сжатия ванних
(7000+ файлов о сжатии)
Статистическая стратегии • 11
Степень сжатия - 8
Сторер 83
Стратегии сжатия 11
Строки-7
Субполосное кодирование - См. ЗиЬЬапсі
Сосііпв
Схема-32
Тейлор 169
Теорема о кодировании
источника • 17,120
Тестовий набор -12
Тетраграф * См. п-граф
Треугольник Серпинского -312
Триграф • См. п-граф
Уилер Дзвид-183
Уилльямс • 90,177
Указатель • 79
Уменьшение шума 62
Упаковка • 6
Устойчивость к ошибкам 340
Узгнам • 90
Узлч • 90
Фрагментирование * 239
Фраза • 7
Фраза словаря • 75,247
Фрактал 312
Фрактальний алгоритм -311
Фрейм 233
Функция
адаптивная 236
отличия • 239
X
Характеристики
алгоритмов РРМ • 167
алгоритмов семейства 1277 • 94
алгоритмов семейства 1278 • 94
Херклоц * 174
Хеш-функция -103
Хирвола • 168
Хоанг-91
Ч
Частота злемента -231,235,239
Ф
Файзлз •90,112
Фенвик Петер • 202
Фибоначчи • 27
Фильтр
РаеіН • 64
вьібор • 65, 75
Формат
Ье/Іаіе • 94
Ш
Шелвин • 172
Шеннои • 17,120
Шиндлер Миказль • 202
Шкарин • 146, 158, 172
___
Зкспонента• 19
Злиас 23
Знтропия • 17
Зффект Гиббса 309
Зффективность сжатия 8
378
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
ОГЛАВЛЕНИЕ
)
Предисловие....................................................З
ВВЕДЕНИЕ......................................................... 5
Обзор тем.................................................... 5
Определения, аббревиатури и классификации методов сжатия.......6
Базовие определения.........................................б
Названих методов............................................9
Карта групп методов сжатия.................................10
Базовие стратегии сжатия...................................11
Сравнение алгоритмов по степени сжатия....................... 12
Замечание о методах, алгоритмах и программах..................15
РАЗДЕЛ 1. МЕТОДЬІ СЖАТИЯ БЕЗ ПОТЕРЬ..............................17
Глава 1. Кодирование источников данньїх без памяти............19
Разделение мантисс и зкспонент.............................19
Канонический алгоритм Хаффмана.............................31
Арифметическое сжатие.................................... 35
Нумерующее кодирование.....................................49
Векторное квантование......................................52
Глава 2. Кодирование источников данньїх типа
"аналоговий сигнал"...........................................54
Линейно-предсказивающее кодирование........................54
Субполосное кодирование....................................67
Глава 3. Словарние методи сжатия данньїх......................75
Идея словарньїх методов....................................75
Классические алгоритми Зива -Лемпела.......................77
Другие алгоритми 1,2............... .......................90
Формат Ое/Іаіе.............................................94
Пути улучшения сжатия для методов Ь2......................106
Архиваторьі и компрессори, использующие алгоритми Ь2......116
Вопроси для самоконтроля..................................117
Глава 4. Методи контекстного моделирования.................... 119
Классификация стратегий моделирования.....................122
Контекстное моделирование.................................124
Алгоритми РРМ.............................................131
Оценка вероятности ухода.................................. 142
Обновление счетчиков символов............................153,
Повииіение точности оценок в контекстних моделях високих порядков... 155
Различние способи повишения точности предсказания.........160
РРМ и РРМ*................................................165
Л4ЛОГ(ПП0И
379
Книга написана коллективом ййр:/Лууууу.сошрге88Іоп.ги/
Методи сжатия данньїх (7000+ файлов о сжатии)
Достоинства и недостатки РРМ...............................166
Компрессори и архиваторьі, использующие контекстнеє
моделирование..............................................168
Обзор классических алгоритмов контекстного моделирования...175
Сравнение алгоритмов контекстного моделирования............178
Другие методи контекстного моделирования...................179
Вопроси для самоконтроля...................................180
Глава 5. Преобразование Барроуза - Уилера.....................183
Преобразование Барроуза - Уилера...........................183
Методи, используемие совместно с ВМТ.......................192
Способи сжатия преобразованних с помощью ВМТ данних........205
Сортировка, используемая в ВЇУТ............................212
Архиватори, использующие В1УТ и БТ.........................220
Глава 6. Обобщенньїе методи сортирующих
преобразований................................................229
Сортировка параллельних блоков.............................229
Фрагментирование...........................................239
Глава 7. Предварительная обработка данньїх....................246
Препроцессинг текстов......................................247
Препроцессинг нетекстових данних............................ 262
Вопроси для самоконтроля...................................267
Вибор метода сжатия........................................268
РАЗДЕЛ 2. АЛГОРИТМИ СЖАТИЯ ИЗОБРАЖЕНИЙ...........................272
Введение....................................................... 272
Класси изображений.........................................273
Класси приложений..........................................274
Критерии сравнения алгоритмов..............................278
Методи обхода плоскости....................................280
Вопроси для самоконтроля...................................288
Глава 1. Сжатие изображения без потерь........................289
Алгоритм КБЕ.................?.............................289
Алгоритм ...................................................291
Алгоритм Хаффмана..........................................297
2ВЮ........................................................302
Ьоззіезз ЗРЕО..............................................303
Заключение.................................................303
Вопроси для самоконтроля...................................304
Глава 2. Сжатие изображений с потерями........................304
Проблеми алгоритмов сжатия с потерями......................304
Алгоритм ЗРЕО..............................................306
Фрактальний алгоритм.......................................311
Рекурсивний (волновой) алгоритм............................321
380
К((р://уууууу.сотргеввіоп.ги/ (7000+ файлов, 850Мб о сжатии)
Римляни» ,
Алгоритм .ІРЕО 2000........................................323
Заключение.................................................332
Вопроси для самоконтроля...................................333
Глава 3. Различия между форматом и алгоритмом................333
РАЗДЕЛ 3. СЖАТИЕ ВИДЕОДАННЬІХ...................................338
Введение.....................................................338
Основние понятих...........................................339
Требования приложений к алгоритму.......................... 339
Определение требований.....................................341
Обзор стандартов...........................................342
Глава 1. Базовьіе технологии сжатия видеоданних..............344
Описание алгоритма компрессии..............................344
Общая схема алгоритма......................................346
Использование векторов смещений блоков.....................346
Возможности по распараллеливанию...........................348
Другие пути повьішения степени сжатия......................348
Глава 2. Стандарти сжатия видеоданних........................350
МоІіоп-,1РЕО...............................................350
МРЕО-1.....................................................351
Н.261......................................................351
Н.263......................................................352
МРЕС-2......'..............................................353
МРЕО-4.....................................................354
Сравнение стандартов.......................................357
Вопросьі для самоконтроля..................................358
Ссилки на программи и реализации алгоритмов................360
ПРИЛОЖЕНИЯ......................................................361
П-1. Контекстний компрессор Оитту............................361
П-2. Сжатие цветного изображения.............................366
Сжатие двуцветного изображения.............................366
Сжатие 16-цветного изображения.............................367
Сжатие изображения в градациях серого......................368
Сжатие полноцветного изображения...........................369
Сжатие полноцветного изображения в 100 раз.................370
УКАЗАТЕЛЬ ТЕРМИНОВ..............................................371
381