Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТОИП лекции.doc
Скачиваний:
100
Добавлен:
17.03.2015
Размер:
6.17 Mб
Скачать

§14. Процедура Хафмана

Рассмотренная в §13 процедура Шеннона-Фано является простым, но не всегда оптимальным алгоритмом построения экономного кода. Причина состоит в том, что способ разбиения на подмножества ограничен: вероятности сообщений, отнесенных к первому подмножеству, всегда больше или всегда меньше вероятностей сообщений, отнесенных ко второму подмножеству. Оптимальный алгоритм, очевидно, должен учитывать все возможные комбинации при разбиении на равновероятные подмножества. Это обеспечивается в процедуре Хафмана.

Процедура Хафмана представляет собой рекурсивный алгоритм, который строит бинарное дерево «в обратную сторону», т.е. от конечных вершин к корню. Основная идея алгоритма состоит в том, чтобы объединить два сообщения с наименьшими вероятностями – например, p1 и p2 – в одно множество и далее решать задачу с m-1 сообщениями и вероятностями p1’ = p1 + p2; p2’ = p3; … ; pm-1’ = pm. Кодовое дерево, построенное процедурой Хафмана для рассматриваемого примера, приведено на рис.1.6.

Рис.1.6

Кодовое дерево в процедуре Хафмана

Расчеты по формуле 1.3 дают среднее значение длины кодового слова λkS=3,145 (бит/сообщение), что совпадает с результатом применения процедуры Шеннона-Фано. Это означает, что для данного примера процедура Шеннона-Фано также оказалась оптимальной.

§15. Кодирование последовательностей символов

Пусть количество передаваемых сообщений заранее неизвестно и, следовательно, заранее неизвестны вероятности поступления каждого из сообщений на вход канала связи. Однако, известно, что сообщения формируются из символов алфавита A={a,b}, появляющихся независимо друг от друга с вероятностями p1=0,7 и p2=0,3.

При посимвольном кодировании этих сообщений, например, с помощью процедуры Шеннона-Фано, получим равномерные коды, приведенные в таблице 1.2:

Таблица 1.2

Символ ai

Вероятность pi

Кодовое слово ki

Средняя длина кодового слова λkA

a

0,7

1

1 бит/символ

b

0,3

0

Однако, процедуру Шеннона-Фано можно применить не только к отдельным символам алфавита A, но также и к их всевозможным комбинациям – двухсимвольным, трехсимвольным и т.д. – другими словами, можно кодировать целые последовательности символов в сообщениях (при условии, что сообщения будут иметь длину, кратную числу символов в каждой такой последовательности).

Например, для всевозможных двухсимвольных последовательностей алфавита A получим данные, приведенные в таблице 4.3. Из сравнения данных в таблицах 1.2 и 1.1 видно, что кодирование двухсимвольных комбинаций более экономно, чем трехсимвольное кодирование. Еще лучшие результаты дает трехсимвольное кодирование (0,895 бит.символ).

Таблица 1.3

Последовательность символов aiaj

Вероятность pij

Кодовое слово kij

Средняя длина кодового слова λkA

aa

0,49

1

0,905 бит/символ

ab

0,21

01

ba

0,21

001

bb

0,09

000

При дальнейшем увеличении размерности кодируемых комбинаций средняя длина кодового слова уменьшается, стремясь к предельному значению, приблизительно равному 0,881 бит/символ. Повышение экономности кода достигается за счет того, что с увеличением числа кодируемых последовательностей расширяется диапазон возможных значений вероятностей их появления и на каждом шаге кодирования удается точнее разбивать множество кодируемых последовательностей на приблизительно равновероятные подмножества.