(по цифровому вещанию) Dvorkovich_V_Cifrovye_videoinformacionnye_sistemy
.pdfГлава 4. Статистическая избыточность дискретизированных данных
Словарные методы отличаются друг от друга способом организации словаря, схемой поиска совпадений и видом ссылки на найденное совпадение [2.6, 2.9]. Впервые эти методы были описаны в работах А. Лемпела (Lempel A.) и Я. Зива (Ziv J.) [2.25, 2.26].
Первый вариант словарного алгоритма был описан в 1977 году [2.25] и был назван LZ77 по первым буквам фамилий авторов.
Классический алгоритм LZ-77 является родоначальником целого семейства схем, использующих алгоритмы со скользящим словарем или со скользящим окном. В скользящем окне помещается N символов, причем часть из них M N − n — уже закодированные символы, являющиеся словарем. Оставшаяся часть символов длины n существенно меньше количества символов, записанных в словаре, используется в буфере предварительного просмотра. Предположим, к текущему моменту закодировано m символов: s0, s1, s2, . . . , sm−1, часть из которых sm−M , . . . , sm−2, sm−1 записаны в словаре, а в буфере записаны ожидающие кодирования символы sm, sm+1, . . . , sm−1+n.
Принцип кодирования заключается в поиске самого длинного совпадения последовательности символов в строке буфера, начинающегося с символа sm, и закодированных фраз, размещенных в словаре. Эти фразы могут начинаться с любого символа sm−M , . . . , sm−2, sm−1 и выходить за пределы словаря, вторгаясь в область буфера.
Полученная в результате поиска фраза sm−i, sm−i+1, . . . , sm−i+j−1 кодируется с помощью двух чисел: i — смещения от начала буфера и j — длины совпадения последовательности символов. Дополнительно в выходной поток записывается символ s, непосредственно следующий за совпавшей строкой буфера.
Пример обработки информации в соответствии с алгоритмом LZ-77 приведен в табл. 4.7. Обработке подвергается фраза из 59 символов:
«на_дворе_трава_на_траве_дрова_на_дворе_трава_на_траве_дрова».
Вместо текстовой фразы могут использоваться наборы однородных элементов, пикселов, отсчетов или качественно разных объектов.
Установим длину буфера равной восьми символам, а размер словаря — больше длины кодируемой фразы.
Положим, для представления символов требуется использовать 1 байт. Следовательно, исходно фраза занимала 59 · 8 = 472 бита. Как следует из таблицы, при независимом кодировании значений коэффициентов i и j требуется использовать соответственно 5 битов и 4 бита. Тогда для представления кодированной информации требуется (5 + 4 + 8) · 20 = 340 битов.
Если же для кодирования коэффициентов i и j использовать наиболее простой алгоритм префиксного кодирования Шеннона–Фано, то можно подсчитать, что средняя длина кода для кодирования каждого коэффициента i составит 26/20 бита, а каждого коэффициента j — 22/20 бита. При этом для представления кодированной информации требуется (26/20 + 22/20 + 8) · 20 = 208 битов.
Как следует из табл. 4.7 алгоритм LZ-77 позволяет эффективно сжимать только сравнительно длинные последовательности, в которых имеет место повторение фраз.
Существует множество модификаций этого алгоритма. В частности, к алгоритмам семейства LZ-77 также относятся алгоритмы LZR [2.27], LZSS [2.28, 2.29].
4.2. Виды статистического кодирования
Таблица 4.7. Пример работы алгоритма LZ-77
|
Скользящее окно |
|
|
Закодированные |
|||
Шаг |
|
Совпадающая фраза |
|
|
данные |
||
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
Словарь |
Буфер |
|
i |
j |
|
s |
|
|
|
|
|
|
|
|
1 |
– |
на_дворе |
– |
1 |
0 |
|
«н» |
2 |
н |
а_дворе_ |
– |
1 |
0 |
|
«а» |
|
|
|
|
|
|
|
|
3 |
на |
_дворе_т |
– |
1 |
0 |
|
«_» |
|
|
|
|
|
|
|
|
4 |
на_ |
дворе_тр |
– |
1 |
0 |
|
«д» |
|
|
|
|
|
|
|
|
5 |
на_д |
воре_тра |
– |
1 |
0 |
|
«в» |
|
|
|
|
|
|
|
|
6 |
на_дв |
оре_трав |
– |
1 |
0 |
|
«о» |
|
|
|
|
|
|
|
|
7 |
на_дво |
ре_трава |
– |
1 |
0 |
|
«р» |
|
|
|
|
|
|
|
|
8 |
на_двор |
е_трава_ |
– |
1 |
0 |
|
«е» |
9 |
на_дворе |
_трава_н |
– |
6 |
1 |
|
«т» |
|
|
|
|
|
|
|
|
10 |
на_дворе_т |
рава_на_ |
р |
4 |
1 |
|
«а» |
|
|
|
|
|
|
|
|
11 |
на_дворе_тра |
ва_на_тр |
в |
8 |
1 |
|
«а» |
12 |
на_дворе_трава |
_на_трав |
– |
6 |
1 |
|
«н» |
|
|
|
|
|
|
|
|
13 |
на_дворе_трава_н |
а_траве_ |
а_ |
15 |
2 |
|
«т» |
14 |
на_дворе_трава_на_т |
раве_дро |
рав |
9 |
3 |
|
«е» |
15 |
на_дворе_трава_на_траве |
_дрова_н |
-д |
21 |
2 |
|
«р» |
|
|
|
|
|
|
|
|
16 |
на_дворе_трава_на_траве_др |
ова_на_д |
о |
21 |
1 |
|
«в» |
17 |
на_дворе_трава_ |
а_на_дво |
а_на_ |
15 |
5 |
|
«д» |
на_траве_дров |
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
на_дворе_трава_ |
воре_тра |
воре_тра |
30 |
8 |
|
«в» |
на_траве_дрова_на_д |
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
. . . _на_траве_дрова_ |
а_на_тра |
а_на_тра |
30 |
8 |
|
«в» |
на_дворе_трав |
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
. . . _дрова_на_ |
е_дрова |
е_дрова |
30 |
7 |
|
«end» |
дворе_трава_на_трав |
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Алгоритмы LZB [2.30], LZH [2.31] представляют собой усовершенствования алгоритма LZSS с помощью использования кодов переменной длины.
Наиболее широкое распространение в компьютерных программах архивации получили в настоящее время так называемые комбинированные словарные алгоритмы семейства LZ-77, в которых статистический алгоритм устраняет недостатки способа кодирования базового словарного алгоритма.
Классический алгоритм LZ-78 [2.26], разработанный А. Лемпелом и Я. Зивом в 1978 году, положил начало другому семейству словарных алгоритмов. Алгоритм LZ-78 нередко уступает LZ-77 по эффективности кодирования, но превосходит его по скорости.
Алгоритм LZ-78 не использует скользящее окно, а в словарь помещают только «перспективные» с точки зрения вероятности последующего использования строки. При этом на каждом шаге в словарь вставляется новая фраза, пред-
Глава 4. Статистическая избыточность дискретизированных данных
ставляющая собой сцепление одной из фраз словаря (имеющей самое длинное совпадение со строкой буфера) и символа s, следующего за строкой буфера, за которой найдена совпадающая фраза. В отличие от алгоритма LZ-77 в словаре не может быть одинаковых фраз.
Кодирующая схема порождает последовательность кодов фраз. Каждый код состоит из индекса (префикса) n «родительской» фразы и символа s.
Пример обработки информации в соответствии с алгоритмом LZ-78 приведен в табл. 4.8. Обработке подвергается та же последовательность из 59 символов, которая использовалась при пояснении работы алгоритма LZ-77. В начале обработки информации словарь пуст, номером «1» задается пустая фраза словаря.
Таблица 4.8. Пример работы алгоритма LZ-78
|
Добавляемая |
|
|
Закодированные данные |
||
Шаг |
в словарь фраза |
Буфер |
Совпадающая фраза |
|||
|
|
|
|
|
|
|
|
Фраза |
Ее номер |
|
|
n |
s |
1 |
н |
2 |
на_дворе |
– |
1 |
«н» |
|
|
|
|
|
|
|
2 |
а |
3 |
а_дворе_ |
– |
1 |
«а» |
|
|
|
|
|
|
|
3 |
_ |
4 |
_дворе_т |
– |
1 |
«_» |
4 |
д |
5 |
дворе_тр |
– |
1 |
«д» |
|
|
|
|
|
|
|
5 |
в |
6 |
воре_тра |
– |
1 |
«в» |
|
|
|
|
|
|
|
6 |
о |
7 |
оре_трав |
– |
1 |
«о» |
7 |
р |
8 |
ре_трава |
– |
1 |
«р» |
|
|
|
|
|
|
|
8 |
е |
9 |
е_трава_ |
– |
1 |
«е» |
|
|
|
|
|
|
|
9 |
_т |
10 |
_трава_н |
_ |
4 |
«т» |
10 |
ра |
11 |
рава_на_ |
р |
8 |
«а» |
|
|
|
|
|
|
|
11 |
ва |
12 |
ва_на_тр |
в |
6 |
«а» |
|
|
|
|
|
|
|
12 |
_н |
13 |
_на_трав |
_ |
4 |
«н» |
13 |
а_ |
14 |
а_траве_ |
а |
3 |
«_» |
|
|
|
|
|
|
|
14 |
т |
15 |
траве_др |
– |
1 |
«т» |
|
|
|
|
|
|
|
15 |
рав |
16 |
раве_дро |
ра |
11 |
«в» |
|
|
|
|
|
|
|
16 |
е_ |
17 |
е_дрова_ |
е |
9 |
«_» |
|
|
|
|
|
|
|
17 |
др |
18 |
дрова_на |
д |
5 |
«р» |
|
|
|
|
|
|
|
18 |
ов |
19 |
ова_на_д |
о |
7 |
«в» |
|
|
|
|
|
|
|
19 |
а_н |
20 |
а_на_дво |
а_ |
14 |
«н» |
20 |
а_д |
21 |
а_дворе_ |
а_ |
14 |
«д» |
|
|
|
|
|
|
|
21 |
во |
22 |
воре_тра |
в |
6 |
«о» |
22 |
ре |
23 |
ре_трава |
р |
8 |
«е» |
23 |
_тр |
24 |
_трава_н |
_т |
10 |
«р» |
|
|
|
|
|
|
|
24 |
ав |
25 |
ава_на_т |
а |
3 |
«в» |
25 |
а_на |
26 |
а_на_тра |
а_н |
20 |
«а» |
26 |
_тра |
27 |
_траве_д |
_тр |
24 |
«а» |
|
|
|
|
|
|
|
27 |
ве |
28 |
ве_дрова |
в |
6 |
«е» |
28 |
_д |
29 |
_дрова |
_ |
4 |
«д» |
29 |
ро |
30 |
рова |
р |
8 |
«о» |
|
|
|
|
|
|
|
30 |
ва |
31 |
ва |
ва |
12 |
«end» |
4.2. Виды статистического кодирования
Если для представления символов требуется использовать 1 байт, то исходно фраза занимает 59 · 8 = 472 бита. Как следует из таблицы, при независимом кодировании значений префикса n требуется использовать 5 битов. Тогда для представления кодированной информации требуется (5 + 8) · 30 = 390 битов.
Если же для кодирования префикса n использовать алгоритм Шеннона–Фано, то можно подсчитать, что средняя длина кода для кодирования каждого коэффициента n составит 65/30 бита. При этом для представления кодированной информации требуется (65/30 + 8) · 30 = 305 битов.
Как следует из сравнения классических алгоритмов LZ-77 и LZ-78, последний в данном случае оказался менее эффективным. Однако алгоритм LZ-78 также имеет множество модификаций, позволяющих существенно повысить эффективность кодирования информации.
К этому семейству относятся алгоритмы LZW [2.32], LZC [2.33], LZT [2.34], LZMW [2.35], LZJ [2.36], LZFG [2.37].
Алгоритм LZW, реализованный Т. Уэлчем (Welch T.), получил широкое применение в компрессии графических компьютерных изображений (форматы GIF, TIFF) и для передачи по линиям связи (стандарт V.42bis [2.59]).
В этой модификации LZ-78 все символы алфавита входной последовательности предварительно заносятся в словарь, и результатом работы алгоритма является только выявление последовательности фраз словаря.
Пример обработки информации в соответствии с алгоритмом LZW приведен в табл. 4.9. Обработке подвергается та же последовательность из 59 символов, которая использовалась при пояснении работы алгоритмов LZ-77 и LZ-78. При этом предполагается, что исходно все символы входной последовательности, размер которых равен 8 битов (соответствующие числам от 0 до 255), занесены в словарь. Выявленные в процессе кодирования и вносимые в словарь фразы обозначим числами, начиная с 246. Ограничивая 9 битами закодированную информацию, обозначим код очистки словаря, например, числом 511.
Таблица 4.9. Пример работы алгоритма LZW
Шаг |
Входная строка |
Закодированные |
Фраза |
Код |
|
данные |
в словарь |
||||
|
|
|
|
|
|
1 |
на_дворе_трава_на_траве_ |
«н» |
на |
256 |
|
дрова_на_дворе_. . . |
|||||
|
|
|
|
||
|
|
|
|
|
|
2 |
а_дворе_трава_на_траве_ |
«а» |
а_ |
257 |
|
дрова_на_дворе_т. . . |
|||||
|
|
|
|
||
|
|
|
|
|
|
3 |
_дворе_трава_на_траве_ |
«_» |
_д |
258 |
|
дрова_на_дворе_тр. . . |
|||||
|
|
|
|
||
|
|
|
|
|
|
4 |
дворе_трава_на_траве_ |
«д» |
дв |
259 |
|
дрова_на_дворе_тра. . . |
|||||
|
|
|
|
||
|
|
|
|
|
Глава 4. Статистическая избыточность дискретизированных данных
Таблица 4.9 (продолжение)
Шаг |
Входная строка |
Закодированные |
Фраза |
Код |
|
данные |
в словарь |
||||
|
|
|
|
|
|
|
воре_трава_на_траве_ |
|
|
|
|
5 |
дро |
«в» |
во |
260 |
|
|
ва_на_дворе_трав. . . |
|
|
|
|
|
|
|
|
|
|
6 |
оре_трава_на_траве_дрова_ |
«о» |
ор |
261 |
|
на_дворе_трава_. . . |
|||||
|
|
|
|
||
|
|
|
|
|
|
7 |
ре_трава_на_траве_ |
«р» |
ре |
262 |
|
дрова_на_дворе_трава_. . . |
|||||
|
|
|
|
||
|
|
|
|
|
|
8 |
е_трава_на_траве_дрова_ |
«е» |
е_ |
263 |
|
на_дворе_трава_. . . |
|||||
|
|
|
|
||
|
|
|
|
|
|
9 |
_трава_на_траве_дрова_ |
«_» |
_т |
264 |
|
на_дворе_трава_н. . . |
|||||
|
|
|
|
||
|
|
|
|
|
|
10 |
трава_на_траве_дрова_на_ |
«т» |
тр |
265 |
|
дворе_трава_на. . . |
|||||
|
|
|
|
||
|
|
|
|
|
|
11 |
рава_на_траве_дрова_на_ |
«р» |
ра |
266 |
|
дворе_трава_на_. . . |
|||||
|
|
|
|
||
|
|
|
|
|
|
12 |
ава_на_траве_дрова_на_ |
«а» |
ав |
267 |
|
дворе_трава_на_т. . . |
|||||
|
|
|
|
||
|
|
|
|
|
|
13 |
ва_на_траве_дрова_на_ |
«в» |
ва |
268 |
|
дворе_трава_на_тра. . . |
|||||
|
|
|
|
||
|
|
|
|
|
|
|
а_на_траве_дрова_на_ |
|
|
|
|
14 |
дво |
«257» (а_) |
а_н |
269 |
|
|
ре_трава_на_трав. . . |
|
|
|
|
|
|
|
|
|
|
15 |
на_траве_дрова_на_дворе_ |
«256» (на) |
на_ |
270 |
|
трава_на_траве_дрова |
|||||
|
|
|
|
||
|
|
|
|
|
|
16 |
_траве_дрова_на_дворе_ |
«264» (_т) |
_тр |
271 |
|
трава_на_траве_дрова |
|||||
|
|
|
|
||
|
|
|
|
|
|
17 |
раве_дрова_на_дворе_трава_на_траве_дрова |
«266» (ра) |
рав |
272 |
|
|
|
|
|
|
|
18 |
ве_дрова_на_дворе_трава_на_траве_дрова |
«в» |
ве |
273 |
|
19 |
е_дрова_на_дворе_трава_на_траве_дрова |
«263» (е_) |
е_д |
274 |
|
|
|
|
|
|
4.2. Виды статистического кодирования
Таблица 4.9 (окончание)
Шаг |
Входная строка |
Закодированные |
Фраза |
Код |
данные |
в словарь |
|||
|
|
|
|
|
20 |
дрова_на_дворе_трава_на_траве_дрова |
«д» |
др |
275 |
|
|
|
|
|
21 |
рова_на_дворе_трава_на_траве_дрова |
«р» |
ро |
276 |
|
|
|
|
|
22 |
ова_на_дворе_трава_на_траве_дрова |
«о» |
ов |
277 |
23 |
ва_на_дворе_трава_на_траве_дрова |
«268» (ва) |
ва_ |
278 |
|
|
|
|
|
24 |
_на_дворе_трава_на_траве_дрова |
«_» |
_н |
279 |
|
|
|
|
|
25 |
ра_дворе_трава_на_траве_дрова |
«270» (на_) |
на_д |
280 |
26 |
дворе_трава_на_траве_дрова |
«259» (дв) |
дво |
281 |
|
|
|
|
|
27 |
оре_трава_на_траве_дрова |
«261» (ор) |
оре |
282 |
|
|
|
|
|
28 |
е_трава_на_траве_дрова |
«263» (е_) |
е_т |
283 |
29 |
трава_на_траве_дрова |
«265» (тр) |
тра |
284 |
|
|
|
|
|
30 |
ава_на_траве_дрова |
«267» (ав) |
ава |
285 |
|
|
|
|
|
31 |
а _на_траве_дрова |
«269» (а_н) |
а_на |
286 |
32 |
а_траве_дрова |
«257» (а_) |
а_т |
287 |
|
|
|
|
|
33 |
траве_дрова |
«284» (тра) |
трав |
288 |
|
|
|
|
|
34 |
ве_дрова |
«273» (ве) |
ве_ |
289 |
35 |
_дрова |
«258» (_д) |
_др |
290 |
|
|
|
|
|
36 |
рова |
«276»(ро) |
ров |
291 |
|
|
|
|
|
37 |
ва |
«268» (ва) |
|
«end» |
Так как для представления символов требуется использовать 1 байт, то исходно фраза занимает 59×8=472 бита. Как следует из таблицы, при независимом кодировании значений закодированных данных требуется использовать 9 битов. Тогда для представления кодированной информации требуется 9×37=333 бита.
Если же для кодирования данных использовать алгоритм Шеннона–Фано, то можно подсчитать, что средняя длина кода для кодирования каждого коэффициента n составит 119/37 бита и для представления кодированной информации требуется всего 119 битов.
4.2.7.Статистические методы моделирования дискретной информации
Для эффективного кодирования требуется знание характеристик источника информации, в частности, условные вероятности появления символов в зависимости от предшествующих символьных последовательностей. Если не имеется никакой дополнительной информации об источнике данных, то эти условные вероятности определяются с помощью статистического анализа информационных выборок. Такой принцип лежит в основе статистических методов, обладающих высокой эффективностью, но предъявляющих повышенные требования к вычислительным ресурсам.
Статистические методы позволяют оценить вероятность появления в текущем контексте (последовательность символов, непосредственно предшествующих данному символу в информационном сообщении) символа или последовательности символов. Оценка вероятности определяет длину кода, который генерируется, как правило, с помощью префиксного или арифметического кодирования. Чаще
Глава 4. Статистическая избыточность дискретизированных данных
всего используются адаптивные статистические методы. Они различаются способом получения оценок условных вероятностей появления символов в различных контекстах. В настоящее время наиболее распространены четыре основных способа: PPM, DMC, CTW и метод нейронных сетей.
В методе PPM (Prediction by Partial Matching — предсказание по частичному совпадению), предложенном Дж. Клири (Cleary J.) и И. Уиттеном (Witten I.) и применяемом чаще всего при обработке текстовой информации, вероятность появления символа всегда оценивается в текущем контексте какого-то одного порядка. Порядком контекста называется длина последовательности символов в контексте.
Имеется множество реализаций метода РРМ [2.6, 2.9, 2.40–2.53, 2.90–2.93], которые, как правило, работают по приведенной ниже схеме.
Сначала для оценки вероятности появления символа используется контекст достаточно высокого порядка. Если кодируемый символ ранее в выбранном контексте не встречался, то кодирующее устройство генерирует код служебного символа перехода к контекстной модели следующего по убыванию порядка. Если новая модель также не обеспечивает получение вероятностной оценки, вновь генерируется служебный символ перехода к следующему меньшему по порядку контексту. Для гарантии завершения процесса переходов вводится дополнительная модель «минус 1-го» порядка, при котором появление всех символов информационного алфавита оценивается с равной вероятностью.
Предположим, что к текущему моменту передана последовательность из n символов источника информации x¯n1 = (x1, . . . , xn) и следует передать символ xn+1.
Для всех возможных значений символа xn+1 вычисляются условные вероятности появления этого символа при уже известном контексте, определяемом
последовательностью x¯n− = (xn−d+1, . . . , xn) наибольшей длины d, не пре-
n d+1
вышающей заданного значения D. При этом выбираемая последовательность
n |
n+1 |
= (xn−d+1, . . . , xn, xn+1) |
||
x¯n |
d+1 такова, что последовательность символов x¯n |
− |
d+1 |
|
− |
n |
|
|
|
уже встречалась в переданной информации x¯1 . |
|
|
|
Значение символа xn+1 кодируется арифметическим кодом в соответствии с вычисленным условным распределением вероятностей и с учетом длины контекста d D.
Оценивается условная вероятность pˆ(a|¯c) появления символа xn+1a после кон- = (xn−d+1, . . . , xn) = ¯c. В случае, если эта условная вероятность оказывается равной нулю, pˆ(a|¯c) = 0, используется символ esc с вычисленной
определенным образом вероятностью его появления, и длина контекста d сокращается на единицу. Рекурсия продолжается до тех пор, пока символ не будет передан, либо длина контекста не окажется равной нулю. Это соответствует независимому кодированию символа xn+1 в соответствии с вычисленным по x¯n1 безусловным распределением вероятностей символов всего возможного алфавита X .
В том случае, когда символ xn+1 еще не встречался в последовательности x¯n1 , вновь передается символ esc, а также символ xn+1 в соответствии с равномерным распределением вероятностей на множестве неиспользованных символов алфавита источника.
Резюмируя вышеизложенное, можно сказать, что кодер PPM обеспечивает передачу очередного символа в соответствии с вероятностью, определяемой кон-
4.2. Виды статистического кодирования
текстом наиболее возможной длины. Если же этот символ еще не встречался с таким контекстом, передается символ esc, контекст укорачивается на один символ. В конечном счете символ будет передан с учетом контекста меньшей или нулевой длины, либо как «новый символ», если он не встречался в уже закодированной последовательности.
Различные реализации алгоритма кодирования PPM связаны с принципами оценки условных вероятностей появления символов алфавита источника и escсимвола.
Так, в алгоритме PPMA [2.40] используются следующие выражения:
pˆ(a|¯c) = |
Nn(¯c, a) |
, Nn(¯c, a) > 0, |
||
Nn(¯c) + 1 |
||||
|
1 |
|
(4.13) |
|
|
|
|
||
pˆ(esc|¯c) = |
|
, Nn(¯c, a) = 0, |
||
Nn(¯c) + 1 |
где Nn(x¯) — количество появлений последовательности x¯ в обработанной последовательности длины n.
При расчете величины условной вероятности pˆ(a|¯c) дополнительно введено так называемое «правило исключений», принцип использования которого заключается в следующем.
Предположим, что при кодировании информации на некотором шаге контекст на интервале d имеет вид ¯cd = (xn−d+1, . . . , xn), а следующий за ним символ a, причем сочетание ¯cd, a = (xn−d+1, . . . , xn, a) ранее не встречалось. Предположим также, что предыдущие появления последовательности ¯cd имели своими продолжениями символы b и c. В соответствии с алгоритмом передается символ esc, и контекст укорачивается на один символ. Следовательно, теперь контекстом будет ¯cd−1 = (xn−d+2, . . . , xn).
Правило исключений требует принять во внимание тот факт, что не все сочетания ¯cd−1 следует использовать для подсчета условной вероятности появления символа a, поскольку благодаря передаче символа esc кодер и декодер уже знают, что символы b и c, например, не могут следовать за контекстом ¯cd−1. По этой причине формулы (4.13) следует уточнить, подставив в них вместо Nn(¯c)
величину |
|
Nn(¯c) = Nn(¯cd−1) − Nn(¯cd−1, b) − Nn(¯cd−1, c). |
(4.14) |
После этой корректировки знаменатели в соотношениях (4.13) уменьшатся, что приводит увеличению вероятностей и уменьшению затрат на их передачу.
Применим алгоритм PPMA к кодированию используемой в предыдущем разделе фразы из 59 символов:
«на_дворе_трава_на_траве_дрова_на_дворе_трава_на_траве_дрова».
Результаты работы алгоритма PPMA с параметром D = 8 по шагам приведены в табл. 4.10. Знак # в графе «контекст» соответствует контексту нулевой длины, штрихом помечены вероятности, подсчитанные с учетом исключений. В графе Nn(¯c) дано число появлений данного контекста, и если этот контекст укорачивался в процессе кодирования, то через запятую приведено число появлений укороченных контекстов. Предполагается, что возможно использование 256 символов и исходно их появление равновероятно.
Глава 4. Статистическая избыточность дискретизированных данных
Таблица 4.10. Пример работы алгоритма PPMA
Шаг |
Интервал D = 8 |
Символ |
Контекст ¯c |
Количество |
PPMA |
|
появлений Nn(¯c) |
|
|
||||
¯c |
¯c |
|||||
|
|
|
|
|
pˆ(esc| ) |
pˆ(a| ) |
1 |
|
н |
# |
0 |
1 |
1/256 |
2 |
н |
а |
# |
1 |
1/2 |
1/255 |
|
|
|
|
|
|
|
3 |
на |
_ |
# |
2 |
1/3 |
1/254 |
|
|
|
|
|
|
|
4 |
на_ |
д |
# |
3 |
1/4 |
1/253 |
5 |
на_д |
в |
# |
4 |
1/5 |
1/252 |
|
|
|
|
|
|
|
6 |
на_дв |
о |
# |
5 |
1/6 |
1/251 |
|
|
|
|
|
|
|
7 |
на_дво |
р |
# |
6 |
1/7 |
1/250 |
8 |
на_двор |
е |
# |
7 |
1/8 |
1/249 |
|
|
|
|
|
|
|
9 |
на_дворе |
_ |
# |
8 |
|
1/9 |
|
|
|
|
|
|
|
10 |
а_дворе_ |
т |
_ |
1, 9 |
1/2*1/9’ |
1/248 |
11 |
_дворе_т |
р |
# |
10 |
|
1/11 |
|
|
|
|
|
|
|
12 |
дворе_тр |
а |
р |
1, 11 |
1/2 |
1/11 |
13 |
воре_тра |
в |
а |
1, 12 |
1/2 |
1/12’ |
14 |
оре_трав |
а |
в |
1, 13 |
1/2 |
2/13’ |
|
|
|
|
|
|
|
15 |
ре_трава |
_ |
а |
2 |
|
1/3 |
|
|
|
|
|
|
|
16 |
е_трава_ |
н |
а_ |
1, 2, 15 |
1/2*1/2’ |
1/14’ |
17 |
_трава_н |
а |
н |
1 |
|
1/2 |
|
|
|
|
|
|
|
18 |
трава_на |
_ |
на |
1 |
|
1/2 |
|
|
|
|
|
|
|
19 |
рава_на_ |
т |
на_ |
1, 2, 3 |
1/2*1/2’ |
1/2’ |
20 |
ава_на_т |
р |
_т |
1 |
|
1/2 |
|
|
|
|
|
|
|
21 |
ва_на_тр |
а |
_тр |
1 |
|
1/2 |
|
|
|
|
|
|
|
22 |
а_на_тра |
в |
_тра |
1 |
|
1/2 |
23 |
_на_трав |
е |
_трав |
1, 1, 1, 1, 2, 22 |
1/2*1 *1 *1 *1/2’ |
1/21 |
24 |
на_траве |
_ |
е |
1 |
|
1/2 |
|
|
|
|
|
|
|
25 |
а_траве_ |
д |
е_ |
1, 4 |
1/2 |
1/4’ |
26 |
_траве_д |
р |
_д |
1, 1, 25 |
1/2*1 |
3/25’ |
27 |
_траве_др |
о |
р |
3, 26 |
1/4 |
1/25’ |
|
|
|
|
|
|
|
28 |
раве_дро |
в |
о |
1, 27 |
1/2 |
3/27’ |
29 |
аве_дров |
а |
в |
3 |
|
1/4 |
|
|
|
|
|
|
|
30 |
ве_дрова |
_ |
ва |
1 |
|
1/2 |
|
|
|
|
|
|
|
31 |
е_дрова_ |
н |
ва_ |
1 |
|
1/2 |
32 |
_дрова_н |
а |
ва_н |
1 |
|
1/2 |
|
|
|
|
|
|
|
33 |
дрова_на |
_ |
ва_на |
1 |
|
1/2 |
|
|
|
|
|
|
|
34 |
рова_на_ |
д |
ва_на_ |
1, 1, 1, 2 |
1/2*1 *1 |
1/2’ |
35 |
ова_на_д |
в |
на_д |
1 |
|
1/2 |
|
|
|
|
|
|
|
36 |
ва_на_дв |
о |
на_дв |
1 |
|
1/2 |
|
|
|
|
|
|
|
37 |
а_на_дво |
р |
на_дво |
1 |
|
1/2 |
38 |
_на_двор |
е |
на_двор |
1 |
|
1/2 |
|
|
|
|
|
|
|
39 |
на_дворе |
_ |
на_дворе |
1 |
|
1/2 |
|
|
|
|
|
|
|
40 |
а_дворе_ |
т |
а_дворе_ |
1 |
|
1/2 |
41 |
_дворе_т |
р |
_дворе_т |
1 |
|
1/2 |
|
|
|
|
|
|
|
42 |
дворе_тр |
а |
дворе_тр |
1 |
|
1/2 |
|
|
|
|
|
|
|
43 |
воре_тра |
в |
воре_тра |
1 |
|
1/2 |
4.2. Виды статистического кодирования
Таблица 4.10 (окончание)
Шаг |
Интервал D = 8 |
Символ |
Контекст ¯c |
Количество |
PPMA |
|
|
появлений Nn(¯c) |
¯c |
¯c |
|||||
|
|
|
|
|
pˆ(esc| ) |
pˆ(a| |
) |
44 |
оре_трав |
а |
оре_трав |
1 |
|
1/2 |
|
|
|
|
|
|
|
|
|
45 |
ре_трава |
_ |
ре_трава |
1 |
|
1/2 |
|
|
|
|
|
|
|
|
|
46 |
е_трава_ |
н |
е_трава_ |
1 |
|
1/2 |
|
47 |
_трава_н |
а |
_трава_н |
1 |
|
1/2 |
|
|
|
|
|
|
|
|
|
48 |
трава_на |
_ |
трава_на |
1 |
|
1/2 |
|
|
|
|
|
|
|
|
|
49 |
рава_на_ |
т |
рава_на_ |
1 |
|
1/2 |
|
50 |
ава_на_т |
р |
ава_на_т |
1 |
|
1/2 |
|
|
|
|
|
|
|
|
|
51 |
ва_на_тр |
а |
ва_на_тр |
1 |
|
1/2 |
|
|
|
|
|
|
|
|
|
52 |
а_на_тра |
в |
а_на_тра |
1 |
|
1/2 |
|
53 |
_на_трав |
е |
_на_трав |
1 |
|
1/2 |
|
|
|
|
|
|
|
|
|
54 |
на_траве |
_ |
на_траве |
1 |
|
1/2 |
|
|
|
|
|
|
|
|
|
55 |
а_траве_ |
д |
а_траве_ |
1 |
|
1/2 |
|
56 |
_траве_д |
р |
_траве_д |
1 |
|
1/2 |
|
|
|
|
|
|
|
|
|
57 |
траве_др |
о |
траве_др |
1 |
|
1/2 |
|
|
|
|
|
|
|
|
|
58 |
раве_дро |
в |
раве_дро |
1 |
|
1/2 |
|
59 |
аве_дров |
а |
аве_дров |
1 |
|
1/2 |
|
|
|
|
|
|
|
|
|
Поясним характерные шаги алгоритма.
Шаг 1. Число Nn(¯c) = 0. Следовательно, pˆ(esc|¯c) = 1 и pˆ(a|¯c) = 1/256.
Шаг 2. Число Nn(¯c) = 1. Следовательно, pˆ(esc|¯c) = 1. Учитывая, что символ на шаге 2 отличается от символа на шаге 1, pˆ(a|¯c) = 1/255.
Шаг 9. Пробел встретился второй раз. Поскольку предшествующий ему символ «е» встречался только один раз, контекст имеет нулевую длину, и пробел имеет вероятность 1/(8+1)=1/9.
Шаг 10. Пробел является контекстом длины 1 по отношению к символу «т». После пробела встречался только символ «д». Необходимо передать символ «esc» при его вероятности, равной 1/2, и перейти к контексту нулевой длины. Но и при контексте нулевой длины символ «т» не встречался, и поэтому вновь необходимо передать символ «esc», вероятность которого равна 1/10. Однако ясно, что среди возможных символов не может быть символа «д», и вероятность символа «esc» повышается до 1/9’.
Шаг 22. Контекстом по отношению к символу «в» является «_тра». Эта комбинация уже встречалась, и за ней следовал символ «в». Таким образом, следующими символами могут быть либо символ «в», либо символ «esc» с равными вероятностями. По этой причине для передачи символа «в» требуется всего 1 бит.
Шаг 23. Символу «е» предшествует контекст «_трав». При появлении этого контекста за ним следовал другой символ — «а». Поэтому передается символ «esc» при вероятности 1/2. Контекст укорачивается — «трав»; за ним ранее следовал только символ «а». Вновь необходимо передать символ «esc» при его вероятности без учета правила исключений, равной 1/2. Но при передаче предыдущего символа «esc» значение «а» уже было уже исключено, а значит, вероятность символа «esc» равна 1 . Контекст вновь сокращается до «рав», и аналогично предыдущему вновь следует символ «esc» с вероятностью 1 . Контекст еще сокращается до «ав», вновь следует символ «esc» с вероятностью 1 . И, наконец,