Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курапова, Мачикина. Методы кодирования данных.doc
Скачиваний:
251
Добавлен:
11.04.2015
Размер:
898.56 Кб
Скачать
  1. Почти оптимальное кодирование

Рассмотрим несколько классических побуквенных кодов, у которых средняя длина кодового слова близка к оптимальной. Пусть имеется дискретный вероятностный источник, порождающий символы алфавита А={a1,…,an} с вероятностями pi = P(ai).

    1. Код Шеннона

Код Шеннона позволяет построить почти оптимальный код с длинами кодовых слов . Тогда по теореме Шеннона из п. 5.1

.

Код Шеннона, удовлетворяющий этому соотношению, строится следующим образом:

  1. Упорядочим символы исходного алфавита А={a1,a2,…,an} по убыванию их вероятностей: p1p2p3≥…≥pn.

  2. Вычислим величины Qi:, которые называются кумулятивные вероятности

Q0=0, Q1=p1, Q2=p1+p2, Q3=p1+p2+p3, … , Qn=1.

  1. Представим Qi в двоичной системе счисления и возьмем в качестве кодового слова первые знаков после запятой .

Для вероятностей, представленных в виде десятичных дробей, удобно определить длину кодового слова Li из соотношения

, .

Пример. Пусть дан алфавит A={a1, a2, a3, a4, a5, a6} с вероятностями p1=0.36, p2=0.18, p3=0.18, p4=0.12, p5=0.09, p6=0.07. Построенный код приведен в таблице 6.

Таблица 6 Код Шеннона

ai

Pi

Qi

Li

кодовое слово

a1

a2

a3

a4

a5

a6

1/22≤0.36<1/2

1/23≤0.18<1/22

1/23≤0.18<1/22

1/24≤0.12<1/23

1/24≤0.09<1/23

1/24≤0.07<1/23

0

0.36

0.54

0.72

0.84

0.93

2

3

3

4

4

4

00

010

100

1011

1101

1110

Построенный код является префиксным. Вычислим среднюю длину кодового слова и сравним ее с энтропией. Значение энтропии вычислено при построении кода Хаффмана в п. 5.2 (H = 2.37), сравним его со значением средней длины кодового слова кода Шеннона

Lср= 0.36.2+(0.18+0.18).3+(0.12+0.09+0.07).4=2.92< 2.37+1,

что полностью соответствует утверждению теоремы Шеннона.

Алгоритм на псевдокоде

Построение кода Шеннона

Обозначим

n – количество символов исходного алфавита

P – массив вероятностей, упорядоченных по убыванию

Q– массив для величин Qi

L – массив длин кодовых слов

C – матрица элементарных кодов

P [0]:=0, Q [0]:=0

DO (i=1,…,n)

Q [i] := Q [i-1]+P [i]

L [i]:= - log2P[i]  (длину кодового слова определять

OD из соотношения, указанного выше)

DO (i=1,…,n)

DO (j=1,…,L[i])

Q [i-1]:=Q [i-1] *2 (формирование кодового слова

C [i,j]:= Q [i-1] в двоичном виде)

IF (Q [i-1]>1) Q [i-1]:=Q [i-1] - 1 FI

OD

OD

    1. Код Фано

Метод Фано построения префиксного почти оптимального кода, для которого , заключается в следующем. Упорядоченный по убыванию вероятностей список букв алфавита источника делится на две части так, чтобы суммы вероятностей букв, входящих в эти части, как можно меньше отличались друг от друга. Буквам первой части приписывается 0, а буквам из второй части – 1. Далее также поступают с каждой из полученных частей. Процесс продолжается до тех пор, пока весь список не разобьется на части, содержащие по одной букве.

Пример. Пусть дан алфавит A={a1, a2, a3, a4, a5, a6} с вероятностями p1=0.36, p2=0.18, p3=0.18, p4=0.12, p5=0.09, p6=0.07. Построенный код приведен в таблице 7 и на рисунке 6.

Таблица 7 Код Фано

ai

Pi

кодовое слово

Li

a1

0.36

0

0

2

a2

0.18

0

1

2

a3

0.18

1

0

2

a4

0.12

1

1

0

3

a5

0.09

1

1

1

0

3

a6

0.07

1

1

1

1

4

Рисунок 6 Кодовое дерево для кода Фано

Полученный код является префиксным и почти оптимальным со средней длиной кодового слова

Lср=0.36.2+0.18.2+0.18.2+0.12.3+0.09.4+0.07.4=2.44