- •Основные методы кодирования данных Методические указания
- •Ктн е. В. Курапова, кф-мн е. П. Мачикина. Основные методы кодирования данных: Практикум. / СибГути. – Новосибирск, 2010. – 62 с.
- •3.3Кодирование длин серий 11
- •Необходимые понятия и определения
- •Кодирование целых чисел
- •Кодирование длин серий
- •Некоторые теоремы побуквенногОкодирования
- •Оптимальное побуквенноЕкодирование
- •Основные понятия
- •Оптимальный код Хаффмана
- •Алгоритм на псевдокоде
- •Почти оптимальное кодирование
- •Код Шеннона
- •Алгоритм на псевдокоде
- •Код Фано
- •Алгоритм на псевдокоде
- •Алфавитный код Гилберта – Мура
- •Алгоритм на псевдокоде
- •Арифметический код
- •Алгоритм на псевдокоде
- •Алгоритм на псевдокоде
- •Адаптивные методы кодирования
- •Адаптивный код Хаффмана
- •Алгоритм на псевдокоде
- •Код «Стопка книг»
- •Алгоритм на псевдокоде
- •Интервальный код
- •Алгоритм на псевдокоде
- •Частотный код
- •Алгоритм на псевдокоде
- •Словарные коды класса Lz
- •Кодирование с использованием скользящего окна
- •Кодирование с использованием адаптивного словаря
- •Алгоритм на псевдокоде
- •Алгоритм на псевдокоде
- •Лабораторные работы
- •Лабораторная работа №1 Кодирование целых чисел
- •Контрольные вопросы
- •Лабораторная работа №2 Оптимальный код Хаффмана
- •Контрольные вопросы
- •Лабораторная работа №3 Почти оптимальное алфавитное кодирование
- •Контрольные вопросы
- •Лабораторная работа №4 Арифметическое кодирование
- •Контрольные вопросы
- •Лабораторная работа №5 Адаптивное кодирование
- •Контрольные вопросы
- •Лабораторная работа №6 Словарные коды
- •Контрольные вопросы
- •Рекомендуемая литература
- •Псевдокод для записи алгоритмов
- •Основные методы кодирования данных Методические указания
- •630102, Г. Новосибирск, ул. Кирова, 86.
Адаптивный код Хаффмана
В 1978 году Р. Галлагер предложил метод кодирования источников с неизвестной или меняющейся статистикой, основанный на коде Хаффмана, и поэтому названный адаптивным кодом Хаффмана.
Адаптивный код Хаффмана используется как составная часть во многих методах сжатия данных. В нем кодирование осуществляется на основе информации, содержащейся в окне длины W. Алгоритм такого кодирования заключается в выполнении следующих действий:
Перед кодированием очередной буквы подсчитываются частоты появления в окне всех символов исходного алфавита А={a1, a2, ..., an}. Обозначим эти частоты как q(a1), q(a2), ..., q(an). Вероятности символов исходного алфавита оцениваются на основе значений частот символов в окне
P(a1)= q(a1)/W, P(a2) =q(a2)/W, ..., P(an)= q(an)/W.
По полученному распределению вероятностей строится код Хаффмана для алфавита А.
Очередная буква кодируется при помощи построенного кода.
Окно передвигается на один символ вправо, вновь подсчитываются частоты встреч в окне букв алфавита, строится новый код для очередного символа, и так далее, пока не будет получен код всего сообщения.
Пример. Рассмотрим пример адаптивного кодирования с помощью метода Хаффмана для алфавита А={a1, a2, a3, a4} и длины окна W=6 (см. рис. 9).
Рисунок 9 Кодирование адаптивным кодом Хаффмана
Рассмотрим подробно этапы кодирования сообщения.
При кодировании буквы a3 получаем следующие частоты встреч символов в окне: q(a1)=3, q(a2)=1, q(a3)=1, q(a4)=1. Тогда вероятности символов алфавита A оцениваются так
Строим код Хаффмана для полученного распределения вероятностей (см. рис. 10 (а)) и кодируем символ а3 кодовым символом 001.
a)
Символы |
Вероятности |
Построение кода |
Кодовые cлова |
а1 |
1/2 |
1 |
1 |
а2 |
1/6 |
1/2 0 |
01 |
а3 |
1/6 |
1/3 |
001 |
а4 |
1/6 |
|
000 |
б)
Символы |
Вероятности |
Построение кода |
Кодовые слова |
а1 |
1/3 |
1 |
1 |
а2 |
1/6 |
1/3 2/3 0 |
011 |
а3 |
1/3 |
|
00 |
а4 |
1/6 |
|
010 |
в)
Символы |
Вероятности |
Построение кода |
Кодовые слова |
а1 |
1/3 |
1/2 1 |
11 |
а2 |
0 |
1/6 0 |
101 |
а3 |
1/2 |
|
0 |
а4 |
1/6 |
100 |
Рисунок 10 Построение адаптивного кода Хаффмана
Далее передвигаем окно на один символ вправо и снова подсчитываем частоты встреч символов в окне q(a1)=2, q(a2)=1, q(a3)=2, q(a4)=1 и оцениваем вероятности:
Строим код на основе полученных оценок вероятностного распределения (см. рис. 10 (б)) и кодируем очередной символ а3 другим кодовым словом 00. В этом случае частота встречи в окне символа а3 увеличилась, соответственно уменьшилась длина его кодового слова.
Снова передвигаем окно на один символ вправо, подсчитываем частоты встреч символов в окне q(a1)=2, q(a2)=0, q(a3)=3, q(a4)=1 и оцениваем вероятности:
Строим код на основе полученных оценок вероятностного распределения (см. рис. 10 (в)) и кодируем очередной символ а2 кодовым словом 101. Таким образом, после кодирования символов a3a3a2 получаем кодовую последовательность 00100101.