Читайте также: |
|
Метод Хаффмена (Huffman) разработан в 1952 г. Он более практичен и никогда по степени сжатия не уступает методу Шеннона-Фэно, более того, он сжимает максимально плотно. Код строится при помощи двоичного (бинарного) дерева. Вероятности (частоты) значений д.с.в. приписываются его листьям; все дерево строится, опираясь на листья. Величина, приписанная к узлу дерева, называется весом узла. Два листа с наименьшими весами создают родительский узел с весом, равным сумме их весов; в дальнейшем этот узел учитывается наравне с оставшимися листьями, а образовавшие его узлы от такого рассмотрения устраняются. После постройки корня нужно приписать каждой из ветвей, исходящих из родительских узлов, значения 0 или 1. Код каждого значения д.с.в. – это число, получаемое при обходе ветвей от корня к листу, соответствующему данному значению.
Замечание: Для методов Хаффмена и Шеннона-Фэно каждый раз вместе с собственно сообщением нужно передавать и таблицу кодов.
1. Вычисляем количество символов в сообщении (без учета пробелов) и частоту каждого символа.
L=21.
Х | А | Н | И | Р | О | М | Г | Е | Д | В | Ч |
Энтропия:
2. Упорядочиваем символы по частоте появления в тексте по убыванию:
Н– А – И – Е – Х – Р – О – М – Г – Д – В – Ч.
3. Записываем символы и их частоты в таблицу. Выбирая последовательно пару самых малых частот, строим двоичное дерево. Для каждого полученного узла в качестве частоты записываем сумму частот узлов, его образующих.
Симво-лов | Н | А | И | Е | Х | Р | О | М | Г | Д | В | Ч |
Часто-та |
|
4. Каждой из ветвей, выходящей из узла, присваиваем код 0 или 1 слева направо, начиная с нижнего узла
5. Код каждого символа получаем при обходе ветвей от корня (нижнего узла) к листу (самому верхнему узлу), соответствующему данному символу.
Н– 000
А –001
И –010
Е –011
Х –1000
Р –1001
О –1010
М –1001
Г –1100
Д –1101
В –1110
Ч –1101
- средняя длина кода
Дата добавления: 2015-11-30; просмотров: 29 | Нарушение авторских прав