Заказать курсовые, контрольные, рефераты...
Образовательные работы на заказ. Недорого!

Лекция 4. Оптимальное кодирование (метод Хаффмана)

РефератПомощь в написанииУзнать стоимостьмоей работы

Этот метод имеет два преимущества по сравнению с методом Шеннона-Фано: он устраняет неоднозначность кодирования, возникающую из-за примерного равенства сумм частот при разделении списка на две части (линия деления проводится неоднозначно), и имеет, в общем случае, большую эффективность кода. Исходное множество символов упорядочивается по невозрастанию частот, после чего выполняются следующие шаги. Читать ещё >

Лекция 4. Оптимальное кодирование (метод Хаффмана) (реферат, курсовая, диплом, контрольная)

Этот метод имеет два преимущества по сравнению с методом Шеннона-Фано: он устраняет неоднозначность кодирования, возникающую из-за примерного равенства сумм частот при разделении списка на две части (линия деления проводится неоднозначно), и имеет, в общем случае, большую эффективность кода. Исходное множество символов упорядочивается по невозрастанию частот, после чего выполняются следующие шаги:

  • 1) объединение частот:
    • — две последние частоты списка складываются, а соответствующие символы исключаются из списка;
    • — оставшийся после исключения символов список пополняется суммой частот и вновь упорядочивается;
    • — предыдущие шаги повторяются до тех пор, пока ни получится единица в результате суммирования и список ни уменьшится до одного символа.
  • 2) построение кодового дерева:
    • — строится двоичное кодовое дерево: корнем его является вершина, полученная в результате объединения частот, равная 1, листьями — исходные вершины;
    • — остальные вершины соответствуют либо суммарным, либо исходным частотам, причем для каждой вершины левая подчиненная вершина соответствует большему слагаемому, а правая — меньшему;
    • — ребра дерева связывают вершины-суммы с вершинами-слагаемыми.

Структура дерева показывает, как происходило объединение частот. Ребра дерева кодируются: каждое левое кодируется единицей, каждое правое — нулём.

3) формирование кода: для получения кодов листьев (исходных кодируемых символов) продвигаются от корня к нужной вершине и «собирают» веса проходимых рёбер.

Рассмотрим пример.

Даны символы a, b, c, d с частотами p (a) = 0,5; p (b) = 0,25; p© = 0,125; p (d)= 0,125. Построить эффективный код методом Хаффмана.

1) объединение частот (результат объединения двух последних частот в списке выделен в правом соседнем столбце штриховкой).

Исходные символы.

Частоты символов.

Этапы объединения.

первый.

второй.

третий.

a.

0,5.

0,5.

0,5.

b.

0,25.

0,25.

0,5.

c.

0,125.

0,25.

d.

0,125.

  • 2) Построение кодового дерева.
  • 3) формирование кода:

K (a) = 1; K (b) = 01; K© = 001; K (d) = 000.

Как видно, полученные коды совпадают с теми, что были сформированы методом Шеннона-Фано, следовательно, они имеют одинаковую эффективность.

Повышение эффективности кодирования Повысить эффективность кодирования можно, строя код не для символа, а для блоков из n символов, причем частота блока рассчитывается как произведение частот символов, входящих в блок. Рассмотрим этот тезис на примере.

Даны символы a и b с частотами, соответственно, 0,9 и 0,1. Построить эффективный код методом Шеннона-Фано для блоков из двух символов (n = 2). Сформируем список возможных блоков и их частот. При этом частоту блока будем рассчитывать как произведение частот символов, входящих в блок. Тогда имеем:

Блоки символов Частоты блоков.

aa 0,81.

ab 0,09.

ba 0,09.

bb 0,01.

Построение кода сведём в таблицу:

Блоки символов.

Частоты блоков.

Этапы построения кода.

первый.

второй.

третий.

aa.

0,81.

ab.

0,09.

ba.

0,09.

bb.

0,01.

Таким образом, получены коды:

K (aa) = 1; K (ab) = 01; K (ba) = 001; K (bb) = 000.

Определим эффективность построенного кода. Для этого рассчитаем сначала показатель эффективности для блока символов:

Iср. блока = 0,81*1 + 0,09*2 + 0,09*3 + 0,01*3 = 1,28.

Поскольку в блоке 2 символа (n=2), для одного символа.

Iср =Iср. блока/2 = 1,28/2 = 0,64.

При посимвольном кодировании для эффективного кода потребуется по одному двоичному разряду, т. е. на (1−0,64)=0,36 бита больше. В самом деле, применение метода Шеннона-Фано для отдельных символов даёт результат, представленный в следующей таблице:

Исходные символы.

Частоты символов.

Коды символов.

a.

0,5.

b.

0,25.

Показать весь текст
Заполнить форму текущей работой