Энтропийное кодирование сообщений
.pdf
ns 1 0,5 6 0,125 3 4 0,0625 2 5 0,03125 0,5 0,75 0,75 0,3125 2,3125 .
С учѐтом полученного значения ns и полученного числа бит кода в каждом
слове (таблица 2) оценим также величину дисперсии для второго варианта кодирования.
d |
0,5 |
(1 |
2,3125)2 |
2 |
0,125 |
(3 |
2,3125)2 |
3 |
0,0625 |
(4 |
2,3125)2 |
2 0,03125 (5 2,3125)2 1.9148.
По величинам среднего числа бит на сообщение и дисперсии второй вариант кодирования, как и ожидалось, имеет преимущество перед первым.
Используют также для сравнения параметр эффективности кода, который определяется отношением энтропии H данного, например, реального источника сообщений, при фиксированном их числе, к среднему числу бит на одно
сообщение |
H |
. |
|
||
|
ns |
|
Если относительные частоты сообщений неизвестны, то на передающей и приѐмной сторонах они могут параллельно определяться и уточняться путѐм, например, установленной процедуры контроля текущих изменений характеристик передаваемых сообщений и адаптивной перестройки структуры дерева кодирования. При этом процедура упорядочивания сообщений в порядке убывания их вероятностей и соответствующая перестройка структуры дерева реализуется соответственно в текущем режиме, по ходу уточнения относительных частот алфавита сообщений. Структура дерева изменяется слева направо и при необходимости и по уровням, т.е. снизу вверх. Изменения параллельно реализуют и на приѐмной и на передающей стороне.
2 .3. Избыточность кодирования по Хаффману
Недостатком кодирования Хаффмана считается избыточность кодирования, которая обусловлена использованием целого числа бит в каждом из выбранных для сообщений слов кода. Однако возможность использования целого числа бит на символ при кодировании по Хаффману не даѐт избыточности только в случае,
когда вероятности сообщений отражаются числами p0 (0,5) , где |
1 и |
является целым числом. В противном случае степень сжатия существенно падает, как было показано в предшествующем разделе, из-за неэффективного
кодирования символами, |
вероятность появления сообщений, соответствующих |
|||
которым pi |
0, 5 . В идеале на данное сообщение следует выделить кодовое слово |
|||
протяжѐнностью l1 |
log2 p1 1 бит. Однако, согласно алгоритму кодирования |
|||
Хаффмана, |
приходится |
выделять |
1 бита. Для простейшей, например, |
|
совокупности, состоящей из двух |
сообщений s1 с вероятностью p1 = 0,7 и s2 с |
||
вероятностью p2 =0.3, энтропия достигает величины |
|||
H |
p1 log 2 p1 (1 p1) log 2(1 |
p1) |
0,7 log 20,7 0,3 log 20,3 |
|
0,881 бит / сообщение. |
|
|
|
|
|
11 |
Соответственно при посимвольном кодировании получим величину 1 бит/ сообщение, так как дробное количество бит/ сообщение в данном случае не используется. Таким образом, при кодировании по Хаффмана обычно не удаѐтся реализовать полное устранение избыточности.
В связи с этим продолжается активный поиск более эффективных методов статистического кодирования для различного типа сообщений. Важно в данном случае не только увеличить степень подавления избыточности, но и минимизировать объѐм необходимых для выполнения кодирования вычислений. Одним из предложенных вариантов кодирования, обеспечивающим более жесткое устранении избыточности, является арифметическое кодирование.
3. Арифметическое кодирование
3.1.Особенности арифметического кодирования
Особенностью арифметического кодирования со сжатием объѐма передаваемых бит, отражающих заданною последовательность исходных сообщений, является относительно жѐсткое сопряжение процедуры кодирования с вероятностями появления сообщений конкретного алфавита. Для данного варианта характерно присвоение кода не отдельным символам, отражающим появление сообщений в источнике, а их, ансамблю (файлу), имеющему определѐнное, например, число (объѐм) сообщений.
Арифметическое кодирование может выполняться в два этапа. На первом этапе (проходе файла) оценивают относительные частоты сообщений в передаваемом файле, а на втором осуществляют собственно кодирование. Если же относительные частоты для данного файла известны, то арифметическое кодирование осуществляют с их использованием. При кодировании поступающие символы многократно отражаются, согласно всей совокупности относительных частот данного алфавита сообщений, в виде модифицируемого (приходом каждого символа, которому соответствует определѐнная относительная частота) числа в интервалы позиционировании, идентифицирующие порядок их появления.
Исходный интервал (позиционирования всей совокупности относительных частот данного алфавита сообщений) 0,1 до начала кодирования имеет
границы gn0 =0 и gv0 =1(нижнюю и верхнюю).
3.2. Реализация арифметического кодирования на передающей стороне
Первоначально этот интервал делится на локальные интервалы, отражающие “ вес ” относительной частоты каждого из сообщений алфавита. В упорядоченной таблице 3 показаны число, частоты, относительные частоты (вероятности) символов сообщений алфавита и выбранное распределение границ интервалов их локализации.
12
|
|
|
|
Таблица 3 |
|
№ сооб |
Число сообщений в |
Относительная |
Интервал |
|
|
щений |
последовательности |
частота |
локализации |
|
|
S1 |
6 |
6 |
0, 4 |
1,0 |
|
|
|
10 |
|
|
|
S2 |
2 |
2 |
0, 2 |
0, 4 |
|
|
|
10 |
|
|
|
S3 |
1 |
1 |
0,1 |
0, 2 |
|
|
|
10 |
|
|
|
S4 |
1 |
1 |
0,0 |
0,1 |
|
|
|
10 |
|
|
|
Будем считать, что кодируемым ансамблем сообщений является
последовательность s1s1s1s2 s3 s1s4 s1s1s2 .
Первый (j=1) такт процесса кодирования определяется появлением первого ( i=1) сообщения si = s1 , которое фиксирует значения верхней и нижней границ
интервала, которые на первом этапе кодирования указанного символа
определяются, согласно таблице 3, величинами g j |
mni |
== |
g1 |
= g |
n1 |
=0,4 и g |
mvi |
j = g1 |
|||||
|
|
|
|
|
|
mn1 |
|
|
|
mv1 |
|||
= gv1 =1,0. |
|
Протяжѐнность |
данного |
|
интервала |
|
составляет |
||||||
величину di |
d1 |
gv1 |
gn1 =1,0-0,4=0,6. |
Таким |
образом, |
первым |
сообщением |
||||||
число C , кодирующее сообщения данного ансамбля число, позиционируется в |
|||||||||||||
пределы 0, 4 |
C |
1, 0 . |
С появлением каждого нового |
сообщения |
кодирующее |
||||||||
число C, оставаясь в пределах этого интервала, изменяется. Распределим в пределах данного интервала граничные значения сообщений в соответствии с
таблицей 3. Получим новое распределение границ локализации сообщений ( g j |
|
|
mni |
и g j |
, где j, как отмечалось выше, определяет такт кодирования, а i-номер |
mvi |
|
сообщения в алфавите, m- индекс модификации ), модифицированное в
соответствии с |
появлением |
на |
первом |
такте |
(1) кодирования |
сообщения s1 . |
|||||||||||
Соответственно имеем: g1 |
=0,64, g1 |
=1,0 (сообщение s |
); g1 |
=0,52, |
g1 |
|
=0,64 |
||||||||||
|
|
|
|
mn1 |
|
mv1 |
|
|
|
1 |
|
mn2 |
|
|
mv2 |
|
|
(сообщение s |
2 |
); g1 |
=0,46, |
g1 |
=0,52 |
|
(сообщение s |
); g1 |
|
=0, |
|
4, |
g1 |
|
=0,46 |
||
|
|
mn3 |
|
mv3 |
|
|
|
3 |
mn4 |
|
|
|
mv4 |
|
|||
(сообщение s4 ). |
Появление |
на |
втором |
такте |
сообщения s1 определяет |
вторую |
|||||||||||
модификацию распределения границ интервала локализации кодирующего
числа: |
g2 |
|
|
=0,784, |
g2 |
mv1 |
=1,0 |
(сообщение s |
); g2 |
mn2 |
=0,712, |
g2 |
mv2 |
=0,784 |
|||||||||
|
mn1 |
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|||||
(сообщение s |
2 |
); g2 |
mn3 |
=0,676, |
g2 |
|
=0,712 |
(сообщение s ); g2 |
|
=0,64, |
g2 |
mv4 |
=0,676 |
||||||||||
|
|
|
|
|
|
|
mv3 |
|
|
|
|
|
3 |
|
mn4 |
|
|
|
|||||
(сообщение s4 ). Появление |
на |
|
третьем |
такте |
снова |
сообщения |
s1 |
адресует |
|||||||||||||||
кодирующее число в интервал от g2 |
=0,784 до g2 |
mv1 |
=1,0. |
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
mn1 |
|
|
|
|
|
|
|
|
|
|
|
|
Обозначим d j m |
|
g j mvi |
g j mni |
|
|
- |
протяжѐнность |
интервала |
локализации |
||||||||||||||
кодирующего числа на j-ом |
|
этапе кодирования |
данной |
последовательности |
|||||||||||||||||||
сообщений. Тогда d 3m |
g3mvi |
g3mni = |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
=0,216. Можно заметить, что модифицированные нижняя и верхняя границы позиционирования кодирующего числа для каждого следующего такта кодирования (с учѐтом таблицы 3)определяются по формулам:
13
g |
j 1 |
g |
j |
d |
j |
gni |
; |
g |
j 1 |
g |
j |
dmi gvi . |
mni |
mni |
m |
mvi |
mni |
Соответственно с приходом четвѐртого сообщения s2 получаем, согласно данным
предшествующего этапа и таблицы 3, следующую версию параметров интервала, в котором позиционировано число, кодирующее предшествующую последовательность сообщений.
g 4mn |
g3mn |
d 3m |
gn4 =0,784+0,216 0,2=0,8272 |
|
|
, g 4mv |
gmn3 |
dm3 |
gv 2 =0,784+0,216 0,4=0,8704, dm |
4 g 4mv g 4mn = 0,8704-0,8272 |
|
=0,0432 . |
|
|
|
||
С приходом пятого сообщения s3 : |
|
||||
g5mn |
g 4mn |
d 4m |
gn3 =0,8272+0,0432 0,1=0,83152, |
|
|
g5mv |
g 4mn |
d 4m |
gv3 =0,8272+0,0432 0,2=0,83584, |
|
|
dm5 |
g5mv |
g5mn = 0,83584-0,83152 =0,00432. |
|
||
С приходом шестого сообщения s1 : |
|
||||
g6mn |
g5mn |
d 5m |
gn1 = 0,83152+0,00432 0,4= 0,833248, |
||
g 6mv |
g5mn |
d 5m |
gv1 = 0,83152+0,00432 1.0= 0,83584, |
||
dm |
6 |
g6mv |
g6mn = 0,83584-0,833248 = 0,002592. |
|
|
С приходом седьмого сообщения s4 :
g 7mn |
g 6mn |
d 6m |
gn 4 =0,833248+0,002592 0,0=0,833248, |
g7mv |
g6mn |
d 6m |
gv 4 =0,833248+0,002592 0,1=0,8335072, |
d 7m |
g7mv |
g7mn =0,8335072-0,833248 =0,0002592. |
|
С приходом восьмого сообщения s1 :
g8mn |
g7mn |
d 7m gn1 =0,833248+0,0002592 0,4=0,83335168, |
g8mv |
g 7mn |
d 7m gv1 =0,833248+0,0002592 1,0=0,8335072, |
d 8m |
g8mv |
g8mn =0,8335072-0,83335168=0,00015552. |
С приходом девятого сообщения s1 :
g9mn |
g8mn |
d 8m |
gn1 =0,83335168+0,00015552 1,0=0,8335072, |
g9mv |
g8mn |
d 8m |
gv1 = 0,83335168+0,00015552 0,4=0,833413888, |
d 9m |
g9mv |
g9mn = 0,8335072-0,833413888=0,000093312. |
|
С приходом десятого сообщения s2 :
g10mn |
g9mn |
d 9m |
gn2 =0,833413888+0,000093312 0,2=0,8334325504, |
g10mv |
g9mn |
d 9m |
gv 2 =0,833413888+0,000093312 0,4=0,8334512128, |
d 8m |
g10mv |
g10mn = 0,8334512128-0,833413888=0,0000373248. |
|
Декодирование реализуется в обратном ( кодированию) порядке. На приѐмной стороне при этом является известной содержание таблицы 3, отражающей число, частоты и относительные частоты (вероятности) появления символов
14
(сообщений) алфавита. Кодирующее число соответствует интервалу от 0 до 1. При этом часть полученного числа -«0»- не включают в передаваемую цифру.
Полученное на последнем этапе кодирования число C j |
C 10 |
(кодирование |
k |
k |
|
определяется использованием в обозначении числа индексом k, а декодирование
- d), значение которого находится в интервале от |
g10 |
до |
g10 |
( g10 |
mn |
< |
C 10 |
< |
|
mv |
|
mn |
|
|
k |
|
g10mv ) передают на приѐмную сторону. Определим в качестве передаваемого числа 83345, т.е. Ck10 = Cd1 =0,83345.
3.3. Декодирование на приѐмной стороне
На приемной стороне декодирование осуществляют в обратном порядке, начиная с первой (после запятой ) составляющей полученной цифры Ck10 =0,83345. Значение этой составляющей 0,8.. Это сразу позволяет в
соответствии с интервалами, отведѐнном сообщениям в таблице 3, идентифицировать по этой цифре появление на первом этапе декодирования сообщения s1 . Далее в декодере осуществляют вычитание из кодирующего
числа нижнего значения интервала позиционирования сообщения s1 (в
соответствии |
с таблицей gni |
gn1 0, 4 ). Полученный результат делят на |
|||||||||
протяжѐнность |
|
первого |
интервала |
d1 0,6 . |
Тогда |
||||||
C2 |
|
C 10 |
g |
n1 |
|
0,83345 0, 4 |
=0,72241667. Полученный результат свидетельствует, |
||||
|
k |
|
|
|
|||||||
d |
d1 |
|
|
|
0,6 |
||||||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|||
что второе сообщение попадает в интервал позиционирования сообщения s1 . Следуют заметить, что интервал позиционирования при идентификации
сообщений |
определяется полученной на каждом этапе декодирования цифрой |
|||||||||||||||||||
C j |
в соответствии с неравенством g |
ni |
C j |
d |
g |
vi |
. |
|
||||||||||||
d |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
Далее находим: |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
C3 |
|
C2d |
gn1 |
|
0,72241667 |
0, 4 |
=0,537361117-соответствует |
идентификации |
|||||||||||
|
d |
d1 |
0,6 |
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
третьего сообщения как s1 . |
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
C4 |
|
C3d |
gn1 |
|
0,537361117 |
0, 4 |
|
=0,228935195-соответствует |
идентификации |
||||||||||
|
d |
D3 |
0,6 |
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
сообщения как s2 . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
C5 |
|
C4d |
gn2 |
|
|
0, 228935195 |
0, 2 |
=0,144675935 - соответствует идентификации |
|||||||||||
|
d |
d2 |
0, 2 |
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
сообщения как s3 . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
C6 |
|
C5d |
gn3 |
|
|
0,144675975 |
0,1 |
=0,44675975 |
|
- соответствует |
идентификации |
||||||||
|
d |
d3 |
0,1 |
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
сообщения как s1 .
15
C7 |
C6d |
gn1 |
0, 44675975 |
0, 4 |
|
|
=0,077932917 - соответствует идентификации |
||||||||
|
|
|
|
|
|
|
|
|
|||||||
d |
|
d1 |
|
|
|
0,6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
сообщения как s4 . |
|
|
|
|
|
|
|
|
|
|
|||||
C8 |
C7d |
gn4 |
0,077932917 |
0,0 |
=0,77932917 |
- |
соответствует |
идентификации |
|||||||
|
|
|
|
|
|
|
|
|
|
||||||
d |
|
d4 |
|
|
|
0,1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
сообщения как s1 . |
|
|
|
|
|
|
|
|
|
|
|||||
C9 |
C8d |
gn1 |
0,77932917 |
0, 4 |
=0,63221528 |
- |
соответствует |
идентификации |
|||||||
|
|
|
|
|
|
|
|
|
|||||||
d |
|
d1 |
|
|
|
0,6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
сообщения как s1 . |
|
|
|
|
|
|
|
|
|
|
|||||
C10 |
|
C9d |
gn1 |
0,63221528 |
0, 4 |
=0,38702547 |
- |
соответствует |
идентификации |
||||||
|
|
|
|
|
|
|
|
||||||||
d |
|
d1 |
|
|
|
0,6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
сообщения как s2 .
3.4. Оценка эффективности арифметического кодирования
Оценим эффективность сжатия. С этой целью найдѐм совместную вероятность кодированной последовательности сообщений s1s1s1s2 s3 s1s4 s1s1s2 .
p |
p6 |
p2 |
2 |
p |
p (0,6)6 |
(0, 2)2 0,1 0,1 0,0000166624. |
1 4 |
1 |
|
3 |
4 |
|
Видеале, соответственно полученному значению вероятности, на сообщение
ввиде данной последовательности следует выделить кодовое слово
протяжѐнностью l1 4 |
log2 p1 4 |
log2 0,0000186624 |
15,709506 бит. |
|
Число C1 =0,83345 поступает на декодер. В двоичном представлении, с |
||||
некоторым |
приближением, |
оно имеет |
вид C1b 0.1101010101011101 |
|
(соответствующее десятичное число 0,8334503173828125).Таким образом, кодирующий рассмотренную последовательность код может иметь вид 1101010101011101 и имеет протяжѐнность 16 бит.
Это достаточно неплохое приближение к полученному идеализированному значению l1 4 log2 p1 4 log2 0,0000186624 15,709506 бит.
Основным недостатком арифметического кодирования является значительный объѐм вычислений, обусловленный необходимостью использования при кодировании и
декодировании операций умножения ( деления). С другой стороны в данном случае обычно имеет место более эффективное, по отношению к варианту кодирования по Хаффману, кодирование сообщений, вероятность появления которых pi 0, 5 .
При выполнении адаптивного арифметического кодирования реализуют, с учѐтом изменений показаний счѐтчиков, осуществляющих текущую оценку относительных частот каждого из сообщений, параллельную (жѐстко согласованную) коррекцию на приѐмной и передающей сторонах интервалов локализации сообщений в соответствующих массивах данных. С поступлением и накоплением сообщений могут, например, иметь место такие изменения
16
относительных частот сообщений, представленных в массиве (упрощѐнный его вариант показан в таблице 3), которые нарушают его упорядоченность. Соответственно на последующих этапах кодирования целесообразно (согласованно при кодировании и декодировании) переходить к другому варианту интервалов локализации относительных частот сообщений в массиве. Процедура коррекции массива данных существенно упрощается при использовании специальной структуры в виде двоичного дерева кодирования, в узлах которого приведены, в том числе, и данные показаний счѐтчиков сообщений.
4. Кодирование текстовых сообщений
4.1. Особенности кодирования текстовых сообщений
Основным преимуществом словарных методов кодирования текстовых сообщений со сжатием соответствующего объѐма передаваемых бит является отсутствие вычислений, так как в данном случае используются операции: декомпозиции последовательности сообщений исходного файла на независимые (законченного вида) сообщения (сочетания букв, слова, словосочетания, фразы… ), сравнительного анализа разделѐнных сообщений и содержания существующего (созданного) архива (словаря), присвоение содержащимся в словаре сообщениям заданных символов и прямое (по буквам) кодирование,
например, кодом ASCII ( American Standard Code for Information Interchange ).
При этом используется семь бит (семь разрядов) на одинарное (однозначно независимое) сообщение (пробел, буквы алфавита, знаки препинания и др. ), восьмой бит используется для расширения числа одинарных сообщений (тех сообщений, которые не содержатся в словаре). Входное сообщение в ходе кодирования ищется в словаре. Если оно найдено, то передаѐтся соответствующее кодовое слово, или соответствующие кодовые слова, определяющие на приѐмной стороне его позицию в словаре. В начале кодового слова заданная двоичная цифра «0» (или «1») обычно идентифицирует начало передачи такого кодового слова, число бит в котором задаѐтся выбранным объѐмом словаря. Если объѐм словаря содержит V позиций, то необходимое число бит в кодовом слове определяется величиной l log2 V . При V=1000000,
например, получаем l= 20 бит, что задаѐт полную ( с учѐтом бита, фиксирующего начало передачи сообщения, которое содержится в словаре ) протяжѐнность соответствующего кодового слова L l 1= 21бит.
Когда необходимых сочетаний букв, частей слов, целых слов, словосочетаний, частей фраз и т. д. не содержится в словаре, то передаются коды последовательно следующих букв, пробелов и знаков препинания. При этом в начале такой последовательности, например, восьмибитовых кодовых слов передается двоичная цифра f («1» или «0»), идентифицирующая начало передачи кодовой последовательности сообщения, которое не было, в ходе кодирования, обнаружено в словаре. После этого может передаваться информация, отражающая протяжѐнность (число букв) последующего сообщения, и затем
17
последовательность восьмибитовых символов, определяющих конкретные буквы (пробелы, знаки препинания) самого сообщения.
Созданные словари должны содержать употребляемые, с наибольшей вероятностью для данного типа текстов, слова и словосочетания. Однако, завышенный объѐм словаря может и снижать достижимую степень сжатия.
Существуют различные разновидности реализации процедуры кодирования ( сжатия без информационных потерь ) текстовых сообщений. Достаточно эффективные варианты сжатия текстовых сообщений первоначально были разработаны в 70-х годах ( методы LZ77 и LZ78, авторы A. Lampel, J. Ziv).
4.2. Вариант кодирования LZ77
В варианте кодирования LZ77 используется корреляция текущего (кодируемого в данный момент) фрагмента текста c его предшествующим (уже закодированным к данному моменту) фрагментом.
Кодирование основано на сравнительной оценке последовательностей сообщений в кодируемом и закодированном фрагментах, общий объѐм которых чаще всего является фиксированным и ограниченным. При этом последовательность сообщений в кодируемом фрагменте является продолжением последовательности сообщений закодированного фрагмента, а объѐм сообщений, содержащихся в последнем из них, значительно превышает объѐм сообщений, содержащихся в кодируемом фрагменте текста. Кодируемое в данный период сообщение примыкает к сообщению, закодированному в предшествующий период, и переводится после выполнения кодирования из буфера текущего фрагмента в буфер предшествующего фрагмента. Весь объем текста в уже закодированном фрагменте по сути дела является непрерывной последовательностью букв, пробелов, знаков препинания, начало которой примыкает к началу кодируемого фрагмента, а конец определяется объѐмом соответствующего буфера. Это позволяет определить положение любой буквы в этом фрагменте или их сочетаний по отношению к его началу. Процесс сравнительной оценки сообщений в указанных фрагментах фактически определяется (в процессе кодирования) порядком следования букв текста в кодируемом фрагменте.
Первоначально находят в объѐме уже закодированного фрагмента совокупность позиций первой конкретной буквы (символа) кодируемого фрагмента. Затем последовательно определяют в этой совокупности лишь позиции двух его первых букв, трѐх и т. д. букв (пробелов, знаков препинания). Данный процесс сравнительной оценки завершают на последнем этапе, когда выборка из непрерывной последовательности (“цепочка”) кодируемых в данный период букв (пробелов, знаков препинания) уже не имеет аналога в пределах текста , содержащегося на этот период кодирования в уже закодированном фрагменте. Если в уже закодированном фрагменте указанная “цепочка” кодируемых в данный период букв (пробелов, знаков препинания) обнаружена на последнем этапе кодирования в нескольких местах, то обычно передаѐтся координата l наиболее дальней (от начала уже закодированного фрагмента) из них. Кроме этого в качестве информационных данных на данном этапе
18
кодирования передаются на приѐмную сторону число (n), содержащихся в обнаруженной “цепочка” букв, и следующая буква (пробел, знак препинания) кодируемой последовательности. В случае, когда уже закодированный фрагмент не содержит буквы, с которой, собственно, и начинается данный этап кодирования, то передают значение координаты «0» (l=0), в качестве же числа n букв (символов) в закодированной “цепочке” передаѐтся также значение «0» (n=0) и, наконец, в качестве следующей буквы передаѐтся сама первая буква. Если в кодируемой “цепочке” имеет место повторение одной и той же буквы, то передают в начале «0», которым фиксируется появление частного случая, затем передают «1», фиксирующую наличие повторений одной и той же буквы, и символ самой буквы. После этого передают число повторений и символ следующей буквы. Граница между уже закодированным и кодируемым фрагментом может смещаться при кодировании в сторону кодируемого фрагмента. При этом возможно увеличение числа букв в обнаруженной “цепочке” за счѐт еѐ продолжения в сторону кодируемого фрагмента. Соответственно максимально-возможная величина числа букв в обнаруженной “цепочке” определяется числом независимых сообщений, содержащихся в кодируемом фрагменте, за исключением последнего из таких сообщений. Количество сообщений K0 , содержащихся в непрерывной последовательности
кодируемого фрагмента, определяет при этом необходимое для передачи числа n количество (
1) ) бит.
Количество сообщений L 0 , содержащихся в непрерывной
последовательности закодированного фрагмента, определяет при этом необходимое для передачи координаты (l) число ( r log2 L0 ) бит . При этом на
передачу же следующей (за кодируемой “цепочкой” |
букв) буквы |
обычно |
расходуют g (восемь) бит. Если L 0 = 216 =65536, K0 = 26 =64, |
тогда содержащееся в |
|
закодированном фрагменте слово из пяти букв может |
передаваться |
числом |
r g f 16+6+8+1 =31 бит, где f идентифицирует начало передачи сообщения, содержащегося в закодированном фрагменте. Такое же слово кодом ASCII может передаваться уже числом 5 8 1 40 41 бит.
После завершения каждого этапа кодирования из буфера закодированного фрагмента выводят n+1 закодированных на данном этапе букв, а в конец буфера
кодирования |
соответственно |
вводят |
n+1 новых букв. С указанным |
совмещѐнным |
сдвигом фрагментов |
закодированного и кодируемого по |
|
отношению к кодируемому тексту( или наоборот текста по отношению к фиксированному положению стробирующего «окна», определяющего размеры указанных фрагментов) связано часто используемое название данного метода- «скользящее окно».
Эффективность кодирования с использованием метода LZ77 зависит от объѐма закодированного, кодируемого фрагментов и кодируемого текста в целом. С возрастанием и оптимизацией величин указанных объѐмов эффективность кодирования возрастает, и среднее число бит на сообщение приближается к энтропии кодируемого текста. Достижимая степень в лучшем случае достигает здесь величины 50%.
19
Недостатки метода LZ77 обусловлены спецификой его функционирования:
1.Данный метод рассчитан на использование корреляции в смежных фрагментах текста и эффективность его применения зависит от наличия соответствующей взаимозависимости в структуре текста.
2.Кодирование одиночных сообщений (случай, когда закодированный фрагмент не содержит буквы, с которой начинается данный этап кодирования) реализуется относительно большим числом бит.
3.Имеет место падение эффективности сжатия часто повторяющихся сочетаний (“цепочек”) сообщений из–за биений интервалов между ними и общей протяженностью стробирующего «окна».
4.Уменьшение эффективности сжатия имеет место при сокращении размеров кодируемого и закодированного фрагментов, а увеличение размеров существенно замедляет процесс сравнительной оценки
указанных фрагментов.
Декодер на приѐмной стороне, с использованием переданной информации, синтезирует в тексте необходимую для его содержания последовательность букв.
4.3. Вариант кодирования LZ78
Развитием кодирования LZ77 является вариант LZ78, который обладает преимуществами по отношению к рассмотренному варианту LZ77 сжатия текстовых сообщений.
В таком случае используют определѐнного объѐма словарь уже встретившихся на предшествующих этапах кодирования выборок (“цепочек” различного объѐма) из непрерывной последовательности кодируемых в данный период букв. Словарь может создаваться и пополнятся (и на приѐмной и на передающей сторонах) в процессе кодирования данного текста. Если первая буква цепочки не обнаружена в словаре, то передаѐтся нулевая позиция словаря и данная буква текста. По результатам кодирования передаѐтся позиция текущего сообщения в словаре и следующая буква текста ( код символа). Первоначально определяется и фиксируется буква, являющаяся началом кодируемой выборки (“цепочки) из последовательности сообщений, затем осуществляется сравнение данного сообщения со словарѐм. В случае, когда данная буква содержится в словаре, определяется, фиксируется и ищется в словаре уже последовательность двух букв. Если такая двухзвенная цепочка букв (символов) обнаружена , то определяется, фиксируется и ищется в словаре уже последовательность трѐх букв и т. д. Когда фиксированная таким образом n-звенная “цепочка” на последнем этапе кодирования не обнаружена в словаре, осуществляют еѐ кодирование для передачи на приѐмную сторону. Передают позицию (координаты) в словаре обнаруженной в словаре части “цепочки”, содержащей n-1 букв, и передают n-ю букву, присоединения которой к предшествующему варианту кодируемой цепочки обусловило еѐ отсутствие в созданном словаре. При этом словарь расширяется за счѐт включения в него закодированного и переданного на последнем этапе варианта n-звенной цепочки сообщений (букв).
Закодируем на основе LZ78 следующую последовательность:
20
