Добавлен: 05.04.2023
Просмотров: 328
Скачиваний: 2
СОДЕРЖАНИЕ
1. НЕОБХОДИМЫЕ ПОНЯТИЯ И ОПРЕДЕЛЕНИЯ
2.1. Коды класса Fixed + Variable
2.2. Коды класса Variable + Variable
3. НЕКОТОРЫЕ ТЕОРЕМЫ ПОБУКВЕННОГО КОДИРОВАНИЯ
4. ОПТИМАЛЬНОЕ ПОБУКВЕННОЕ КОДИРОВАНИЕ. КОД ХАФФМАНА
5. ПОЧТИ ОПТИМАЛЬНОЕ КОДИРОВАНИЕ
7. АДАПТИВНЫЕ МЕТОДЫ КОДИРОВАНИЯ
Если в рассмотренном выше коде исключить кодовое слово для нуля, то можно уменьшить длины кодовых слов на 1 бит, убрав первый нуль. Таким образом строится гамма-код Элиаса (γ-код Элиаса).
Таблица 3. Гамма-код Элиаса
Число |
Кодовое слово |
Длина кодового слова |
1 |
1 |
1 |
2 3 |
01 0 01 1 |
3 3 |
4 5 6 7 |
00 1 00 00 1 01 00 1 10 00 1 11 |
5 5 5 5 |
8 9 10 … |
000 1 000 000 1 001 000 1 010 … |
7 7 7 |
Другим примером кода класса Variable + Variable является омега-код Элиаса (ω-код Элиаса). В нем первое значение (кодовое слово для единицы) задается отдельно. Другие кодовые слова состоят из последовательности групп длиной L1,L2.,…,Lm, начинающихся с единицы. Конец всей последовательности задается нулевым битом. Длина первой группы составляет 2 бита, длина каждой следующей группы равна двоичному значению битов предыдущей группы плюс 1. Значение битов последней группы является итоговым значением всей последовательности групп, то есть первые m-1 групп служат лишь для указания длины последней группы.
Таблица 4. Омега-код Элиаса
Число |
Кодовое слово |
Длина кодового слова |
1 2 3 |
0 10 0 11 0 |
1 3 3 |
4 5 6 7 |
10 100 0 10 101 0 10 110 0 10 111 0 |
6 6 6 6 |
8 9 .. 15 |
11 1000 0 11 1001 0 … 11 1111 0 |
7 7 .. 7 |
16 17 .. 31 |
10 10 … 10 |
11 11 .. 11 |
32 |
10 |
12 |
При кодировании формируется сначала последняя группа, затем предпоследняя и так далее, пока процесс не будет завершен. При декодировании, наоборот, сначала считывается первая группа, по значению ее битов определяется длина следующей группы, или итоговое значение кода, если следующая группа – 0.
Рассмотренные типы кодов могут быть эффективны в следующих случаях
1. Вероятности чисел убывают с ростом значений элементов и их распределение близко к такому: Р(х)≥ Р(х+1), при любом x, то есть маленькие числа встречаются чаще, чем большие[5].
2. Диапазон значений входных элементов не ограничен или неизвестен. Например, при кодировании 32-битовых чисел реально большинство чисел маленькие, но могут быть и большие.
3. При использовании в составе других схем кодирования, например, кодировании длин серий.
2.3. Кодирование длин серий
Метод кодирования информации, известный как метод кодирования длин серий и предложенный П.Элиасом, при построении использует коды целых чисел. Входной поток для кодирования рассматривается как последовательность из нулей и единиц[6]. Идея кодирования заключается в том, чтобы кодировать последовательности одинаковых элементов (например, нулей) как целые числа, указывающие количество элементов в этой последовательности. Последовательность одинаковых элементов называется серией, количество элементов в ней – длиной серии.
Пример. Входную последовательность (общая длина 31 бит) можно разбить на серии, а затем закодировать их длины.
00000 1
Используем, например, γ-код Элиаса. Поскольку в коде нет кодового слова для нуля, то будем кодировать длину серии +1, то есть последовательность: Þ 00
Длина полученной кодовой последовательности равна 25 бит.
Метод длин серий актуален для кодирования данных, в которых есть длинные последовательности одинаковых бит. В нашем примере, если Р(0)>>Р(1).
3. НЕКОТОРЫЕ ТЕОРЕМЫ ПОБУКВЕННОГО КОДИРОВАНИЯ
Пусть даны алфавит источника А={а1, а2, …аn}, кодовый алфавит В={b1, b2, …bn}. Обозначим А*(В*) множество всевозможных последовательностей в алфавите А(В). Множество всех сообщений в алфавите А обозначим S. Кодирование F:S→ В* может сопоставлять код всему сообщению из множества S как единому целому или строить код сообщения из кодов его частей (побуквенное кодирование).
Пример.
А={a1,a2,a3}, B={0,1}. Побуквенное кодирование символов источника a1 ®1001 a2 ®0 a3®010 позволяет следующим образом закодировать сообщение a2a1a2a3 ®
Пример.
Азбука Морзе. Входной алфавит – английский. Наиболее часто встречающиеся буквы кодируются более короткими словами:
А ® 01, В ® 1000, С ® 1010, D ® 100, E ® 0, …
Побуквенное кодирование задается таблицей кодовых слов: αiєA, βiєВ*. Множество кодовых слов V={βi} называется множеством элементарных кодов. Используя побуквенное кодирование, можно закодировать любое сообщение α= αil…αikєS следующим образом F(α)=F(αil)…F(αik)=βil…βik, то есть общий код сообщения складывается из элементарных кодов символов входного алфавита.
Количество букв в слове α=α1…αk называется длиной слова. (Обозначение |αا|=k) Пустое слово, то есть слово, не содержащее ни одного символа обозначается Λ. Если α=α1α2, то α1 – начало (префикс) слова α, α2 – окончание (постфикс) слова α.
4. ОПТИМАЛЬНОЕ ПОБУКВЕННОЕ КОДИРОВАНИЕ. КОД ХАФФМАНА
Предложенный Хаффманом алгоритм построения оптимальных неравномерных кодов – одно из самых важных достижений теории информации как с теоретической, так и с прикладной точек зрения. Трудно поверить, но этот алгоритм был придуман в 1952 г. студентом Дэвидом Хаффманом в процессе выполнения домашнего задания.
Рассмотрим ансамбль сообщений X={1,…,N} с вероятностями сообщений {P1,…,PN}. Без потери общности мы считаем сообщения упорядоченными по убыванию вероятностей, то есть P1≤P2≤ …≤PN. Наша задача состоит в построении оптимального кода, то есть кода с наименьшей возможной средней длиной кодовых слов[7]. Понятно, что при заданных вероятностях такой код может не быть единственным, возможно существование семейства оптимальных кодов. Мы установим некоторые свойства всех кодов этого семейства. Эти свойства подскажут нам простой путь к нахождению одного из оптимальных кодов.
Пусть двоичный код С={ć1,Кćn} с длинами кодовых слов {m1,…,mN} оптимален для рассматриваемого ансамбля сообщений.
Свойство 1. Если Pi<Pj, то mi>mj.
Свойство 2. Не менее двух кодовых слов имеют одинаковую длину mmax=maxk mk.
Свойство 3. Среди кодовых слов длины mmax = maxk mk найдутся 2 слова, отличающиеся только в одном последнем символе.
Прежде, чем сформулировать следующее свойство, введем дополнительные обозначения[8]. Для рассматриваемого ансамбля X={1,…,N} и некоторого кода C, удовлетворяющего свойствам 1–3, введем вспомогательный ансамбль X’={1,…,N-1}, сообщениям которого сопоставим вероятности {P’1,…,P’N} следующим образом P1¢=P1K, PN¢2=PN-2, PN¢1=PN-1+PN
Из кода C построим код C' для ансамбля X', приписав сообщениям {х1¢К, хN-2¢} те же кодовые слова, что и в коде C, а сообщению хN-2¢ – слово ćN-1, представляющее собой общую часть слов ćN-1 и ćN (согласно свойству 3 эти два кодовых слова отличаются только в одном последнем символе).
Свойство 4. Если код C' для X' оптимален, то код C оптимален для X.
Итак, сформулированные свойства оптимальных префиксных кодов сводят задачу построения кода объема N к задаче построения кодов объема N'=N-1. Это означает, что мы получили рекуррентное правило построения кодового дерева оптимального неравномерного кода.
5. ПОЧТИ ОПТИМАЛЬНОЕ КОДИРОВАНИЕ
5.1. Код Шеннона
Код Шеннона позволяет построить почти оптимальный код с длинами кодовых слов Li<-log pi+1. Тогда по теореме Шеннона Lcp<H(p1,..., pn)+1.
Код Шеннона, удовлетворяющий этому соотношению, строится следующим образом:
- Упорядочим символы исходного алфавита А={a1,a2,…,an} по убыванию их вероятностей: p1≥p2≥p3≥…≥pn.
- Вычислим величины Qi, которые называются кумулятивные вероятности Q0=0, Q1=p1, Q2=p1+p2, Q3=p1+p2+p3, … , Qn=1.
- Представим Qi в двоичной системе счисления и возьмем в качестве кодового слова первые /-log pi / знаков после запятой[9].
Для вероятностей, представленных в виде десятичных дробей, удобно определить длину кодового слова Li из соотношения 1/2Li ≤ pi<1/2Li-1, i=1,…n
Пример.
Пусть дан алфавит 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. Построенный код приведен в таблице 5.
Таблица 5. Код Шеннона
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,
что полностью соответствует утверждению теоремы Шеннона.
5.2. Код Фано
Метод Фано построения префиксного почти оптимального кода, для которого Lcp<H(p1,..., pn)+1, заключается в следующем. Упорядоченный по убыванию вероятностей список букв алфавита источника делится на две части так, чтобы суммы вероятностей букв, входящих в эти части, как можно меньше отличались друг от друга[10]. Буквам первой части приписывается 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. Построенный код приведен в таблице 6 и на рисунке 2.
Таблица 6. Код Фано
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 |
Рисунок 2. Кодовое дерево для кода Фано
Полученный код является префиксным и почти оптимальным со средней длиной кодового слова Lср=0.36.2+0.18.2+0.18.2+0.12.3+0.09.4+0.07.4=2.44