Преимущество метода Хаффмена сказывается при построении ОНК для вторичных алфавитов с числом качественных признаков m>2 (например, если сообщения передаются с помощью трех или более частот). Большая эффективность достигается за счет более строгого выбора числа L наименее вероятных букв первичного алфавита, объединяемых на первом этапе построения кодового дерева.
Число L этих букв должно удовлетворять условиям
2 L m, (19)
кроме того,
(20)
где f - целое положительное число;
K - число букв первичного алфавита;
m - количество качественных признаков вторичного алфавита.
Хаффмен показал, что для получения минимально возможного значения средней длины кодового слова кода необходимо и достаточно выполнения следующих условий:
- при p(ai)>p(at) длины i-го и t-го кодовых слов должны находиться в отношении nt ni;
- L букв первичного алфавита с наименьшими вероятностями имеют кодовые слова одинаковой длины, отличающиеся друг от друга последним символом;
- любая возможная последовательность (nK-1) кодовых символов должна либо сама быть кодовой комбинацией, либо иметь своим префиксом разрешенную кодовую комбинацию.
Для первичных (кодируемых) алфавитов с числом качественных признаков m1=12 построение оптимального кода во вторичном (кодовом) алфавите с числом качественных признаков m2=4 сводится к процедуре построения префиксного кодового дерева.
Приведем ниже алгоритм выполнения задания:
При выполнении алгоритма удобно строить недвоичное кодовое дерево и помечать дуги, входящие в очередную вершину, символами из множества {0, 1,…,m}.
п.1. Объединить
L=2+Rm-1(K-2) (21)
букв с наименьшими вероятностями в некоторую новую букву с вероятностью, равной сумме вероятностей объединяемых букв. В (21) через Rm-1(K-2) обозначен остаток от деления (K-2) на (m-1).
Полагаем, что последний символ буквы aК-L+1 равен «0», последний символ буквы aК-L+2 – «1», последний символ буквы aК-L+3 – «2» и так далее до «L».
п.2. В редуцированном ансамбле определить m букв с наименьшими вероятностями, объединить их в обобщенную букву и присвоить очередному символу каждой из объединяемых букв значения 1, 2,…, m.
п.3. Повторять п.2. до тех пор, пока не получится редуцированный ансамбль из одной буквы, которой соответствует единичная вероятность.
п.4. Для каждой буквы первичного алфавита строим недвоичное кодовое слово, которому соответствует путь на кодовом дереве от корневой вершины к соответствующей концевой вершине по отметкам дуг из множества {0, 1,…, m}.
Р е ш е н и е
Шаг 1: п.1. По формуле (21) вычисляем число букв, объединяемых на первом этапе:
L=2+R4-1(12-2)=2+ R3(10)=2+1=3.
Выбираем три буквы с наименьшими вероятностями aK-2=a2, aK-1=a9 и aK=a8:
p(a2)=0,03;
p(a9)=0,03;
p(a8)=0,02.
Последнему символу кода буквы a2 присваиваем значение «0» (на рисунке 1 дуга, инцидентная концевой вершине а2, получила отметку «0»), по символу буквы a9 – значение «1» (дуга, инцидентная концевой вершине а9, получила отметку «1»), и по символу буквы a8 – значение «2» (дуга, инцидентная концевой вершине а8, получила отметку «2»). Объединяем буквы a2, a9, a8 в одну букву с вероятностью
p(a2)+p(a9)+p(a8)=0,03+0,03+0,02=0,08,
редуцируя исходный ансамбль А.
Шаг 2:Повторяемпункт 2, редуцируя ансамбль , объединяем буквы с наименьшими вероятностями(объединенные на шаге 1 буквы a2, a9, a8 и буквы a4, а3 и а5):
Соответствующие дуги помечаем символами «0» (дуга с весом 0,08) «1» (буква обьединенная на шаге 1, дуга с весом 0,08), «2» (дуга с весом 0,07) и «3» (дуга с весом 0,04).
Шаг 3: п.2.Продолжаем редуцировать ансамбль : объединяем буквы с наименьшими вероятностями:
На этом редуцирование исходного ансамбля А завершено (на рисунке 1 получена корневая вершина кодового дерева с сумммарной вероятностью, равной 1,0). Завершает построение недвоичного кода Хаффмена (m=4) реализация п.4 (рисунок 1).