Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Основные методы кодирования данных. Практикум

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
11
31
10 100 11111 0
11
32
10 101 100000 0
12
)1()( xPxP
)1()0( PP 
При кодировании формируется сначала последняя группа, затем предпоследняя и т.д., пока процесс не будет завершен. При декодировании, наоборот, сначала считывается первая группа, по значению ее битов определяется длина следующей группы, или итоговое значение кода, если следующая группа – 0.
Рассмотренные типы кодов могут быть эффективны в следующих случаях
1. Вероятности чисел убывают с ростом значений элементов и их
распределение близко к такому:
, при любом x, т.е.
маленькие числа встречаются чаще, чем большие.
2. Диапазон значений входных элементов не ограничен или неизвестен.
Например, при кодировании 32-битовых чисел реально большинство чисел маленькие, но могут быть и большие.
3. При использовании в составе других схем кодирования, например,
кодировании длин серий.
Кодирование длин серий
Метод кодирования информации, известный как метод кодирования длин серий и предложенный П. Элиасом, при построении использует коды целых чисел. Входной поток для кодирования рассматривается как последовательность из нулей и единиц. Идея кодирования заключается в том, чтобы кодировать последовательности одинаковых элементов (например, нулей) как целые числа, указывающие количество элементов в этой последовательности. Последовательность одинаковых элементов называется серией, количество элементов в ней – длиной серии.
Пример. Входную последовательность (общая длина 31бит) можно разбить на серии, а затем закодировать их длины.
000000 1 00000 1 0000000 1 1 00000000 1
Используем, например, γ-код Элиаса. Поскольку в коде нет кодового слова для нуля, то будем кодировать длину серии +1, т.е. последовательность 7 6 8
1 9:
7 6 8 1 9 00111 00110 0001000 1 0001001
Длина полученной кодовой последовательности равна 25 бит.
Метод длин серий актуален для кодирования данных, в которых есть длинные последовательности одинаковых бит. В нашем примере, если
.
12
},...,,{
21 n
aaaA
},...,,{
21 m
bbbB
*
A
)(*B
*
: BSF
nn
aa
,...,
11
Aai
*
B
i
S
iki
...
1
ikiiki
FFF
...)()...()(
11
НЕКОТОРЫЕ ТЕОРЕМЫ ПОБУКВЕННОГО КОДИРОВАНИЯ
В этом параграфе приведены некоторые теоремы о свойствах побуквенного кодирования.
Пусть даны алфавит источника
, кодовый алфавит
. Обозначим
множество всевозможных последовательностей в алфавите А (В). Множество всех сообщений в алфавите А обозначим S. Кодирование
может сопоставлять код
всему сообщению из множества S как единому целому или строить код сообщения из кодов его частей (побуквенное кодирование).
Пример 1 А={a1,a2,a3}, B={0,1} Побуквенное кодирование символов источника a1 1001 a2 0 a3010 позволяет следующим образом закодировать сообщение
a2a1a2a3 010010010
Пример 2 Азбука Морзе. Входной алфавит – английский. Наиболее часто встречающиеся буквы кодируются более короткими словами:
А 01, В 1000, С 1010, D 100, E 0, …
Побуквенное кодирование задается таблицей кодовых слов:
,
,
. Множество кодовых слов V={βi}
называется множеством элементарных кодов. Используя побуквенное кодирование, можно закодировать любое сообщение
следующим образом
, т.е. общий код
сообщения складывается из элементарных кодов символов входного алфавита.
Количество букв в слове α=α1…αk называется длиной слова.
(Обозначение |α|=k) Пустое слово, т.е. слово, не содержащее ни одного символа обозначается Λ. Если α=α1α2, то α1 – начало (префикс) слова α, α2 – окончание (постфикс) слова α.
Побуквенный код называется разделимым (или однозначно
декодируемым), если любое сообщение из символов алфавита источника, закодированное этим кодом, может быть однозначно декодировано, т.е. если
βi1 …βik=βj1…β
, то k=t и при любых s=1,…,k is=js . При разделимом
jt
кодировании любое кодовое слово единственным образом разлагается на элементарные коды.
Пример. 3 Код из примера 1 не является разделимым, поскольку кодовое слово 010010 может быть декодируемо двумя способами: a3a3 или a2a1a2.
Побуквенный код называется префиксным, если в его множестве
кодовых слов ни одно слово не является началом другого, т.е. элементарный код одной буквы не является префиксом элементарного кода другой буквы.
13
Пример 4. Код из примера 1 не является префиксным, поскольку
jtjjikii
......
2121
Ls
jtjLikiL
......
01,0 ba
121
n
i
L
i
011
0
1
00
01
10
11 000
001
010 100
101
110
111
элементарный код буквы a2 является префиксом элементарного кода буквы a3.
Утверждение. Префиксный код является разделимым. Доказательство (от противного). Пусть префиксный код не является
разделимым. Тогда существует такая кодовая последовательность β, что она представлена различными способами из элементарных кодов:
(побитовое представление одинаковое) и
существует L такое, что при любом
следует (β
is=βjs
) и (β
it≠βjt
), т.е.
начало каждого из этих представлений имеет одинаковую последовательность элементарных кодов. Уберем эту часть. Тогда
, т.е. последовательности элементарных кодов разные и
существует β/, что βiL=βjLβ/ или βjL=βiLβ/ , т.е. β
– начало βjL, или наоборот.
iL
Получили противоречие с префиксностью кода.
Заметим, что разделимый код может быть не префиксным.
Пример 5. Разделимый, но не префиксный код: A={a,b}, B={0,1},
Приведем основные теоремы побуквенного кодирования.
Теорема (Крафт). Для того, чтобы существовал побуквенный двоичный префиксный код с длинами кодовых слов L1,…,Ln необходимо и достаточно, чтобы
.
Доказательство. Докажем необходимость. Пусть существует префиксный код с длинами L1,…,Ln. Рассмотрим полное двоичное дерево. Каждая вершина закодирована последовательностью нулей и единиц (как показано на рисунке).
Рисунок 2 Полное двоичное дерево с помеченными вершинами
В этом дереве выделим вершины, соответствующие кодовым словам. Тогда любые два поддерева, соответствующие кодовым вершинам дерева, не
14
пересекаются, т.к. код префиксный. У i-того поддерева на r-том уровне – 2
r
n
i
Lr
i
22
1
r
L
n
i
r
i
222
1
12
1
n
i
L
i
12
1
n
i
L
i
1
2
1
2
1
2
1
221
0
1
00
01
10
11 000
001
010
011
100
101
110 111
a
1
a
2
a
3
r-Li
вершин. Всего вершин в поддереве 2r. Тогда
,
.
Докажем достаточность утверждения. Пусть существует набор длин кодовых
слов такой, что
. Рассмотрим полное двоичное дерево с
помеченными вершинами. Пусть длины кодовых слов упорядочены по возрастанию L1≤ L2≤ … ≤ Ln. Выберем в двоичном дереве вершину V1 на уровне L1. Уберем поддерево с корнем в вершине V1. В оставшемся дереве возьмем вершину V2 на уровне L2 и удалим поддерево с корнем в этой вершине и т.д. Последовательности, соответствующие вершинам V1, V2,…, Vn образуют префиксный код. Теорема доказана.
Пример 6. Построить префиксный код с длинами L1=1, L2=2, L3=2 для алфавита A={a1,a2,a3}. Проверим неравенство Крафта для набора длин
.
,
Неравенство выполняется и, следовательно, префиксный код с таким набором длин кодовых слов существует. Рассмотрим полное двоичное дерево
3
с 2
помеченными вершинами и выберем вершины дерева, как описано выше.
Тогда элементарные коды могут быть такими: a1 0, a210, a3 11.
Рисунок 3 Построение префиксного кода с заданными длинами
Процесс декодирования выглядит следующим образом. Просматриваем полученное сообщение, двигаясь по дереву. Если попадем в кодовую вершину, то выдаем соответствующую букву и возвращаемся в корень дерева и т.д.
15
Теорема (МакМиллан). Для того чтобы существовал побуквенный двоичный
121
n
i
i
L
nnii
m
ii
m
n
xxxxx
1
1
1
21
)(
i
l
i
x 2
 
 
max
1
max
1
1
1
1
)
1
(
1
2222
ml
j
j
j
ml
j
m
i
l
i
lj
j
nmii
m
i
l
i
l
m
n
i
i
l
M
i
i
ll max
max
j
M
m
ii
llj
1
m
ii
m
ii
bbllj
11
j
j
M 2
max
max
11
222 lm
ml
j
jj
m
n
i
i
l
 
 
12
max
1
m
n
i
i
l
ml
m
1
4
3
3
2
1
12
2
1
8
2
1
4
2
1
2
4321
разделимый код с длинами кодовых слов L1,…,Ln , необходимо и достаточно,
чтобы
.
Доказательство. Покажем достаточность. По теореме Крафта существует префиксный код с длинами L1,…,Ln, и он является разделимым. Докажем необходимость утверждения. Рассмотрим тождество
Положим
. Тогда тождество можно переписать следующим образом
,
где
суммы
,
– число всевозможных представлений числа j в виде
. Сопоставим каждому представлению числа j в виде
суммы последовательность нулей и единиц длины j по следующему правилу
,
где bs – элементарный код длины s. Тогда различным представлениям числа j будут соответствовать различные кодовые слова, поскольку код является
разделимым. Таким образом,
Используя предельный переход получим
и
при
Теорема доказана. Пример 7. Азбука Морзе – это схема алфавитного кодирования
A01, B1000, C1010, D100, E0, F0010, G110, H0000, I00, J0111, K101, L0100, M11, N10, O111, P0110, Q1101, R010, S000, T1, U001, V0001, W011, X1001, Y1011, Z1100.
Неравенство МакМиллана для азбуки Морзе не выполнено, поскольку
Следовательно, этот код не является разделимым. На самом деле в азбуке Морзе имеются дополнительные элементы – паузы между буквами (и словами), которые позволяют декодировать сообщение. Эти дополнительные элементы определены неформально, поэтому прием и передача сообщений (особенно с высокой скоростью) является некоторым искусством, а не простой технической процедурой.
.
.
16
)(iiaPp
11
ni
i
p
n
i
iin
ppppH
1
21
log),,(
LAx
L
xPxP
L
H )(log)(
1
ОПТИМАЛЬНОЕ ПОБУКВЕННОЕ КОДИРОВАНИЕ
Основные понятия
При кодировании сообщений считается, что символы сообщения порождаются некоторым источником информации. Источник считается заданным полностью, если дано вероятностное описание процесса появления сообщений на выходе источника. Это означает, что в любой момент времени определена вероятность порождения источником любой последовательности символов Р(x1x2x3...xL), L≥1. Такой источник называется
дискретным вероятностным источником.
Если вероятностный источник с алфавитом А={a1, a2, ..., an} порождает символы алфавита независимо друг от друга, т.е. знание предшествующих символов не влияет на вероятность последующих, то такой источник называется бернуллиевским. Тогда для любой последовательности x1x2...xL,
L≥1, порождаемой источником, выполняется равенство:
P(x1x2...xL ) = P(x1)·P(x2)·...·P(xL),
где P(x) – вероятность появления символа х, Р(x1x2x3...xL) – вероятность появления последовательности x1x2x3...xL.
Для другого класса источников (марковских) существует статистическая взаимосвязь между порождаемыми символами. В дальнейшем мы будем рассматривать кодирование стационарных (с неизменным распределением вероятностей) бернуллиевских дискретных источников без памяти.
Пусть имеется дискретный вероятностный источник без памяти, порождающий символы алфавита А={a1,…,an} с вероятностями
. Основной характеристикой источника является энтропия,
которая представляет собой среднее значение количества информации в сообщении источника и определяется выражением (для двоичного случая)
.
Энтропия характеризует меру неопределенности выбора для данного источника.
Пример. Если А={a1,a2}, p1=0, p2 =1, т.е. источник может породить только символ a2, то неопределенности нет, энтропия H(p1,p2)=0. Источник с равновероятными символами А={a1,a2}, p1 =1/2, p2 =1/2, будет иметь максимальную энтропию H(p1,p2)=1.
,
Величина
называется энтропией на символ
последовательности длины L, где AL множество всех последовательностей длины L в алфавите A, x=(x1,x2,...,xL) последовательность L букв
17
дискретного cтационарного источника. Обозначим через
H
L
LHH
lim
),...,(
1 n
ppHН
n
i
iicp
LpL
1
01,000,10
321
aaa
),...,(
1 ncp
ppHLr
предел
энтропии HL при L 
. Эту величину называют предельной
энтропией источника. Показано, что для стационарного бернуллиевского источника
.
Для практических применений важно, чтобы коды сообщений имели по возможности наименьшую длину. Основной характеристикой неравномерного кода является количество символов, затрачиваемых на кодирование одного сообщения. Пусть имеется разделимый побуквенный код для источника, порождающего символы алфавита А={a1,…,an} с вероятностями pi =P(ai), состоящий из n кодовых слов с длинами L1,…,Ln в алфавите {0,1}. Средней длиной кодового слова называется величина
, которая показывает среднее число кодовых букв на одну букву
источника. Пример. Пусть имеются два источника с одним и тем же алфавитом
А={a1,a2,a3} и разными вероятностными распределениями P1={1/3, 1/3, 1/3}, P2={1/4, 1/4, 1/2}, которые кодируются одним и тем же кодом
.
Средняя длина кодового слова для разных источников будет различной
Lср(P1)=1/3.2 + 1/3.3 + 1/3.2= 7/3 ≈2.33 Lср(P2)=1/4.2 + 1/4.3 + 1/2.2= 9/4 =2.25
Побуквенный разделимый код называется оптимальным, если средняя длина кодового слова минимальна среди всех побуквенных разделимых кодов для данного распределения вероятностей символов.
Избыточностью кода называется разность между средней длиной кодового слова и предельной энтропией источника сообщений
.
Избыточность кода является показателем качества кода, оптимальный код обладает минимальной избыточностью. Задача эффективного неискажающего сжатия заключается в построении кодов с наименьшей избыточностью, у которых средняя длина кодового слова близка к энтропии источника. К таким кодам относятся классические коды Хаффмана, Шеннона, Фано, Гилберта-Мура и арифметический код.
Взаимосвязь между средней длиной кодового слова и энтропией дискретного вероятностного источника при побуквенном кодировании выражает следующая теорема.
18
Теорема 1 (Шеннон). Для источника с алфавитом А={a1,…,an} и
11
ni
i
p
L
HLH
LcpL
1
),...,(),...,(
11 ncpn
ppHLppH
вероятностями pi =P(ai),
и любого разделимого побуквенного кода
средняя длина кодового слова всегда не меньше энтропии
L
≥ H(p1,…,pn)
cp
и можно построить разделимый побуквенный код, у которого средняя длина кодового слова превосходит энтропию не больше, чем на единицу:
L
< H(p1,…,pn)+1
cp
Можно получить более сильные результаты, если кодовые слова приписывать не отдельными буквами, а блоками из L букв источника. Так, для неравномерных блоковых кодов справедлива следующая теорема.
Теорема 2. Пусть HL  энтропия на букву в блоке длины L дискретного источник. Тогда существует префиксный код для кодирования блоков длины L, такой, что средняя длина кодового слова Lcp будет удовлетворять неравенствам:
.
Кроме того, в случае бернуллиевского стационарного источника для любого
>0 можно выбрать достаточно большое L, чтобы величина Lcp
удовлетворяла неравенствам:
,
и левое неравенство для Lcp никогда не нарушается для разделимого кода.
Приведем некоторые свойства, которыми обладает любой оптимальный побуквенный код.
Лемма 1. Для оптимального кода с длинами кодовых слов L1,…,L соотношение L1≤L2≤…≤L
если p1≥p2≥…≥pn.
n ,
: верно
n
Доказательство (от противного): Пусть есть i и j, что Li>Lj при pi>pj. Тогда
Lipi+Ljpj= =Lipi+Ljpj+Lipj+Ljpi-Lipj-Ljpi= =pi(Li-Lj)-pj(Li-Lj)+Ljpi+Lipj= =(pi-pj)(Li-Lj) +Lipj+Ljpi>Lipj+Ljpi,
т.е. если поменяем местами Li и Lj, то получим код, имеющий меньшую среднюю длину кодового слова, что противоречит с оптимальности кода. Лемма 1 доказана.
19
Лемма 2 Пусть
nn
baba ,,
11
021
n
ppp
bxbn
}1,0{x
|| bLi
ni ,,1
11
,,nbb
11
,,nbb
baba
n
,,
11
n
pPLPL
)()(
1n
b
n
b
xbb
n
1
xbb
n

bb
}1,0{,

xx
b
b

21
,,nbb
baxbababaσ
nnnn


,,,,
12211
n
pPLPL

)()(
– схема оптимального префиксного
кодирования для распределения вероятностей Р,
. Тогда
среди элементарных кодов, имеющих максимальную длину, существуют два, которые различаются только в последнем разряде.
Доказательство. Покажем, что в оптимальной схеме кодирования всегда найдется два кодовых слова максимальной длины. Предположим обратное. Пусть кодовое слово максимальной длины одно и имеет вид
,
Тогда длина любого элементарного кода не больше длины b, т.е.
. Поскольку схема кодирования префиксная, то кодовые слова
не являются префиксом b. С другой стороны, b не является
префиксом кодовых слов кодирования меньшей средней длиной кодового слова
. Таким образом, новая схема
также является префиксной, причем с
, что
противоречит оптимальности исходной схемы кодирования. Пусть теперь два кодовых слова
разряде, т.е. являются префиксами для других кодовых слов
и
максимальной длины отличаются не в последнем
,
,
,
. Причем
и наоборот. Тогда
,
не
. ,
новая схема префиксной, причем
, что противоречит оптимальности
также является
исходной схемы кодирования. Лемма 2 доказана.
Оптимальный код Хаффмана
Метод оптимального побуквенного кодирования был разработан в 1952 г. Д. Хаффманом. Оптимальный код Хаффмана обладает минимальной
средней длиной кодового слова среди всех побуквенных кодов для данного источника с алфавитом А={a1,…,an} и вероятностями pi =P(ai).
Рассмотрим алгоритм построения оптимального кода Хаффмана, который основывается на утверждениях лемм предыдущего параграфа.
1. Упорядочим символы исходного алфавита А={a1,…,an} по
убыванию их вероятностей p1≥p2≥…≥pn.
2. Если А={a1,a2}, то a10, a21.
3. Если А={a1,…,aj,…,an} и известны коды <aj bj >, j = 1,…,n, то
/
для алфавита {a1,…a
j
//
, a
…,an} с новыми символами a
j
вместо aj, и вероятностями p(aj)=p(a заменяется на коды a
/
 bj0, a
j
//
bj1.
j
/
)+ p(a
j
//
), код символа a
j
/
и a
j
j
//
j
Пример. Пусть дан алфавит 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.
Здесь символы источника уже упорядочены в соответствии с их вероятностями. Будем складывать две наименьшие вероятности и включать
20
суммарную вероятность на соответствующее место в упорядоченном списке
ai pi Li
кодовое слово
a
1
a
2
a
3
a
4
a
5
a
6
0.36
0.18
0.18
0.12
0.09
0.07
2 3 3 4 4 4
1 000 001 011 0100 0101
0
1
а1 00
01
000
001
010
011
0100
0101
а
2
а
3
а
4
а6 а
5
вероятностей до тех пор, пока в списке не останется два символа. Тогда закодируем эти два символа 0 и 1. Далее кодовые слова достраиваются, как показано на рисунке 4.
a
0.36 0.36 0.36 0.36 0.64 0
1
a
0.18 0.18 0.28 0.36 0.36 1
2
a
0.18 0.18 0.18 0.28 00
3
a
0.12 0.16 0.18 000 01
4
a
0.09 0.12 010 001
5
a
0.07 0100 011
6
0101
Рисунок 4 Процесс построения кода Хаффмана
Таблица 5 Код Хаффмана
Посчитаем среднюю длину, построенного кода Хаффмана
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
Рисунок 5 Кодовое дерево для кода Хаффмана
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]