Файл: Методы кодирования данных (Краткая история кодирования ).pdf
Добавлен: 04.04.2023
Просмотров: 77
Скачиваний: 2
СОДЕРЖАНИЕ
Глава 1. Теоретические основы кодирования данных
1.1 Основные понятия и назначение кодирования данных
1.2 Кодирование текстовых данных
1.3 Универсальная система кодирования текстовых данных
1.3 Кодирование графических данных
1.4 Кодирование звуковой информации
Глава 2. Методы кодирования данных
Методы сжатия данных можно разделить на 2 группы: статические методы и адаптивные методы. Статические методы сжатия данных предназначены для кодирования конкретных источников информации с известной статистической структурой, которые порождают определенное множество сообщений. Эти методы основаны на знании статистической структуры исходных данных. К наиболее известным статическим методам сжатия относятся коды Хаффмана, Шеннона, Фано, Гилберта-Мура, арифметический код и другие методы, использующие известные сведения о вероятностях порождения источником различных символов или их сочетаний.
Если статистика источника информации неизвестна или изменяется с течением времени, то для кодирования сообщений такого источника применяются адаптивные методы сжатия. В адаптивных методах при кодировании очередного символа текста используются сведения о ранее закодированной части сообщения для оценки вероятности появления очередного символа. В процессе кодирования адаптивные методы «настраиваются» на статистическую структуру кодируемых сообщений, т.е. коды символов меняются в зависимости от накопленной статистики данных. Это позволяет адаптивным методам эффективно и быстро кодировать сообщение за один просмотр.
Существует множество различных адаптивных методов сжатия данных. Наиболее известные из них – адаптивный код Хаффмана, код «стопка книг», интервальный и частотный коды, а также методы из класса Лемпела-Зива.
Рассмотрим несколько методов кодирования более подробно.
Метод оптимального побуквенного кодирования был создан в 1952 г. Д. Хаффманом. Оптимальный код Хаффмана обладает минимальной средней длиной кодового слова среди всех побуквенных кодов для данного источника с алфавитом А={a1,…,an} и вероятностями pi=P(ai).
Рассмотрим алгоритм построения оптимального кода Хаффмана:
- Привести в порядок символы исходного алфавита А={a1,…,an} - по убыванию их вероятностей p1≥p2≥…≥pn.
- Если А={a1,a2}, то a1→0, a2→1.
- Если А={a1,…,aj,…,an} и известны коды <aj→bj >,j= 1,…,n, то для алфавита {a1,…aj/, aj//…,an} с новыми символами aj/ и aj/ вместо aj, и вероятностями p(aj)=p(aj/)+ p(aj//), код символа aj заменяется на коды aj/→ bj0, aj//→bj1.
Пример. Пусть дан алфавит 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
Здесь символы источника уже упорядочены в соответствии с их вероятностями. Будем складывать 2 наименьшие вероятности и включать суммарную вероятность на соответствующее место в упорядоченном списке вероятностей до тех пор, пока в списке не останется два символа. Тогда закодируем эти два символа 0 и 1. Далее кодовые слова достраиваются, как показано на рисунке 4.
Рисунок 4. Процесс построения кода Хаффмана
Таблица 1. Код Хаффмана
ai |
pi |
Li |
кодовое слово |
a1 a2 a3 a4 a5 a6 |
0.36 0.18 0.18 0.12 0.09 0.07 |
2 3 3 4 4 4 |
1 000 001 011 0100 0101 |
Посчитаем среднюю длину, построенного кода Хаффмана:
Lср(P)=1.0.36 + 3.0.18 + 3.0.18 + 3.0.12 + 4.0.09 + 4.0.07 =2.44,
при этом энтропия данного источника
H(p1,…,p6)= − 0.36.log0.36 − 2.0.18.log0.18 − 0.12.log0.12 − 0.09.log0.09 − 0.07log0.07=2.37
Код Хаффмана обычно строится и хранится в виде двоичного дерева, в листьях которого находятся символы алфавита, а на «ветвях» – 0 или 1. Тогда уникальным кодом символа является путь от корня дерева к этому символу, по которому все 0 и 1 собираются в одну уникальную последовательность (рисунок 5).
Рисунок 5. Кодовое дерево для кода Хаффмана
Метод Фано построения префиксного почти оптимального кода, для которого , заключается в следующем. Упорядоченный по убыванию вероятностей список букв алфавита источника делится на 2 части так, чтобы суммы вероятностей букв, которые входят в эти части, как можно меньше отличались друг от друга. Буквам первой части приписывается 0, а буквам из второй части – 1. Далее также поступают с каждой из полученных частей. Процесс продолжается до тех пор, пока весь список не разобьется на части, содержащие по 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. Построенный код приведен в таблице 2 и на рисунке 6.
Таблица 2. Код Фано
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 |
Полученный код является префиксным и почти оптимальным со средней длиной кодового слова
Lср=0.36.2+0.18.2+0.18.2+0.12.3+0.09.4+0.07.4=2.44
Рисунок 6. Кодовое дерево для кода Фано
Код Шеннона позволяет построить почти оптимальный код с длинами кодовых слов . Тогда по теореме Шеннона:
.
Код Шеннона, удовлетворяющий этому соотношению, строится следующим образом:
- Приведем в порядок символы исходного алфавита А={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. Построенный код приведен в таблице 3.
Таблица 3.Код Шеннона
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 |
Построенный код является префиксным. Вычислим среднюю длину кодового слова и сравним ее с энтропией. Значение энтропии вычислено при построении кода Хаффмана (H= 2.37), сравним его со значением средней длины кодового слова кода Шеннона
Lср= 0.36.2+(0.18+0.18).3+(0.12+0.09+0.07).4=2.92< 2.37+1,
что полностью соответствует утверждению теоремы Шеннона.
Е.Н.Гилбертом и Э.Ф.Муром был предложен метод построения алфавитного кода, для которого .
Пусть символы алфавита некоторым образом упорядочены, например, a1≤a2≤…≤an. Кодназывается алфавитным, если кодовые слова лексикографически упорядочены, т.е. .
Процесс построения кода происходит следующим образом.
- Вычислим величины Qi, i=1,n:
Q1=p1/2,
Q2=p1+p2/2,
Q3=p1+p2+p3/2,
…
Qn=p1+p2+…+pn-1+pn/2.
- Представим суммы Qi в двоичном виде.
- В качестве кодовых слов возьмем младших бит в двоичном представлении Qi, .
Пример. Пусть дан алфавит 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. Построенный код приведен в таблице 4.
Таблица 4. Код Гилберта-Мура
ai |
Pi |
Qi |
Li |
кодовое слово |
a1 a2 a3 a4 a5 a6 |
1/23≤0.18 1/23≤0.18<1/22 1/22≤0.36<1/21 1/24≤0.07 1/24≤0.09 1/24≤0.12 |
0.09 0.27 0.54 0.755 0.835 0.94 |
4 4 3 5 5 5 |
0001 0100 100 11000 11010 11110 |
Средняя длина кодового слова не превышает значения энтропии плюс 2. Действительно,
Lср=4.0.18+4.0.18+3.0.36+5.0.07+5.0.09+5.0.12=3.92<2.37+2
Этот метод был предложен Б.Я. Рябко в 1980 году. Название метод получил по подобию со стопкой книг, которая лежит на столе. Обычно сверху стопки лежат недавно использованные книги, а внизу стопки – книги, которые использовались давно, и после каждого обращения к стопке использованная книга кладется сверху стопки.
До начала кодирования буквы исходного алфавита упорядочены произвольным образом и каждой позиции в стопке присвоено свое кодовое слово, причем первой позиции стопки соответствует самое короткое кодовое слово, а последней позиции - самое длинное кодовое слово. Очередной символ кодируется кодовым словом, соответствующим номеру его позиции в стопке, и переставляется на первую позицию в стопке.
Пример. Приведем описание кода на примере алфавита A={a1,a2,a3,a4}. Пусть кодируется сообщение а3а3а4а4а3…
- символ а3 находится в 3 позиции стопки, кодируется кодовым словом 110 и перемещается на 1 позицию в стопке, при этом символы а1 и а2 смещаются на 1 позицию вниз;
- следующий символ а3 уже находится в 1 позиции стопки, кодируется кодовым словом 0 и стопка не изменяется;
- символ а4 находится в последней позиции стопки, кодируется кодовым словом 111 и перемещается на 1 позицию в стопке, при этом символы а1,а2,а3 смещаются на 1 позицию вниз;
- следующий символ а4 уже находится в 1 позиции стопки, кодируется кодовым словом 0 и стопка не изменяется;
- символ а3находится во 2 позиции стопки, кодируется кодовым словом 10 и перемещается на 1 позицию в стопке, при этом символ а4 смещается на одну позицию вниз.
Рисунок 7. Кодирование методом «стопка книг»
Таким образом, закодированное сообщение имеет следующий вид:
Рисунок 8. Результат кодирования методом «стопка книг»
Рассмотренный метод сжимает сообщение за счет того, что часто встречающиеся символы будут находиться в верхних позициях «стопки книг» и кодироваться более короткими кодовыми словами. Эффективность метода особо заметна при кодировании серий одинаковых символов. В этом случае все символы серии, начиная со второго, будут кодироваться самым коротким кодовым словом, соответствующим 1 позиции «стопки книг».
При декодировании используется такая же «стопка книг», находящаяся первоначально в том же состоянии. Над «стопкой» проводятся такие же преобразования, что и при кодировании. Это гарантирует однозначное восстановление исходной последовательности.
Заключение
За короткое время компьютер из вычислительного устройства превратился в устройство для обработки многих видов информации: текстовой, графической, звуковой. С помощью компьютера информация упаковывается и шифруется, путешествует по различным каналам связи и может быть доставлена в любой уголок мира. Современный человек уже не представляет свою деятельность без применения компьютера.