Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

(по цифровому вещанию) Dvorkovich_V_Cifrovye_videoinformacionnye_sistemy

.pdf
Скачиваний:
249
Добавлен:
15.03.2016
Размер:
23.26 Mб
Скачать

Глава 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.Статистические методы моделирования дискретной информации

Для эффективного кодирования требуется знание характеристик источника информации, в частности, условные вероятности появления символов в зависимости от предшествующих символьных последовательностей. Если не имеется никакой дополнительной информации об источнике данных, то эти условные вероятности определяются с помощью статистического анализа информационных выборок. Такой принцип лежит в основе статистических методов, обладающих высокой эффективностью, но предъявляющих повышенные требования к вычислительным ресурсам.

Статистические методы позволяют оценить вероятность появления в текущем контексте (последовательность символов, непосредственно предшествующих данному символу в информационном сообщении) символа или последовательности символов. Оценка вероятности определяет длину кода, который генерируется, как правило, с помощью префиксного или арифметического кодирования. Чаще

текста x¯n−
n d+1

Глава 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)

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 . И, наконец,