Усиление степени сжатия текста

Материал из WEGA
Перейти к навигации Перейти к поиску

Ключевые слова и синонимы

Модели сжатия высокого порядка; сжатие с учетом контекста

Постановка задачи

Неформально техника усиления представляет собой метод, который при применении к определенному классу алгоритмов повышает их эффективность. Повышение должно быть доказуемым и четко определенным в виде одного или нескольких параметров, характеризующих эффективность работы алгоритма. Примеры подобных «усилителей» можно найти в сегментах рандомизированных алгоритмов (здесь усилитель позволяет превратить алгоритм BPP в RP [6]) и теории вычислительного обучения (в данном случае усилитель позволяет повысить точность прогнозирования у слабого обучающего алгоритма [10]). Задача усиления сжатия заключается в разработке техники, повышающей эффективность сжатия широкого класса алгоритмов. В частности, результатом работы Ферраджины и др. явилась обобщенная техника, позволяющая «заставить» компрессор, не использовавший контекстной информации вовсе, всегда использовать наилучший возможный контекст.


Классические алгоритмы Хаффмана и арифметического кодирования [1] могут служить примерами статистических алгоритмов сжатия, обычно кодирующих входной символ в соответствии с общей частотой его вхождения в данных, подлежащих сжатию. [Динамические версии этих алгоритмов рассматривают частоту схождения символа в уже просканированной порции входных данных.] Этот подход эффективен и прост в реализации, однако обеспечивает невысокий уровень сжатия. Эффективность работы статистических алгоритмов сжатия можно повысить в результате использования моделей более высокого порядка, получающих более качественную оценку частоты встречаемости входных символов. Алгоритм сжатия PPM [9] реализует эту идею за сбора данных о частоте вхождения всех символов, попадающих в любой контекст длины k, и сжатия их при помощи арифметического кодирования. Длина контекста k представляет собой параметр алгоритма, который определяется подлежащими сжатию данными: он будет разным при сжатии текста на английском языке, последовательности ДНК или документа в формате XML. Можно привести и другие примеры сложных программ сжатия, таких как алгоритмы Лемпеля-Зива и Барроуза-Уилера [9], использующих информацию о контексте неявным образом. Все эти алгоритмы, учитывающие контекст, хороши по критерию эффективности работы, однако сложны для реализации и анализа.


Применение техники усиления Ферраджины и др. к алгоритмам Хаффмана и арифметического кодирования позволяет получить новый алгоритм сжатия со следующими характеристиками:

(i) новый алгоритм использует усиленный алгоритм сжатия в качестве черного ящика;

(ii) новый алгоритм выполняет сжатие в стиле PPM, автоматически выбирая оптимальное значение k;

(iii) асимптотическая эффективность нового алгоритма по соотношению времени и памяти соответствует эффективности усиленного алгоритма сжатия.


В следующих разделах будет изложено точное формальное обоснование перечисленных характеристик.

Основные результаты

Нотация. Эмпирическая энтропия


Пусть s – строка над алфавитом [math]\displaystyle{ \Sigma = \{ a_1, ..., a_h \} \; }[/math]. Обозначим для каждого [math]\displaystyle{ a_i \in \Sigma \; }[/math] за [math]\displaystyle{ n_i \; }[/math] количество вхождений [math]\displaystyle{ a_i \; }[/math] в s. Эмпирическая энтропия нулевого порядка строки s определяется как [math]\displaystyle{ H_0(s) = - \sum^h_{i = 1} (n_i / |s|) \; log (n_i / |s|) }[/math], где все алгоритмы берутся по основанияю 2, а 0 log 0 = 0. Хорошо известно, что [math]\displaystyle{ H_0 \; }[/math] представляет собой максимальный уровень сжатия, которого можно достичь при использовании уникального декодируемого кода, в котором каждому символу алфавита назначается уникальное кодовое слово. Более высокой степени сжатия можно достичь, если кодовое слово символа зависит от k символов, следующих за ним (то есть от его контекста). [Большинство алгоритмов сжатия данных обычно рассматривают контекст, предшествующий кодируемым символам. В данном описании используется нестандартный «прямой» контекст для упрощения нотации в последующих разделах. Работа с «прямым» контекстом эквивалентна работе с традиционным «обратным» контекстом для обращенной строки s (подробнее см. в [3]).] Определим [math]\displaystyle{ w_s \; }[/math] как строку единичных символов, непосредственно предшествующих вхождениям w в s. Например, для s = bcabcabdca получим [math]\displaystyle{ ca_s = bbd \; }[/math]. Значение

(1) [math]\displaystyle{ H_k(s) = \frac{1}{|s|} \sum_{w \in \Sigma^k} |w_s| \; H_0(w_s) }[/math]

представляет эмпирическую энтропию k-го порядка для s и является нижней границей степени сжатия, которой можно достичь при использовании кодовых слов, которые зависят только от k символов, непоследственно следующих за кодируемым.


Пример 1 Пусть строка s = mississippi. Для k = 1 имеем is = mssp, ss = isis, ps = ip. Следовательно, 4 4 2 H1(s) = 4 H0(mssp) + 4 H0(isis) + 2 H0(ip) 6 11

4  11
2  11
12  11

Отметим, что эмпирическая энтропия определяется для любой строки и может использоваться для измерения эффективности алгоритмов сжатия без каких-либо предположений о входных данных. К сожалению, для некоторых строк (с очень высокой сжимаемостью) эмпирическая энтропия обеспечивает слишком консервативное значение нижней границы. Например, для s = an имеет место sj Hk(s) = 0 для любого k > 0. Чтобы лучше справляться со строками с высокой сжимаемостью, в работе [ ] было введено понятие модифицированной эмпирической энтропии нулевого порядка H*(s), имеющей следующее свойство: s\H*(s) по меньшей мере равно количеству бит, необходимых для записи длины s в двоичной форме. Модифицированная эмпирическая энтропия k-го порядка H* определяется как максимальная степень сжатия, которой можно достичь при просмотре не более чем k символов, следующих за кодируемым.

Преобразование Барроуза-Уилера

Пусть дана строка s. Преобразование Барроуза-Уилера [2] (bwt) включает три основных этапа:

(1) добавить в концу строки s специальный символ $, который меньше любого другого символа в S;

(2) сформировать концептуальную матрицу M, строки которой содержат круговые сдвиги строки s$, отсортированные в лексикографическом порядке;

(3) построить преобразованный текст s = bwt(s), взяв последний столбец матрицы M (см. рис. 1).


В работе [ ] Барроуз и Уилер доказали, что s является перестановкой s и что можно восстановить s из I за время O(jsj).


Чтобы убедиться в мощи преобразования bwt, рассмотрим ситуацию с точки зрения эмпирической энтропии. Зафиксируем целое положительное число k. Первые k столбцов матрицы bwt содержат все подстроки s длины k, лексикограчфически упорядоченные (а также k подстрок, содержащих символ $). Для любой подстроки w строки s длины k символы, непосредственно предшествующие каждому вхождению w в s, сгруппированы вместе в множество последовательных позиций в s, поскольку они являются последними символами строк матрицы M, которым предшествуют символы w. Используя нотацию, предложенную при определении Нь, можно перефразировать это свойство так, чтобы символы ws были последовательными в строке s или, что эквивалентно, что s содержит в качестве подстроки перестановку JIW{WS) строки ws.


Пример 2. Пусть s = mississippi и k = 1. На рис. 1 показано, что s [1, 4] = pssm является перестановкой is =mssp. Кроме того, s[6, 7] = pi является перестановкой ps = ip, а s[8,11] = ssii – перестановкой ss = isis.


Поскольку перестановка строки не меняет ее (модифицированной) эмпирической энтропии нулевого порядка (то есть HQ{JIW{WS)) = H0(WS)), преобразование Барроуза-Уилера может рассматриваться как способ свести задачу сжатия строки s вплоть до энтропии k-го порядка к задаче сжатия отдельных фрагментов s вплоть до их энтропии нулевого порядка. Чтобы убедиться в этом, рассмотрим разбиение строки s на подстроки JIW{WS), изменяя w над Sk. Из этого следует, что s = \_\w€zk fw^s), где J – оператор конкатенации над строками.3

3 Помимо tw2 jjk 7iw(ws), строка s также содержит последние k символов s (не входящие ни в какой ws) и специальный символ $. Для простоты в дальнейшем изложении эти символы будут игнорироваться.


Из (1) следует, что J2 \JIW{WS)\H0{JIW{WS)) = Xj wsjH0(ws) = jsjHk(s): w2


Следовательно, для сжатия строки s вплоть до js достаточно сжать каждую ее подстроку JIW{WS) вплоть до эмпирической энтропии нулевого порядка. Заметим, однако, что при использовании вышеприведенной схемы параметр k необходимы выбрать заранее. Более того, подобную схему нельзя применить к H*, определенной в терминах контекстов длины не более k. В результате на данный момент не известно эффеективной процедуры для вычисления разбиения s согласно H*(s). Усилитель сжатия [3] представляет собой естественное дополнение bwt и позволяет сжимать любую строку s до Hk(s) (или H*(s)) одновременно для всех k > 0.

Алгоритм усиления степени сжатия