Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курапова, Мачикина. Методы кодирования данных.doc
Скачиваний:
250
Добавлен:
11.04.2015
Размер:
898.56 Кб
Скачать
    1. Адаптивный код Хаффмана

В 1978 году Р. Галлагер предложил метод кодирования источников с неизвестной или меняющейся статистикой, основанный на коде Хаффмана, и поэтому названный адаптивным кодом Хаффмана.

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

  1. Перед кодированием очередной буквы подсчитываются частоты появления в окне всех символов исходного алфавита А={a1, a2, ..., an}. Обозначим эти частоты как q(a1), q(a2), ..., q(an). Вероятности символов исходного алфавита оцениваются на основе значений частот символов в окне

P(a1)= q(a1)/W, P(a2) =q(a2)/W, ..., P(an)= q(an)/W.

  1. По полученному распределению вероятностей строится код Хаффмана для алфавита А.

  2. Очередная буква кодируется при помощи построенного кода.

  3. Окно передвигается на один символ вправо, вновь подсчитываются частоты встреч в окне букв алфавита, строится новый код для очередного символа, и так далее, пока не будет получен код всего сообщения.

Пример. Рассмотрим пример адаптивного кодирования с помощью метода Хаффмана для алфавита А={a1, a2, a3, a4} и длины окна W=6 (см. рис. 9).

Рисунок 9 Кодирование адаптивным кодом Хаффмана

Рассмотрим подробно этапы кодирования сообщения.

При кодировании буквы a3 получаем следующие частоты встреч символов в окне: q(a1)=3, q(a2)=1, q(a3)=1, q(a4)=1. Тогда вероятности символов алфавита A оцениваются так

Строим код Хаффмана для полученного распределения вероятностей (см. рис. 10 (а)) и кодируем символ а3 кодовым символом 001.

a)

Символы

Вероятности

Построение кода

Кодовые cлова

а1

1/2

1

1

а2

1/6

1/2 0

01

а3

1/6

1/3

001

а4

1/6

000

б)

Символы

Вероятности

Построение кода

Кодовые слова

а1

1/3

1

1

а2

1/6

1/3 2/3 0

011

а3

1/3

00

а4

1/6

010

в)

Символы

Вероятности

Построение кода

Кодовые слова

а1

1/3

1/2 1

11

а2

0

1/6 0

101

а3

1/2

0

а4

1/6

100

Рисунок 10 Построение адаптивного кода Хаффмана

Далее передвигаем окно на один символ вправо и снова подсчитываем частоты встреч символов в окне q(a1)=2, q(a2)=1, q(a3)=2, q(a4)=1 и оцениваем вероятности:

Строим код на основе полученных оценок вероятностного распределения (см. рис. 10 (б)) и кодируем очередной символ а3 другим кодовым словом  00. В этом случае частота встречи в окне символа а3 увеличилась, соответственно уменьшилась длина его кодового слова.

Снова передвигаем окно на один символ вправо, подсчитываем частоты встреч символов в окне q(a1)=2, q(a2)=0, q(a3)=3, q(a4)=1 и оцениваем вероятности:

Строим код на основе полученных оценок вероятностного распределения (см. рис. 10 (в)) и кодируем очередной символ а2 кодовым словом  101. Таким образом, после кодирования символов a3a3a2 получаем кодовую последовательность 00100101.