Для построения оптимального кода на базе кодового дерева необходимо учитывать следующее:
1) символ ансамбля с наибольшей вероятностью появления должен находиться в узле наименьшего порядка.
2) по крайней мере, два сообщения с минимальной вероятностью появления должны кодироваться в узлах максимального порядка.
3) если выбран узел порядка i, то все узлы более высокого порядка, связанные с ним, не могут быть использованы для кодирования.
4) для кодирования могут не использоваться узлы более высокого порядка.
При укрупнении сообщения, т.е. при переходе от улов порядка i к i – 1 количество символов, закодированных в узлах более высокого порядка, уменьшается. Однако в узлах самого высокого порядка количество закодированных символов m0 должно лежать в пределах [2,k], где k – основание кода.
При выборе k используют следующую формулу:
M = 1 + (k – 1) + (m0 – 1) (5.9)
где М – общее количество символов в алфавите
m0 – количество закодированных символов
– целое число, которое подбирается таким образом, чтобы выполнялось условие:
(5.9)
где k – основание кода
Если найдено m0, то оно определяет количество закодированных символов в узлах само высокого порядка. Все остальные узлы низких порядков полностью заполняются.
Требуется построить двоичный код Хаффмана.
k = 2 m0 = 2
Следовательно, в узлах самого высокого порядка количество закодированных символов равно 2.
Необходимо построить вспомогательную таблицу:
Таблица 5.3
Таким образом, можно окончательно записать код Хаффмана для сообщения:
1000010101100110100010111001101110111110001001
Среднее количество разрядов, необходимого для передачи одного символа рассчитается по формуле (5.3):