- •Основные методы кодирования данных Методические указания
- •Ктн е. В. Курапова, кф-мн е. П. Мачикина. Основные методы кодирования данных: Практикум. / СибГути. – Новосибирск, 2010. – 62 с.
- •3.3Кодирование длин серий 11
- •Необходимые понятия и определения
- •Кодирование целых чисел
- •Кодирование длин серий
- •Некоторые теоремы побуквенногОкодирования
- •Оптимальное побуквенноЕкодирование
- •Основные понятия
- •Оптимальный код Хаффмана
- •Алгоритм на псевдокоде
- •Почти оптимальное кодирование
- •Код Шеннона
- •Алгоритм на псевдокоде
- •Код Фано
- •Алгоритм на псевдокоде
- •Алфавитный код Гилберта – Мура
- •Алгоритм на псевдокоде
- •Арифметический код
- •Алгоритм на псевдокоде
- •Алгоритм на псевдокоде
- •Адаптивные методы кодирования
- •Адаптивный код Хаффмана
- •Алгоритм на псевдокоде
- •Код «Стопка книг»
- •Алгоритм на псевдокоде
- •Интервальный код
- •Алгоритм на псевдокоде
- •Частотный код
- •Алгоритм на псевдокоде
- •Словарные коды класса Lz
- •Кодирование с использованием скользящего окна
- •Кодирование с использованием адаптивного словаря
- •Алгоритм на псевдокоде
- •Алгоритм на псевдокоде
- •Лабораторные работы
- •Лабораторная работа №1 Кодирование целых чисел
- •Контрольные вопросы
- •Лабораторная работа №2 Оптимальный код Хаффмана
- •Контрольные вопросы
- •Лабораторная работа №3 Почти оптимальное алфавитное кодирование
- •Контрольные вопросы
- •Лабораторная работа №4 Арифметическое кодирование
- •Контрольные вопросы
- •Лабораторная работа №5 Адаптивное кодирование
- •Контрольные вопросы
- •Лабораторная работа №6 Словарные коды
- •Контрольные вопросы
- •Рекомендуемая литература
- •Псевдокод для записи алгоритмов
- •Основные методы кодирования данных Методические указания
- •630102, Г. Новосибирск, ул. Кирова, 86.
Почти оптимальное кодирование
Рассмотрим несколько классических побуквенных кодов, у которых средняя длина кодового слова близка к оптимальной. Пусть имеется дискретный вероятностный источник, порождающий символы алфавита А={a1,…,an} с вероятностями pi = P(ai).
Код Шеннона
Код Шеннона позволяет построить почти оптимальный код с длинами кодовых слов . Тогда по теореме Шеннона из п. 5.1
.
Код Шеннона, удовлетворяющий этому соотношению, строится следующим образом:
Упорядочим символы исходного алфавита А={a1,a2,…,an} по убыванию их вероятностей: p1≥p2≥p3≥…≥pn.
Вычислим величины Qi:, которые называются кумулятивные вероятности
Q0=0, Q1=p1, Q2=p1+p2, Q3=p1+p2+p3, … , Qn=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
Код Фано
Метод Фано построения префиксного почти оптимального кода, для которого , заключается в следующем. Упорядоченный по убыванию вероятностей список букв алфавита источника делится на две части так, чтобы суммы вероятностей букв, входящих в эти части, как можно меньше отличались друг от друга. Буквам первой части приписывается 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