Код Шеннона-Фано

Пример 2. Закодируем буквы алфавита из примера 1 в коде Шеннона-Фано.

Все буквы записываются в порядке убывания их вероятностей, затем делятся на равновероятные группы, которые обозначаются 0 и 1, затем вновь делятся на равновероятные группы и т.д. (см.табл.4.1)

Таблица 4.1.

X

P

   

 

 

Коды
x1 1/4

0

 

0 -------

-------

00

x2 1/4

1 -------

-------

01

x3, 1/8

 

 

1

 

 

 

0

 

0 -------

100

x4 1/8

1 -------

101

x5 1/16

 

1

 

 

0

 

0 1100

x6 1/16

1 1101

x7 1/16

1

 

0 1110

x8 1/16

1 1111

Средняя длина полученного кода будет равна

Итак, мы получили оптимальный код. Длина этого кода совпала с энтропией. Данный код оказался удачным, так как величины вероятностей точно делились на равновероятные группы. 

Пример 3.

Возьмем 32 две буквы русского алфавита. Частоты этих букв известны. В алфавит включен и пробел, частота которого составляет 0,145. Метод кодирования представлен в таблице 4.2.

Таблица 4.2.

Буква Рi 1

2

3

4

Код
ب  0.145

 

 

0

 

 

 

0

 

0

-

000

о 0.095 1 -

001

е 0.074  

1

 

 

0

 

0

0100

а 0.064 1 0101

и 0.064 1

 

0

0110

н 0.056 1 0111

т 0.056  

1

 

0 

 

0

-

 
с 0.047 1

 
0

1
 

 

 
...

ф 0.03

Средняя длина данного кода будет равна,  бит/букву;

Энтропия  H=4.42 бит/буква.  Эффективность полученного кода можно определить как отношение энтропии к средней длине кода. Она равна 0,994. При значении равном единице код является оптимальным. Если бы мы кодировали кодом равномерной длины , то эффективность была бы значительно ниже.

Hosted by uCoz