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

Методика построения кода Хаффмена [2 и др.].

Для двоичного кода методика сводится к следующему алгоритму 1:

Шаг 1. Буквы алфавита сообщении X={x1, x2, …, xr}, имеющие соответствующие вероятности их появления p(x1), p(x2), …, p(xr), выписывают в основной столбец в порядке убывания вероятностей.

Шаг 2. Две последние самые маловероятные буквы xr-1 и xr объединяют в одну вспомогательную (укрупненную) букву а, которой приписывают суммарную вероятность, равную сумме вероятностей букв xr-1 и xr, т.е. p(a)=p(xr-1)+p(xr). Вероятности букв, не участвовавших в объединении, и полученная суммарная вероятность снова располагаются в порядке убывания вероятностей в дополнительном столбце.

Шаг 3. Повторяем шаги 1 и2 до тех пор, пока не получим единственную вспомогательную букву с вероятностью, равной единице.

Шаг 4. Для наглядности строим дерево. Двигаясь по кодовому дереву от корня к вершинам, т.е. сверху вниз, можно записать для каждой буквы соответствующую ей кодовую комбинацию.

Пример 5.4. Используя методику Хаффмена, осуществим эффективное кодирование ансамбля знаков, приведенных в таблице 5.6.

Процесс кодирования в соответствии выше приведенному алгоритму поясняется таблицей 5.6. Для составления кодовой комбинации, соответствующей данному знаку, необходимо проследить путь знака по строкам и столбцам таблицы.

Таблица 5.6.

Знаки

Вероят-ности

Вспомогательные столбцы

1

2

3

4

5

6

7

z1

z2

z3

z4

z5

z6

z7

Z8

Для наглядности строим кодовое дерево. Из точки, соответствующей вероятности 1, направляем на две ветви, причем ветви с большей вероятностью присваиваем символ 1, а меньшей 0. Такое последовательное ветвление продолжаем до тех пор, пока не дойдет до вероятности каждой буквы. Кодовое дерево для алфавита букв, рассматриваемого в таблице 5.6, представлено на рисунке 5.2.

Рис. 5.2.

Теперь, двигаясь по кодовому дереву сверху вниз, можно записать для каждой буквы соответствующую ей кодовую комбинацию:

Задача построения кода Хаффмена может решатся непосредственно через построение кодового дерева по алгоритму 2:

Построение графа-дерева начинается с висячих вершин, которым в качестве весов назначают вероятности p(xi), i = 1, …, r. Висячие вершины графа упорядочивают в соответствии с их весом. Это позволяет в дальнейшем уменьшить число пересечений ребер или вовсе исключить их.

Далее дерево строится по следующему алгоритму.

Шаг 1. Определяется число поддеревьев графа. Если оно меньше двух, то дерево построено и на этом действие алгоритма заканчивается. Если число поддеревьев равно или больше двух, то осуществляется переход к шагу 2. (Замечание. В начале построения имеется r изолированных вершин графа, являющихся поддеревьями и одновременно корнями поддеревьев.)

Шаг 2. Выбираются корни двух поддеревьев графа с минимальными весами и осуществляется сращение выбранных поддеревьев с добавлением при этом одной вершины и двух ребер. Вес вновь образованной вершины определяется как сумма весов корней выбранных поддеревьев, левому добавленному ребру приписывается вес, равный единице, правому – равный нулю. Далее переход к шагу 1.

В результате применения алгоритма образуется кодовое дерево-граф со взвешенными ребрами. Для получения кода сообщения xi, достаточно выписать веса ребер, составляющих путь из корня дерева в соответствующую висячую вершину.

Проиллюстрируем метод Хаффмена построение кода по алгоритму 2.

Пример 5.5 Разработать код с использованием метода Хаффмена для входного алфавита x={x1, x2, …, x8} и выходного алфавита B={0, 1}, если p(x1)=0.19; p(x2)=0.16; p(x3)=0.16; p(x4)=0.15; p(x5)=0.12; p(x6)=0.11; p(x7)=0.09; p(x8)=0.02, и определить коэффициент избыточности полученного кода.

Построим кодовое дерево (рис. 5.3) и в соответствии с ним составим кодовую таблицу, дополнив ее промежуточными вычислениями, необходимыми для определения коэффициента избыточности (табл. 5.7).

Рисунок 5.3.

Таблица 5.7

Знаки xi

Вероятности p(xi)

Кодовая комбинация

ni

ni p(xi)

p(xi)logp(xi)

x1

0.19

10

2

0.38

-0.45522

x2

0.16

000

3

0.48

-0.42301

x3

0.16

001

3

0.48

-0.42301

x4

0.15

010

3

0.45

-0.41054

x5

0.12

011

3

0.36

-0.36706

x6

0.11

110

3

0.33

-0.35028

x7

0.09

1110

4

0.36

-0.31265

x8

0.02

1111

4

0.08

-0.11288

Средняя длина кодовой комбинации

(5.15)

Энтропия сообщения источника

(5.16)

Минимальная средняя длина кодовой комбинации определяется из равенства:

(5.17)

Коэффициент избыточности

(5.18)

Как видно из (5.18) построенный код практически не имеет избыточности.