
- •Часть 2 «Эффективные коды»
- •0915 "Компьютерная инженерия"
- •Основные понятия и определения
- •Показатели качества эффективных (оптимальных) кодов
- •Префиксные коды
- •Код Шеннона-Фано
- •Двоичный код Хаффмена
- •3,3 Методика Хаффмена для недвоичных кодов
- •Блочное кодирование
- •Список задач
- •Контрольные вопросы
Код Шеннона-Фано
Рассмотрим процедуру побуквенного кодирования при отсутствии статистической зависимости между буквами (это нужно только для оценки качества кода).
Цель – для данного первичного алфавита построить оптимальный неравномерный код (ОНК) с минимальным значением средней длины кодового слова . Знаки первичного алфавита будем называть буквами, знаки вторичного алфавита – символами.
Алгоритм построения двоичного кода Шеннона-Фано
п.1. Буквы располагаются в порядке убывания вероятностей.
п.2. Буквы разделяются на две группы так, чтобы суммы вероятностей букв в каждой группе были по возможности одинаковыми.
п.3. Всем буквам первой группы присваивается очередной кодовый символ «0», а остальным буквам – символ «1».
п.4. Для каждой из групп повторяются пункты 2 и 3 с целью получения кодового слова до тех пор, пока в каждой группе останется одна буква.
Методика просто распространяется на случай m>2. Для m=2 лучшие результаты получаются, когда вероятности появления букв первичного алфавита равны целым отрицательным степеням двойки.
Пример 1
Построить ОНК по методу Шеннона-Фано, если символы источника сообщений появляются с вероятностями, заданными таблицей 2.
Таблица 2 Исходные данные к примеру 1
Буква |
a1 |
a2 |
a3 |
a4 |
a5 |
a6 |
a7 |
a8 |
Вероятность |
0,04 |
0,10 |
0,20 |
0,11 |
0,16 |
0,22 |
0,02 |
0,15 |
Р е ш е н и е
Реализуем алгоритм построения кода Шеннона-Фано по пунктам. Проиллюстрируем работу алгоритма построения кода Шеннона-Фано с помощью таблицы 3.
п.1. В столбце 1 (таблица 3) буквы первичного алфавита отсортированы в порядке убывания вероятностей их появления.
п.2. Разобьем множество букв на две группы:
первая группа – (a6, a3, a5) с суммарной вероятностью
p(a6)+p(a3)+p(a5)=0,22+0,20+0,16=0,58;
вторая группа – (a8, a4, a2, a1, a7) с суммарной вероятностью
p(a8)+p(a4)+p(a2) +p(a1)+p(a7)=0,15+0,11+0,10+0,04+0,02=0,42.
Таблица 3 Построение кода Шеннона Фано (пример 1)
Буква |
р(аk) |
Код 1 |
|
|
– p(ak) log p(ak) |
1 |
2 |
3 |
4 |
5 |
6 |
a6 |
0,22 |
00 |
2 |
0,44 |
0,4806 |
a3 |
0,20 |
010 |
3 |
0,60 |
0,4644 |
a5 |
0,16 |
011 |
3 |
0,48 |
0,4230 |
a8 |
0,15 |
10 |
2 |
0,30 |
0,4105 |
a4 |
0,11 |
110 |
3 |
0,33 |
0,3503 |
a2 |
0,10 |
1110 |
4 |
0,40 |
0,3322 |
a1 |
0,04 |
11110 |
5 |
0,20 |
0,1858 |
a7 |
0,02 |
11111 |
5 |
0,10 |
0,1129 |
|
|
|
|
H(A)=2,7597 |
п.3. Первым символам кодовых слов букв a6, a3, a5 присваиваем символ «0», а первым символам кодовых слов букв a8, a4, a2, a1, a7 присваиваем символ «1» (столбец 3, таблица 3).
п.4. Повторяется п.2 для первой группы, которая разбивается на две подгруппы: (a6) и (a3, a5). В соответствии с п.3 второму символу буквы a6 присваивается символ «0», и на этом процесс кодирования буквы a6 заканчивается:
Cod a6 =00.
Вторым символам группы (a3, a5) присваивается символ «1».
Повторяется п.2 для группы (a3, a5), она разбивается на буквы a3 и a5.
В соответствии с п.3 третьему символу буквы a3 присваивается символ «0», а третьему символу буквы a5 символ «1», и на этом процесс кодирования букв a3 и a5 заканчивается:
Cod a3 =010,
Cod a5 =011.
Аналогично проводится кодирование остальных символов букв a8, a4, a2, a1, a7, результаты которого представлены в столбце 3, таблица 3.
Оценим эффективность построенного кода.
Среднюю длину
кодового слова вычислим по формуле
(1.2), для чего для каждой буквы первичного
алфавита воспользуемся данными из
столбцов 4 и 2 таблицы 3, поместим полученные
произведения в соответствующие ячейки
столбца 5 и просуммируем их (
=2,85).
Вычислим энтропию первичного алфавита по известной формуле (1.5). В столбце 6 таблицы 3 произведены соответствующие вычисления:
H(A)=2,7597 бит/символ.
Вычислим коэффициент относительной эффективности по формуле (1.3)
и коэффициент статистического сжатия – по формуле (1.4)
Если для алфавита, заданного таблицей 2, будет построен другой код, для него надо вычислить значения коэффициента относительной эффективности и коэффициента статистического сжатия и провести сравнения. Более эффективным окажется тот код, для которого значения коэффициента относительной эффективности и коэффициента статистического сжатия окажутся большими.
Пример 2
Рассмотренная методика Шеннона-Фано не всегда приводит к однозначному построению кода, так как при разбиении на подгруппы можно сделать большей по сумме вероятностей как верхнюю, так и нижнюю подгруппы.
Например, множество букв, приведенных в таблице 3 (пример 1), можно разбить следующим образом:
первая группа – (a6, a3) с суммарной вероятностью
p(a6)+p(a3)=0,22+0,20=0,42;
вторая группа – (a5, a8, a4, a2, a1, a7) с суммарной вероятностью
p(a5)+p(a8)+p(a4)+p(a2)+p(a1)+p(a7)=
=0,16+0,15+0,11+0,10+0,04+0,02=0,58.
Постройте код Шеннона-Фано для этого варианта разбиения множества букв на подгруппы, вычислите значения коэффициента относительной эффективности и коэффициента статистического сжатия, проведите сравнительный анализ результатов решения примера 2 с результатами решения примера 1.