- •Лабораторная работа № 4 (7)
- •Задание
- •Задача № 1
- •Задача № 2
- •Контрольные вопросы
- •Краткие теоретические сведения
- •1 Построение кодов Хемминга (описание алгоритма кодирования)
- •2 Обнаружение ошибок в кодах Хемминга
- •3 Декодирование
- •Алфавитное кодирование с минимальной избыточностью
- •Построение кодов Хаффмана
- •Решение
- •Решение
Построение кодов Хаффмана
Обобщим представление об алфавитном кодировании. Каждой схеме алфавитного кодирования со свойством префикса можно поставить в соответствие кодовое дерево (связный ациклический неориентированный граф), которое является частью обобщенного кодового дерева. Обобщенное кодовое дерево строится так:
выбирается начальная вершина (нулевой ярус дерева m = 0 );
из этой вершины выходит пучок ребер, количество которых равно q (мощность алфавита O ), и каждому из них приписано значение элементов алфавита O={b1,b2…} (первый ярус дерева m = 1 );
из каждой вершины первого яруса снова выходит пучок ребер, количество которых равно q, и которые обозначены элементами алфавита O (второй ярус дерева m = 2 );
аналогично строятся третий, четвертый и т.д. ярусы;
Кодовое дерево для конкретной схемы кодирования со свойством префикса будет являться частью обобщенного дерева, причем каждому элементарному коду должна соответствовать концевая вершина этого дерева, а начальные вершины должны совпадать.
Н
а
рисунке 1 показано обобщенное кодовое
дерево для q
= 3. Количество вершин на каждом ярусе
равно q
m
(на первом – 3, на втором – 9, на третьем
– 27 и т.д.). При равномерном алфавитном
кодировании все элементарные коды имеют
одинаковую длину.
С использованием вершин первого яруса как концевых, можно закодировать максимум 3х –символьный входной алфавит, второго 9ти – символьный и т.д. Если r в точности равно q m, то кодом Хаффмана будет схема кодирование элементарными кодами длины m из m–го яруса кодового дерева. Элементарные коды Bi записываются как цепи, соединяющие начальную вершину кодового дерева с каждой из вершин m–го яруса.
Более сложный случай, когда
q m r q m+1, (11)
(для конкретного значения r всегда можно подобрать целое m, удовлетворяющее этому неравенству).
Общие принципы поиска кода (схемы кодирования) с минимальной избыточностью:
для построения элементарных кодов использовать только m и m+1 ярусы кодового дерева;
переходить на m+1 ярус можно только после исчерпания всех возможностей m– го яруса.
Для реализации этого алгоритма необходимо представить r в виде:
r = (q m– n )+ q n – t, (12)
где n - число вершин в кодовом дереве яруса m, которые ветвятся в m+1 ярус;
t число вершин m+1 яруса, не задействованных при построении схемы кодирования ( t q).
Формула для определения l будет иметь следующий вид:
l = [( q m– n) m + (q n – t)( m+1)]/ r (13)
Если имеется информация о вероятности появления символов входного алфавита
I={ a1,a2 ,…, ar } в сообщениях, p1, p2, …pr соответственно, то задача построения кода Хаффмана существенно усложняется. Взаимная однозначность кодирования обеспечивается использованием при составлении элементарных кодов обобщенного кодового дерева, при этом концевым вершинам дерева, соответствующего схеме кодирования, приписываются вероятности p1, p2, …pr , а внутренним вершинам i–го яруса суммы вероятностей тех вершин i+1 –го яруса, которые исходят из них. Для изложения алгоритма построения кодов Хаффмана приведем ряд теоретических положений.
Лемма 1 Для кода с минимальной избыточностью из условия pj pi следует, что
l j lj .
Следствие. В кодовом дереве для кода с минимальной избыточностью вероятности, приписанные концевым вершинам из m–го яруса не меньше, чем вероятности, приписанные концевым вершинам из m +1–го яруса.
Определение. Неконцевая вершина кодового дерева называется насыщенной, если ее порядок ветвления равен q . Кодовое дерево называется насыщенным, если в нем насыщены все неконцевые вершины, за исключением, быть может, одной, лежащей в предпоследнем ярусе, и порядок ветвления этой вершины равен qо, где 2 ≤ qо q (если в насыщенном дереве нет исключительной вершины, то будем считать, что qо = q и роль исключительной может играть любая вершина из предпоследнего яруса). При решении задач для определения порядка ветвления исключительной вершины находят остаток от деления r / (q –1) и назначают qо в соответствии с (14):
(14)
Лемма 2 Среди кодов с минимальной избыточностью существует код, кодовое дерево которого является насыщенным.
Теорема 3 Среди кодов с минимальной избыточностью существует приведенный код (схема кодирования), причем qо определяется в соответствии с (14).
Приведенным будем называть такое кодовое дерево, в котором концевым вершинам, выходящим из qо приписаны минимальные вероятности.
Описание алгоритма поиска кода с минимальной избыточностью (кода Хаффмана) для случая алфавитного кодирования, если имеется информация о вероятности появления символов входного алфавита.
1 Определить qо по формуле (14).
2 Упорядоченный по убыванию список вероятностей p1, p2, …pr заменяют новым упорядоченным списком вида: p1, p2,.. pj, p,…pr–qo, где p = pr–qo+1+ …+ pr (т.е. суммируют последние qо элементов списка и создают новый упорядоченный список, в который входит как элемент полученная сумма); процесс суммирования и упорядочивания (но уже суммируют последние q элементов) продолжается до тех пор, пока в списке вероятностей останется ровно q элементов.
3 Для последнего свернутого по п.2 списка строится одноярусное кодовое дерево (из начальной вершины выходит q ребер, каждому из которых приписывается буква алфавита O, а каждой вершине 1–го яруса вероятности из последнего свернутого списка).
4 Построить 2–й, 3–й и другие ярусы кодового дерева, на которых развернуть просуммированные вероятности последнего, предпоследнего и т.д. списков(вершины, которым приписаны вероятности букв входного алфавита на любом ярусе, становятся концевыми); в результате таких действий получим кодовое дерево, в котором r концевых вершин и каждой из которых приписана вероятность pj .Выписав цепи из нулевой вершины к концевым (перечень ребер), получим схему кодирования с минимальной избыточностью.
Пример1: Построить код с минимальной избыточностью (код Хаффмана) для следующих исходных данных:
r |
q |
p1, p2, …p12 |
7 |
3 |
0,26; 0,22; 0,14… |
