Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Щепин_МУ_Эффективные_коды.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
767.49 Кб
Скачать
    1. Код Шеннона-Фано

Рассмотрим процедуру побуквенного кодирования при отсутствии статистической зависимости между буквами (это нужно только для оценки качества кода).

Цель – для данного первичного алфавита построить оптимальный неравномерный код (ОНК) с минимальным значением средней длины кодового слова . Знаки первичного алфавита будем называть буквами, знаки вторичного алфавита – символами.

Алгоритм построения двоичного кода Шеннона-Фано

п.1. Буквы располагаются в порядке убывания вероятностей.

п.2. Буквы разделяются на две группы так, чтобы суммы вероятностей букв в каждой группе были по возможности одинаковыми.

п.3. Всем буквам первой группы присваивается очередной кодовый символ «0», а остальным буквам – символ «1».

п.4. Для каждой из групп повторяются пункты 2 и 3 с целью получения кодового слова до тех пор, пока в каждой группе останется одна буква.

Методика просто распространяется на случай m>2. Для m=2 лучшие результаты получаются, когда вероятности появления букв первичного алфавита равны целым отрицательным степеням двойки.

Пример 1

Построить ОНК по методу Шеннона-Фано, если символы источника сообщений появляются с вероятностями, заданными таблицей 2.

Таблица 2  Исходные данные к примеру 1

Буква

a1

a2

a3

a4

a5

a6

a7

a8

Вероятность

0,04

0,10

0,20

0,11

0,16

0,22

0,02

0,15

Р е ш е н и е

Реализуем алгоритм построения кода Шеннона-Фано по пунктам. Проиллюстрируем работу алгоритма построения кода Шеннона-Фано с помощью таблицы 3.

п.1. В столбце 1 (таблица 3) буквы первичного алфавита отсортированы в порядке убывания вероятностей их появления.

п.2. Разобьем множество букв на две группы:

  • первая группа – (a6, a3, a5) с суммарной вероятностью

p(a6)+p(a3)+p(a5)=0,22+0,20+0,16=0,58;

  • вторая группа – (a8, a4, a2, a1, a7) с суммарной вероятностью

p(a8)+p(a4)+p(a2) +p(a1)+p(a7)=0,15+0,11+0,10+0,04+0,02=0,42.

Таблица 3  Построение кода Шеннона Фано (пример 1)

Буква

р(аk)

Код 1

p( )

– p(ak) log p(ak)

1

2

3

4

5

6

a6

0,22

00

2

0,44

0,4806

a3

0,20

010

3

0,60

0,4644

a5

0,16

011

3

0,48

0,4230

a8

0,15

10

2

0,30

0,4105

a4

0,11

110

3

0,33

0,3503

a2

0,10

1110

4

0,40

0,3322

a1

0,04

11110

5

0,20

0,1858

a7

0,02

11111

5

0,10

0,1129

=2,85

H(A)=2,7597

п.3. Первым символам кодовых слов букв a6, a3, a5 присваиваем символ «0», а первым символам кодовых слов букв a8, a4, a2, a1, a7 присваиваем символ «1» (столбец 3, таблица 3).

п.4. Повторяется п.2 для первой группы, которая разбивается на две подгруппы: (a6) и (a3, a5). В соответствии с п.3 второму символу буквы a6 присваивается символ «0», и на этом процесс кодирования буквы a6 заканчивается:

Cod a6 =00.

Вторым символам группы (a3, a5) присваивается символ «1».

Повторяется п.2 для группы (a3, a5), она разбивается на буквы a3 и a5.

В соответствии с п.3 третьему символу буквы a3 присваивается символ «0», а третьему символу буквы a5  символ «1», и на этом процесс кодирования букв a3 и a5 заканчивается:

Cod a3 =010,

Cod a5 =011.

Аналогично проводится кодирование остальных символов букв a8, a4, a2, a1, a7, результаты которого представлены в столбце 3, таблица 3.

Оценим эффективность построенного кода.

Среднюю длину кодового слова вычислим по формуле (1.2), для чего для каждой буквы первичного алфавита воспользуемся данными из столбцов 4 и 2 таблицы 3, поместим полученные произведения в соответствующие ячейки столбца 5 и просуммируем их ( =2,85).

Вычислим энтропию первичного алфавита по известной формуле (1.5). В столбце 6 таблицы 3 произведены соответствующие вычисления:

H(A)=2,7597 бит/символ.

Вычислим коэффициент относительной эффективности по формуле (1.3)

и коэффициент статистического сжатия – по формуле (1.4)

Если для алфавита, заданного таблицей 2, будет построен другой код, для него надо вычислить значения коэффициента относительной эффективности и коэффициента статистического сжатия и провести сравнения. Более эффективным окажется тот код, для которого значения коэффициента относительной эффективности и коэффициента статистического сжатия окажутся большими.

Пример 2

Рассмотренная методика Шеннона-Фано не всегда приводит к однозначному построению кода, так как при разбиении на подгруппы можно сделать большей по сумме вероятностей как верхнюю, так и нижнюю подгруппы.

Например, множество букв, приведенных в таблице 3 (пример 1), можно разбить следующим образом:

  • первая группа – (a6, a3) с суммарной вероятностью

p(a6)+p(a3)=0,22+0,20=0,42;

  • вторая группа – (a5, a8, a4, a2, a1, a7) с суммарной вероятностью

p(a5)+p(a8)+p(a4)+p(a2)+p(a1)+p(a7)=

=0,16+0,15+0,11+0,10+0,04+0,02=0,58.

Постройте код Шеннона-Фано для этого варианта разбиения множества букв на подгруппы, вычислите значения коэффициента относительной эффективности и коэффициента статистического сжатия, проведите сравнительный анализ результатов решения примера 2 с результатами решения примера 1.