Сжатие информации в компьютерных сетях
52
вероятностей в дополнительном столбце. Два последних элемента столбца
объединяются во второй вспомогательный символ, и образуется
следующий дополнительный столбец, в котором все элементы
расположены в порядке убывания вероятностей. Процедура продолжается
до тех пор, пока не получится единственный вспомогательный символ,
имеющий вероятность, равную единице. Код, построенный по
рассмотренному алгоритму, получил название кода Хаффмена.
Для формирования кодовых комбинаций, соответствующих
символам данного сообщения, необходимо проследить путь перехода
символов по строкам и столбцам таблицы. При построении кодов
Хаффмена наиболее часто используются кодовые деревья. С одной
стороны это позволяет более наглядно отобразить процедуры кодирования
и декодирования, а с другой — облегчить программную реализацию этих
процедур.
Построение дерева (Рис.3.2,а) начинается с корневого узла,
вероятность которого равна 1. Из корня проводятся две ветви, причем
ветви с большей вероятностью присваивается значение (бит) 1, а с
меньшей вероятностью - 0. Вновь образованные узлы могут отображать
одиночный или вспомогательный символы. В последнем случае узел
является промежуточным и из каждого из них, в свою очередь, снова
проводятся по две ветви. Такое последовательное ветвление продолжается
до тех пор, пока не будет достигнут узел, соответствующий вероятности
символа алфавита (узел листа). Двигаясь по кодовому дереву от корня
сверху вниз, можно записать для каждого символа соответствующую ему
кодовую комбинацию (рис.3.2,б). Среднее число битов на символ при
таком построении кода составляет
l
ср
=
Р(a
i
) l(a
i
) = 0,22 2 + 0,2 2 + 0,16 3 + 0,16 3 +
+ 0,1 3 + 0,1 4+ 0,04 5 + 0,02 5 = 2,8 бит.
Энтропия источника сообщения равна:
Н(A) = -
Р(a
i
) log Р(a
i
) = - (0,22 log 0,22 + 0,2 log 0,2 +
+0,16 log 0,16 + 0,16 log 0,16 + 0,1log 0,1 + 0,1log 0,1 +
+ 0,04 log 0,04 + 0,02 log0,02 = 2,754 бит.
Здесь и во всех остальных примерах, если не будет специально
оговорено, используется логарифм по основанию 2. Как видно из
рассмотренного примера средняя длина кодовой комбинации и энтропия