Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_лаб_раб_ТИК.doc
Скачиваний:
27
Добавлен:
10.11.2019
Размер:
687.62 Кб
Скачать

Лабораторная работа №5 Сжатие информации. Алгоритм Хаффмена

Метод Хаффмена (Huffman) разработан в 1952 г. Он более практичен и никогда по степени сжатия не уступает методу Шеннона-Фэно, более того, он сжимает максимально плотно. Код строится при помощи двоичного (бинарного) дерева. Вероятности (частоты) значений д.с.в. приписываются его листьям; все дерево строится, опираясь на листья. Величина, приписанная к узлу дерева, называется весом узла. Два листа с наименьшими весами создают родительский узел с весом, равным сумме их весов; в дальнейшем этот узел учитывается наравне с оставшимися листьями, а образовавшие его узлы от такого рассмотрения устраняются. После постройки корня нужно приписать каждой из ветвей, исходящих из родительских узлов, значения 0 или 1. Код каждого значения д.с.в. – это число, получаемое при обходе ветвей от корня к листу, соответствующему данному значению.

Замечание: Для методов Хаффмена и Шеннона-Фэно каждый раз вместе с собственно сообщением нужно передавать и таблицу кодов.

Пример: Закодируем с помощью метода Хаффмена фразу «Иванов Иван Иванович»

1. Вычисляем количество символов в сообщении (без учета пробелов) и частоту каждого символа.

L=18.

И

В

А

Н

О

Ч

4

5

3

3

2

1

2. Упорядочиваем символы по частоте появления в тексте по убыванию: В – И – А – Н – О – Ч.

3. Записываем символы и их частоты в таблицу. Выбирая последовательно пару самых малых частот, строим двоичное дерево. Для каждого полученного узла в качестве частоты записываем сумму частот узлов, его образующих.

Символ

В

И

А

Н

О

Ч

Частота

5

4

3

3

2

1

0 1 (5)

Ш аг 1 3

0 1 (4)

Ш аг 2 6

0 1 (3)

Ш аг 3 7 0 1 (2)

Ш аг 4 11

0 1 (1)

Шаг 5 18

4. Каждой из ветвей, выходящей из узла, присваиваем код 0 или 1 слева направо, начиная с нижнего узла (синий цвет на рисунке).

5. Код каждого символа получаем при обходе ветвей от корня (нижнего узла) к листу (самому верхнему узлу), соответствующему данному символу.

В – 10 ( )

И – 00 ( )

А – 01 ( )

Н – 110 ( )

О – 1110 ( )

Ч – 1111 ( )

- средняя длина кода

Задание: Закодировать свою фамилию, имя отчество с помощью метода Хаффмена. Вычислить среднюю длину кода. Вычислить энтропию исходного текста.