Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LabRab_2_po_TI.doc
Скачиваний:
52
Добавлен:
12.03.2015
Размер:
169.47 Кб
Скачать

Средняя длина кода из таблицы 1 будет равна

бит,

что совпадает со значением энтропии:

бит.

Еще одним способом построения оптимальных кодов является метод Хаффмана. Код Хаффмана строится следующим образом:

1) располагают символы в порядке убывания их вероятностей;

2) складывают вероятности двух последних символов и из них образуют новый составной символ с вероятностью, равной получившейся сумме;

3) повторяют шаги 1 и 2, пока не останется только один символ с вероятностью 1;

4) приписывают компонентам составных символов 0 и 1 – первой компоненте приписывают 0, а второй – 1.

Покажем процесс построения кодов Хаффмена для алфавита сообщений

X = (x1, x2, x3, x4, x5, x6, x7, x8)

с распределением вероятностей появления символов

.

1. Исходный список букв X = {x1, x2, x3, x4, x5, x6, x7, x8} уже упорядочен, так как .

2. Объединим буквы x7 и x8 в одну букву x1 с вероятностью и переупорядочим список:

, X1 = {x1, x2, x3, x4, x1, x5, x6}.

3. Повторим шаг 2 до тех пор, пока не останется одна буква в списке:

, X2 = {x1, x2, x3, x4, x1, x2};

, X3 = {x1, x2, x3, x3, x4};

, X4 = {x1, x2, x3, x4};

, X5 = {x5, x1, x2};

, X6 = {x5, x6};

, X7 = {x7}.

4. Присвоим двоичные коды символам:

x7: x5 = 0, x6 = 1;

x6: x1 = 10, x2 = 11;

x5: x3 = 00, x4 = 01;

x4: x3 = 010, x4 = 011;

x3: x1 = 000, x2 = 001;

x2: x5 = 0010, x6 = 0011;

x1: x7 = 0000, x8 = 0001.

Таким образом, получены следующие коды исходных символов:

x1 = 10, x2 = 11, x3 = 010, x4 = 011, x5 = 0010, x6 = 0011, x7 = 0000, x8 = 0001.

Средняя длина кода равна

бит,

что совпадает со средней длиной кода Шеннона-Фано и с энтропией.

Способом добиться наименьшей средней длины кода на один символ является блочное кодирование. При блочном кодировании коды присваиваются не отдельным символам сообщений, а их сочетаниям. При увеличении числа символов в сочетании средняя длина кода на один символ приближается к энтропии. Например, пусть имеются две буквы алфавита – A и B, с вероятностями появления 0.9 и 0.1 соответственно. Закодировать их можно, присвоив 0 одному символу и 1 – другому:

A = 0, B = 1.

Средняя длина кода в этом случае будет равна 1 биту:

,

тогда как энтропия равна

бит.

Избыточность составляет около 53%. Если же закодировать двухбуквенные сочетания XiXj, Xi, Xj  {A, B} с вероятностями p(XiXj) =pipj, то по методу Шеннона-Фано можно получить коды, представленные в таблице 2.

Таблица 2

Блочное кодирование Шеннона-Фано

XiXj

pipj

Шаг

Код

1

2

3

AA

0.81

0

0

AB

0.09

0

10

BA

0.09

1

1

0

110

BB

0.01

1

111

Тогда средняя длина кода двухбуквенного блока будет равна бит, а на одну букву будет приходиться бит. Избыточность в этом случае будет составлять уже только около 17%. Если мы возьмем сочетания из трех букв, то получим еще лучший результат и т.д. Увеличивая длину блоков можно как угодно близко приблизиться к оптимальному значению энтропии.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]