5.3. Код Хаффмена
Кодирование по методу Хаффмена осуществляется следующим образом:
1. Все подлежащие кодированию символы записываются в порядке убывания их априорных вероятностей. Если некоторые символы имеют одинаковые вероятности, то их располагают рядом в произвольном порядке.
2. Выбирают символы с минимальными вероятностями по 2 и одному приписывают 0, а другому 1.
3. Выбранные символы объединяют в промежуточные символы с суммарной вероятностью.
4. Снова находят пару символов с наименьшими вероятностями и поступают аналогично.
В таблице 2 приведен пример кодирования по методу Хаффмена для источника сообщений с заданными вероятностями символов алфавита:
x1 = 0,4; x2 = x5 = 0,2; x3 = 0,1; x4 = x6 = 0,05.
Таблица 2
Символ | pi | Граф кода Хаффмена | Код |
x1
x2
x5
x 3
x 4
x 6
|
0,4
0,2
0,2
0,1
0,05
0,05 | 1 (1,0) 1 0 (0,6) 1 0 (0,4) 1 0
(0,2) 1 0 (0,1) 0 | 1
01
001
0001
00001
00000 |
Энтропия источника равна
Средняя длина кодовой комбинации данного кода
Длина кодовой комбинации примитивного кода определяется соотношением
(11.7)
Округляя до ближайшего целого в большую сторону, получим l = 3.
Эффективность ОНК максимальна, если .
Коэффициент относительной эффективности равен
.
Коэффициент статистического сжатия равен
.
Неравномерный код можно передавать блоками заданной длины, а на приемной стороне декодировать всю последовательность.
Пример 1. Построить оптимальные неравномерные коды (ОНК) по методу Шеннона-Фано и по методу Хаффмена для передачи сообщений, в которых вероятности символов первичного алфавита равны:
p(a1) =0,1; p(a2) =0,07; p(a3) =0,02; p(a4) =0,17;
p(a5) =0,42; p(a6) =0,09; p(a7) =0,08; p(a8) =0,05.
Оценить эффективность каждого кода, т. е. насколько они близки к оптимальным. Определить емкость (пропускную способность) канала связи для каждого кода, если скорость передачи двоичных символов (V = 1/) равна 1000 симв/с, т.е. время передачи одного символа вторичного алфавита (двоичного символа) равна = 0,001с = 1мкс.
Решение: Построим код по методу Шеннона-Фано, используя следующий алгоритм:
1. Символы сообщения располагаем в порядке убывания их априорных вероятностей.
2. Исходный ансамбль кодируемых символов разбиваем на две группы с примерно равными вероятностями (лучше, если суммарная вероятность верхней группы меньше).
3. Верхней группе присваиваем символ 1, а нижней 0.
4. Процесс деления повторяем до тех пор, пока в каждой подгруппе останется по одному символу.
Процесс построения кода приведем в таблице 3.
Таблица 3
ai | p(ai) | Разбиение | Код | li | pili
|
a5 a4 a1 a6 a7 a2 a8 a3 | 0,42 0,17 0,10 0,09 0,08 0,07 0,05 0,02
| }0
1 0 }0 }1 1 0 }0 }1 1 }0 }0 }1 | 0 100 101 1100 1101 1110 11110 11111 | 1 3 3 4 4 4 5 5 | 0,42 0,51 0,3 0,36 0,32 0,28 0,25 0,1 |
. .
Могут быть и другие варианты построения кода, но lср при этом не меняется.
Определим энтропию источника сообщений:
= -(0,42 log20,42+0,17 log20,17+0,1log20,1+0,09log20,09+0,08log20,08+
+0,07log20,07+0,05log20,05+0,02log20,02) = 0,5256+0,4346+0,3322+
+0,3126+0,2915+0,2686+0,2161+0,1129 = 2,49 бит/симв.
Оценим эффективность построенного кода, которая определяется коэффициентами относительной эффективности и статистического сжатия.
Коэффициент относительной эффективности равен
Коэффициент статистического сжатия равен
.
Необходимая пропускная способность канала связи для передачи сообщений оптимальными кодами вычисляется по формуле
.
Для полученного кода она равна С = 103 2,54 = 2,54 Кбит/с.
Построим код по методу Хаффмена, используя следующий алгоритм:
1. Символы первичного алфавита располагаем в порядке убывания их вероятностей.
2. Последние два символа объединяем в один, с суммарной вероятностью.
3. Упорядочиваем символы с учетом вновь образованных и последние два символа объединяем в один с суммарной вероятностью. Эту процедуру повторяем до тех пор, пока не останется два символа.
4. Строим кодовое дерево, вершиной которого является 1 (суммарная вероятность всех символов сообщения).
При построении дерева символы, в принципе, можно не упорядочивать.
Процесс построения кода приведен в таблице 4.
Коэффициент статистического сжатия равен
.
Коэффициент относительной эффективности
.
Необходимая пропускная способность канала связи
Кбит/c.
Tаблица 4
аi
|
p(ai) |
Кодовое дерево |
Код |
li |
pili | ||
a5
a4
a1
a6
a7
a2
a8
a3 |
0,42
0,17
0,10
0,09
0,08
0,07
0,05
0,02 |
1 (1,0)
1 1 0
(0,34) (0,58) 0 1 0 (0,24) 1 0 (0,17) 0
1 (0,14) 1 0 (0,7) 0 |
1
011
001
0101
0100
0001
00001
00000 |
1
3
3
4
4
4
5
5 |
0,42
0,51
0,3
0,36
0,32
0,28
0,25
0,1 |
. .
Построенные коды Шеннона – Фано и Хаффмена равноценны, т. к. они имеют одинаковые показатели эффективности. Оба кода отличаются от оптимального на 2%.
- Тема 1. Предмет и методы теории информации и кодирования
- 1.1. Введение
- 1.2. Основные понятия и определения
- 1.3. Системы передачи информации
- Тема 2. Математическая теория информации
- 2.1. Количество информации, и ее мера
- 2.2. Свойства количества информации
- 2.3. Энтропия информации
- 5.2. График энтропии для двух альтернативных событий
- 2.4. Свойства энтропии сообщений
- 2.5. Безусловная энтропия и ее свойства
- 2.6. Условная энтропия.
- 2.5. Энтропия объединения
- Энтропия объединения (совместная энтропия) находится при помощи матрицы ( табл.3) путем суммирования по строкам или столбцам всех вероятностей вида
- Уяснению взаимосвязи между рассмотренными видами энтропий дискретных систем способствует их графическое изображение.
- Тема 3. Основы теории кодирования
- 3.1.Основные понятия и определения
- 3.2. Классификация кодов
- 3.3. Способы представления кодов
- Тема 4. Каналы связи
- 4.1. Каналы связи, их классификация и характеристики
- Пропускная способность дискретного канала связи
- Дискретный канал связи без помех
- Дискретный канал связи с помехами
- Пример. По каналу связи передаются сообщения, вероятности которых соответственно равны:
- Пропускная способность бинарного, симметричного канала
- Избыточность сообщений
- Тема 5. Оптимальное кодирование
- 5.1. Основные понятия и определения
- 5.2. Код Шеннона-Фано
- 5.3. Код Хаффмена
- Тема 6. Помехоустойчивое кодирование
- 6.1. Общие положения
- 6.2. Обнаруживающие коды
- Тема 7. Корректирующие коды
- 7.1. Основные понятия
- 7.2 Линейные групповые коды
- 7.3. Код хэмминга
- Тема 8. Циклические коды
- 8.1. Операции над циклическими кодами
- 8.2. Циклические коды, исправляющие одиночную ошибку
- Если задана длина кодовой комбинации, то число контрольных разрядов определяем по формуле
- Так как частное q(X) имеет такую же степень, как и кодовая комбинация g(X) , то q(X) является кодовой комбинацией того же k - значного кода.
- 8.3. Матричная запись циклического кода
- 8.4. Циклические коды, обнаруживающие трехкратные ошибки
- Тема 9. Коды боуза-чоудхури- хоквингема
- Сигнальные символы это вспомогательные данные, облегчающие декодирование: служебные сигналы, сигналы синхронизации и т. Д.
- Тема 10. Введение в криптологию
- 0 1 2 3 4 5 6 7 8 9 25 Ключ
- 4 7 9 2 3 5 1 6 8 Ключ
- Функция дискретного логарифма обратная