Магия Электроники

Теория информации


Код Хафмена

Код Хафмена строится на базе кодового дерева.

Кодовое дерево – специальный граф, отображающий запись всех возможных K-ичных n-разрядных чисел, используемых в качестве кодовых комбинаций для кодирования сообщений в количестве M Ј Kn. При этом каждое число отображается одним из узлов графа. Из каждого узла выходит K ветвей, которые связывают этот узел с другими. Количество символов, входящих в число, соответствующее данному узлу, называется его порядком.

Рассмотрим граф для двоичного трехэлементного кода.

Рис. 13 Кодовое дерево двоичного трехэлементного кода

Для построения оптимального кода на базе кодового дерева надо учитывать следующее:

При укрупнении сообщений, то есть при переходе от узлов порядка i к узлам порядка (i1) количество сообщений уменьшается на (K1), если узел порядка (i1) был неполным, либо на (m01), если узел порядка (max1) был неполным и если из него выходило m0 ветвей, заканчивающихся m0 узлами порядка max (max – максимальный порядок узлов дерева).

Величина m0 заключена в следующих пределах:

2 Ј m0 Ј K

Определим точное значение m0. Предположим, что реализуется процесс укрупнения сообщений в направлении от узлов максимального порядка к корню дерева. Если общее количество исходных сообщений было M, то

M = 1 + a(K – 1) + (m0 1)

где M – общее количество сообщений; a – число полных узлов, встретившихся в процессе укрупнения; (a – целое число).

Из этого соотношения можно определить m0, подбирая целые числа a так, чтобы выполнялось условие:

2 Ј m0 Ј K.

Построение кода Хафмена начинается с определения m0, то есть числа тех наименее вероятных сообщений, которые должны быть объединены на первом этапе построения кода (кодового дерева).

Все остальные узлы дерева являются полными, и поэтому на всех последующих этапах построения надо объединять сообщения в группы из кодовых слов.

Следует отметить, что метод Хафмена применим для источника сообщений, появляющимися с любой вероятностью, а не только с вероятностью целой степени основания кода.

Пример 1. Дан ансамбль сообщений:

Построить двоичный код Хафмена.

Так как основание кода K = 2, m0 = 2, то есть вообще не будет неполных узлов.

Кодовое дерево для данного кода представлено на рис. 14.

Рис. 14

Пример 2. Закодировать источник сообщения из примера 1 троичным кодом.

По правилам построения кодов Хафмена сначала нужно определить m0:

Если a = 1, то m0= 4 > 3, поэтому m0 = 4 не подходит.

Если a = 2, то m0 = 2 < 3, следует принять m0= 2.

Процесс построения кода изображен на рис.15.

Рис. 15



<<Назад Выход Вверх Дальше >>


Hosted by uCoz