Указания по выполнению контрольной работы по дисциплине «Теория информации». Учебно-методическое пособие
.pdf
При равновероятных появлениях символов сообщений, т.е.
мула Шеннона (1) превращается в формулу Хартли |
I (L) = m log2 n |
p
,
|
= |
1 |
, фор- |
k |
n |
||
|
|
|
которая за-
висит только от длины сообщения и мощности алфавита источника, но не от вероятностей появления символов источника. Далее предполагается, что используются логарифмы по основанию 2.
Пример. Источник информации без памяти |
S |
вероятностями p1 = 0.1, p2 = 0.1, p3 = 0.1, |
|
с алфавитом |
A ={a1, |
p4 = 0.7 порождает
a2 , a3 , a4} и
сообщения.
Сравнить количество информации, которое приходится на символ сообщения, порождаемого источником S , с количеством информации, которая была бы у того же источника при равновероятном использовании символов.
Решение. При одинаковых вероятностях появления любой из всех n = 4 букв алфавита количество информации, приходящуюся на одну букву сообщения, можно определить по формуле Хартли log4 = 2 бит.
Найдем количество информации источника S по формуле (2). Для вычисления энтропии можно воспользоваться таблицей значений функции ( p) = −p log p в
приложении А, где приведены значения слагаемых формулы Шеннона для различных значений вероятности p .
H(0.1,0.1,0.1,0.7) = −(3 0.1 log0.1+ 0.7 log0.7) = 3 0.3322 + 0.3602 =1.3568
бит.
Таким образом, неравномерность распределения вероятностей использования букв снижает количество информации источника с 2 до 1.36 бит.
Пусть имеются два источника информации. Первый источник X порождает символы x1, x2 ,..., xm с вероятностями p(x1), p(x2 ),..., p(xm ) , а второй ис-
точник Y
p( y ), p( y |
2 |
),..., |
1 |
|
порождает |
символы |
y1, y2 ,..., ys |
с |
вероятностями |
p( ys ) . Источники порождают совместное сообщение xy, причем |
||||
имеется статистическая зависимость между сообщениями источников. Поскольку сообщения зависимы, то для заданного символа xk источника X веро-
ятности появления символов y1, y2 ,..., ys источника ми вероятностями
Y
определяются условны-
p( y1 | xk ), p( y2 | xk ),..., p( y j | xk ),..., p( ys | xk ).
Для фиксированного символа xk |
совокупность условных вероятностей |
|
определяет частную условную энтропию |
|
|
s |
|
|
H (Y | xk ) = − p( y j | xk ) log p( y j | xk ) , |
(3) |
|
j =1
которая характеризует информативность сообщений Y после появления символа xk . Если частную условную энтропию усреднить по вероятностям появления
всех xk , то найдем общую условную энтропию сообщений Y относительно со-
11
общений X
m
H (Y | X ) = − p(xk )H (Y | xk ) k =1
С учетом выражений для частных условных энтропий выражение
(4)
можно получить такое
m s
H (Y | X ) = − p(xk ) p( y j | xk ) log p( y j | xk ) k =1 j =1
Известно, что вероятность висимых случайных величин xk
p(x |
k |
, |
|
|
совместного появления двух статистически за-
и |
|
y j определяется равенством |
||||||
y |
j |
) = p(x |
k |
) p( y |
j |
| x |
k |
) |
|
|
|
|
|
||||
Поэтому окончательное выражение для условной энтропии можно записать так
m s
H (Y | X ) = − p(xk , y j ) log p( y j | xk ) k =1 j =1
(5)
Основной смысл средней условной энтропии состоит в том, что показы-
вает, какую энтропию дают сообщения |
Y , когда уже известна энтропия сооб- |
щений |
X . Для нахождения энтропии общего сообщения xy, которое порожда- |
ется совместно двумя источниками |
X |
и |
Y , используется формула энтропии |
объединения источников |
|
|
|
H ( X ,Y )
=
m s
− p(xk , y j ) log k =1 j =1
p(x |
k |
, |
|
|
y
j
)
,
(6)
где p(xk , y j ) – вероятность совместного появления двух статистически зависимых символов сообщения xk и y j .
Поскольку вероятность совместного появления двух символов сообщения может быть выражена через вероятность появления одного из состояний и
условную |
вероятность |
появления |
другого |
состояния |
равенством |
p(xk , y j ) = p(xk ) p( y j | xk ) , то |
|
|
|
||
X
m |
s |
|
H ( X ,Y ) = − p(xk ) p( y j | xk ) log( p(xk ) p( y j | xk )) = |
||
k =1 j =1 |
|
|
m s |
m |
s |
= − p(xk ) p( y j | xk ) log p(xk ) − |
p(xk ) p( y j | xk ) log p( y j | xk ) |
|
k =1 j =1 |
k =1 j =1 |
|
Первая сумма в соотношении представляет собой энтропию сообщений
|
s |
|
(поскольку |
p( y j | xk ) =1), а вторая сумма – условную энтропию |
H (Y | X ) . |
|
j =1 |
|
Таким образом, окончательно имеем |
|
H(X ,Y ) = H(X ) + H(Y | X ) |
(7) |
Аналогично можно получить симметричное соотношение
H(X ,Y ) = H(Y ) + H(X | Y ) |
(8) |
12
Пример. |
Сообщение порождается двумя зависимыми источниками |
X |
с алфа- |
витом AX |
= {x1 , x2 x3} и Y с алфавитом AY = {y1 , y2 y3}. Известны вероятности появ- |
||
ления символов источника X : p(x1 ) = 0.2 , p(x2 ) = 0.2 , p(x3 ) = 0.6 . |
|
|
|
Зависимость между источниками стей PXY = P( y j / xi ) .
X
и
Y
задана матрицей условных вероятно-
|
Y |
|
y1 |
y2 |
y3 |
|
|
X |
|
|
|||
|
|
|
|
|
|
|
|
x1 |
|
0.4 |
0.1 |
0.5 |
|
|
x2 |
|
0.7 |
0.3 |
0.0 |
|
|
x3 |
|
0 |
0.8 |
0.2 |
|
Найти величины H ( X ) , H (Y ) , |
H (X ,Y ) , H (X / Y ) , H (Y / X ) . |
|||||
Решение
1. Сначала вычислим безусловные вероятности
p( y |
j |
) |
|
|
по формуле полной веро-
ятности для |
j =1,2,3 |
|
|
|
|
|
|
|
|
|
|
|
||||
p( y |
j |
) = p(x ) p( y |
j |
/ x ) + p(x |
2 |
) p( y |
j |
/ x |
2 |
) + p(x ) p( y |
j |
/ x |
) |
|||
|
1 |
|
1 |
|
|
|
|
3 |
|
3 |
||||||
Тогда |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
p( y ) = 0.2 0.4 + 0.2 0.7 + 0.6 0.0 = 0.22 |
|||||||||||
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
p( y |
2 |
) = 0.2 0.1+ 0.2 0.3 + 0.6 0.8 = 0.56 |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
p( y |
3 |
) = 0.2 0.5 + 0.2 0.0 + 0.6 0.2 = 0.22 |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Применим формулу Шеннона для вычисления энтропий источников H (Y )
H ( X
)
,
H(0.2,0.2,0.6) = −(2 0.2 log0.2 + 0.6 log0.6) = 2 0.4644 + 0.4422 =1.371 бит.
H (0.22,0.56,0.22) = −( 0.22 log 0.22 + 0.56 log 0.56 + 0.22 log 0.22) =
0.4806 + 0.4684 + 0.4806 = 1.4296 бит |
|
2. Используя исходные данные задачи, вычислим условную энтропию |
H (X / Y ) |
по формулам (4), (5) при k =1,2,3 |
|
H (Y / xk ) = −p( y1 / xk ) log p( y1 / xk ) − p( y2 / xk ) log p( y2 / xk ) − p( y3 / xk ) log p( y3 / xk )
Тогда
H (Y
/ x |
) |
1 |
|
=
1.361
,
H (Y
/ x |
2 |
) |
|
|
=
0.8813
,
H (Y
/ x |
3 |
) |
|
|
=
0.7219
. После усредне-
ния по вероятности появления символов x
тропии H (Y / X ) = H (Y / x1 ) p(x1 ) + H (Y / x2
имеем значение полной
) p(x |
2 |
) + H (Y / x |
) p(x |
) = |
|
3 |
3 |
|
условной эн-
0.8816 .
сти
Для вычисления условной энтропии |
H(X / Y ) нужны условные вероятно- |
||||
p(xi / y j ) , i |
= 1,2,3 , j =1,2,3. Найдем их из соотношения |
||||
p( y j ) p(xi |
/ y j ) = p(xi ) p( y j / xi ) или |
p(xi / y j ) = |
p(xi ) p( y j / xi ) |
||
|
|
||||
p( y j ) |
|||||
|
|
|
|||
13
Получим
p(x |
|
1 |
|
p(x |
2 |
|
|
p(x |
3 |
|
/ / /
y |
) |
1 |
|
y |
) |
1 |
|
y |
) |
1 |
|
= = =
0,36 0,64 0
p(x |
/ y |
2 |
) = 0,04 |
1 |
|
|
p(x |
2 |
/ y |
2 |
) = 0,1 |
|
|
|
p(x |
3 |
/ y |
2 |
) = 0,86 |
|
|
|
p(x |
/ y |
3 |
) = 0,45 |
1 |
|
|
p(x |
2 |
/ y |
3 |
) = 0 |
|
|
|
||
p(x |
3 |
/ y |
3 |
) = 0,55 |
|
|
|
Используя полученные условные вероятности
p(x |
i |
/ y |
j |
) |
|
|
|
и вычисленные ранее
безусловные вероятности p( y j ), вычислим условную энтропию
H(X /Y )
по
формулам (4), (5)
H(X
/Y )
0,82
.
3. Для вычисления энтропии объединения источников нужны вероятности появления общего сообщения двух источников. Совместные вероятности можно вычислить по формуле p(xi , y j ) = p(xi ) p( y j / xi ) , i = 1,2,3 , j =1,2,3. Получим
p(x |
|
, y ) |
1 |
1 |
|
p(x |
2 |
, y ) |
|
1 |
|
p(x |
3 |
, y |
) |
|
1 |
|
= = =
0,08 0,14 0
p(x |
|
, y |
2 |
) |
|
1 |
|
|
|||
p(x |
2 |
, y |
2 |
) |
|
|
|
|
|
||
p(x |
3 |
, y |
2 |
) |
|
|
|
= = =
0,02 0,06 0,48
p(x |
, y |
3 |
) = 0,1 |
1 |
|
|
p(x |
2 |
, y |
3 |
) = 0 |
|
|
|
p(x |
3 |
, y |
3 |
) = 0,12 |
|
|
|
Полученные совместные вероятности подставим в формулу энтропии объединения (6), что дает результат H(X ,Y ) 2,25 . Проверим полученный результат
по формуле (7) H(X ,Y ) = H(X ) + H(Y / X ) 1,37 + 0,88 = 2,25. Значения совпа-
дают. Ответ
бит, H
H(X (X ,Y
) =1.371 ) 2,25
бит,
H (Y )
=1.429
бит
,
H(X /Y ) 0,82 ,
H (Y / X ) = 0.8816
14
Задача 2
Набор символов ФИО студента необходимо преобразовать следующим образом:
•буквы из диапазона А-Ж заменить на символ a;
•из диапазона З-П на символ b;
•из диапазона Р-Ч на символ c;
•из диапазона Ш-Я на символ d.
Закодировать последовательность преобразованного набора символов ФИО словарными методами LZ77, LZSS, LZ78, LZW. Определить длину полученных кодовых последовательностей в битах (10б)
Необходимый теоретический материал для решения задачи 2
Словарные коды интенсивно исследуются и конструируются, начиная с 1977 года, когда появилось описание первого алгоритма, предложенного А. Лемпелом и Я. Зивом. В настоящее время существует множество методов семейства LZ-кодов, которые представляют собой различные модификации метода Лемпела-Зива.
Словарные коды класса LZ широко используются в практических задачах. На их основе реализовано множество программ-архиваторов. Эти методы также используются при сжатии изображений в модемах и других цифровых устройствах передачи и хранения информации. Словарные методы сжатия данных позволяют эффективно кодировать источники с неизвестной или меняющейся статистикой. Важными свойствами этих методов являются высокая скорость кодирования и декодирования, а также относительно небольшая сложность реализации. Кроме того, LZ-методы обладают способностью быстро адаптироваться к изменению статистической структуры сообщений.
Общая схема кодирования, используемая в LZ-методах, заключается в следующем. При кодировании сообщение разбивается на слова переменной длины. При обработке очередного слова ведется поиск ему подобного в ранее закодированной части сообщения. Если слово найдено, то передается соответствующий ему код, который показывает местоположение найденного слова в закодированной части сообщения. Если слово не найдено, то передается специальный символ, обозначающий его отсутствие, и новое обозначение этого слова. Каждое новое слово, не встречавшееся ранее, запоминается, и ему присваивается индивидуальный код.
При декодировании по принятому коду определяется закодированное слово. В случае получения специального символа, сигнализирующего о передаче нового слова, принятое слово запоминается, и ему присваивается такой же, как и при кодировании, код. Таким образом, декодирование является однозначным, т.к. каждому слову соответствует свой собственный код.
По способу организации хранения и поиска слов словарные методы можно разделить на два больших класса:
15
•класс LZ77, который содержит алгоритмы, осуществляющие поиск слов в какой-либо части ранее закодированного текста, называемой окном;
•класс LZ78, который содержит алгоритмы, использующие адаптивный словарь с ранее встретившимися словами.
Словарные алгоритмы отличаются размерами окна, способами кодирова-
ния слов, алгоритмами обновления словаря и т.п. Все указанные факторы влияют и на характеристики этих методов: скорость кодирования, объем требуемой памяти и степень сжатия данных, различные для разных алгоритмов. Однако в целом словарные методы представляют значительный практический интерес и позволяют достаточно эффективно сжимать данные с неизвестной статистикой.
Класс словарных кодов LZ77
Словарный алгоритм сжатия LZ77 является самым старым среди словарных методов. Описание алгоритма было опубликовано А. Лемпелом и Я. Зивом в 1977 г., но сам алгоритм разработан не позднее 1975 г. Алгоритм LZ77 является родоначальником целого семейства словарных схем – так называемых ал-
горитмов со скользящим словарем, или скользящим окном. В LZ77 в качестве словаря используется блок (окно) уже закодированной последовательности. По мере кодирования сообщения положение окна постоянно смещается вправо, словарь как бы "скользит" по входному потоку данных.
Рассмотрим основные этапы кодирования методом LZ77 с использовани-
ем скользящего окна сообщения x1x2 x3 x4 ..., которое порождается некоторым |
||
источником информации с алфавитом A . |
|
|
|
Для кодирования используется скользящее окно длины W |
, которое со- |
стоит из двух частей (рис. 1): |
|
|
• |
из словаря длины N =W − n (последовательность закодированных сим- |
|
|
волов); |
|
• |
из буфера предварительного просмотра длины n (обычно n |
значительно |
|
меньше N ) |
|
...x |
x |
x |
x |
x |
x x |
x |
|
i −N −n |
i −n−1 |
i −n |
i −2 |
i −1 |
i i +1 |
i +2 |
|
|
|
|
|
||||
словарь |
|
буфер |
|
|
|
|
|
Рисунок 1 – Скользящее окно
Кодер LZ77 пытается найти в словаре фрагмент, максимально совпадающий с содержимым буфера, и выдает двоичные коды, состоящие из трех частей
•смещение в словаре относительно его начала подстроки, совпадающей с началом содержимого буфера;
•длина этой подстроки;
•первый символ буфера, следующий за подстрокой.
Затем окно смещается на длину закодированной подстроки символов вправо и осуществляется переход к новому циклу кодирования. Итоговая длина полу-
16
ченного кода зависит от характеристик кодирования, т.е. величины словаря и буфера, а также от кодировки символов входного текста.
Пример. Рассмотрим процесс кодирования фразы «abbbacacacb» алгоритмом LZ77. Пусть размер словаря N = 8 символов, размер буфера n = 3 . Содержимое словаря и буфера в процессе кодирования представлено в таблице 5.
Таблица 5 – Кодирование алгоритмом LZ77 последовательности «abbbacacacb»
|
|
Словарь (длина 8) |
|
|
Буфер (длина 3) |
Код |
||||||
1 |
|
|
|
|
|
|
|
|
a |
b |
b |
<0,0,’a’> |
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
a |
b |
b |
b |
<0,0,’b’> |
3 |
|
|
|
|
|
|
a |
b |
b |
b |
a |
<1,1,’b’> |
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
|
|
|
|
a |
b |
b |
b |
a |
c |
a |
<0,1,’c’> |
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
|
|
a |
b |
b |
b |
a |
c |
a |
c |
a |
<4,2,’a’> |
6 |
b |
b |
b |
a |
c |
a |
c |
a |
c |
b |
eos |
<6,1,’b’> |
1.На первом шаге словарь пуст, а в буфере находятся первые 3 символа кодируемой строки. Сначала осуществляется поиск в словаре символа «a». Символ не найден, поэтому в качестве кода передается тройка <0,0,’a’> (0 как признак того, что нет совпадения между буфером и словарем, 0 – длина найденной строки в словаре и двоичное представление символа «a»). Окно сдвигается вправо на один закодированный символ.
2.Словарь содержит один уже закодированный символ «a», буфер – «bbb». В словаре ищется подстрока, начинающаяся на символ «b». Такой строки в словаре нет, поэтому передается код <0,0,’b’> (0 как признак того, что этого символа нет в словаре, 0 – длина найденной строки в словаре и двоичное представление символа «b»). Окно сдвигается вправо на один символ.
3.Словарь содержит два ранее закодированных символа “ab”, буфер – «bba». В словаре ищется подстрока, совпадающая с началом буфера, т.е. начинающаяся на символ «b». Очевидно, это подстрока “b”, кодер выдает двоичный код <1,1,’b’> (1 – это позиция начала совпадения буфера и словаря относительно начала словаря, 1 – длина совпадающей части и двоичное представление символа «b» как символа, который следует за совпадающей частью буфера). Окно сдвигается вправо на два закодированных символа.
4.Словарь содержит строку «abbb», буфер – «aca». В словаре ищется подстрока, совпадающая с началом буфера. Такая подстрока имеется в словаре, она начинается с символа с номером 0 (нумерация символов в сло-
17
варе начинается с 0 слева направо в непустой части словаря) и длина совпадающей подстроки 1, после совпадающей части «a» в буфере находится символ «c». Поэтому в качестве кода передается <0,1,’c’>. Окно сдвигается вправо на два символа.
5.Словарь содержит строку «abbbac», буфер – «aca». В словаре ищется подстрока, совпадающая с началом буфера. Такая подстрока имеется в словаре, она начинается с символа с номером 4 и длина совпадающей подстроки 2, после совпадающей части «ac» в буфере находится символ «a». Поэтому в качестве кода передается <4,2,’a’>. Окно сдвигается вправо на три символа.
6.Словарь содержит строку «bbbacaca», буфер – «cb», при сдвиге скользящего окна символы, закодированные на первых шагах кодирования были вытолкнуты из окна. В словаре ищется подстрока, совпадающая с началом буфера. Такая подстрока имеется в словаре, она начинается с символа с номером 6 и длина совпадающей подстроки 1, после совпадающей части «c» в буфере находится символ «a». Поэтому в качестве кода передается <6,1,’a’>. Окно сдвигается вправо на два символа, и процесс кодирования строки заканчивается.
Нетрудно видеть, что на каждом шаге алгоритма длина кода одинакова и определяется только размером словаря и размером буфера. В рассмотренном выше примере длина кодового слова равна 7 бит (3 бита для представления местоположения начала совпадающей части буфера и словаря, 2 бита для длины подстроки, 2 бита для кода символа, если считать, что всего 4 различных символов в алфавите), тогда общая длина кодовой последовательности составляет 42 бита.
При декодировании сообщения декодер выполняет практически те же действия со скользящим окном, что и кодер. Поскольку декодеру известны размеры буфера и словаря и, следовательно, длина кода на каждом шаге кодирования, то, считывая необходимое количество бит из декодируемого потока, декодер определяет местоположение и длину декодированной строки, а также код следующего символа. Затем окно сдвигается вправо на количество декодируемых символов.
В методе LZ77 на каждом шаге строится код, содержащий символ входного потока в несжатом виде. Кроме того, даже если символ отсутствует в буфере, код включает в себя положение и размер пустой строки. Модификация словарного метода LZSS, предложенная Сторером (Storer) и Жимански (Szymanski) в 1982 г., позволяет избежать указанных недостатков, и несколько снизить избыточность кода.
Идея этого алгоритма заключается в том, чтобы в начале каждого кодового слова указывать признак, будет ли передаваться местоположение и размер
18
подстроки из словаря или будет передаваться символ, который отсутствует в словаре. Алгоритм LZSS выдает коды, состоящие из следующих элементов:
•Однобитовый флаг F , который указывает, обнаружен ли в словаре фрагмент, совпадающий с содержимым буфера, или нет.
•Если F =1, то смещение в словаре относительно его начала подстроки, совпадающей с началом содержимого буфера и длину этой подстроки.
•Если F = 0 , то код первого символа буфера.
Затем окно смещается на длину закодированной подстроки символов вправо и осуществляется переход к новому циклу кодирования. Такой подход позволяет записывать символы в явном виде, когда соответствующий им код имеет большую длину и, следовательно, словарное кодирование только вредит, а также обрабатывать ни разу не встреченные до текущего момента символы.
Пример. Рассмотрим процесс кодирования фразы «abbbacacacb» алгоритмом |
|
LZSS. Пусть размер словаря N = 8 символов, размер буфера n = 3 |
. Содержимое |
буфера и словаря приведено в таблице 6. |
|
Таблица 6 – Кодирование алгоритмом LZSS последовательности «abbbacacacb»
|
|
Словарь (длина 8) |
|
|
Буфер (длина 3) |
Код |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
a |
b |
b |
0,’a’ |
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
a |
b |
b |
b |
0,’b’ |
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
a |
b |
b |
b |
a |
1,<1,1> |
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
|
|
|
|
|
a |
b |
b |
b |
a |
c |
1,<1,1> |
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
|
|
|
|
a |
b |
b |
b |
a |
c |
a |
1,<0,1> |
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
|
|
|
a |
b |
b |
b |
a |
c |
a |
c |
0,’с’ |
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
|
|
a |
b |
b |
b |
a |
c |
a |
c |
a |
1, <4,2> |
8 |
a |
b |
b |
b |
a |
c |
a |
c |
a |
c |
b |
1, <4,2> |
9 |
b |
b |
a |
c |
a |
c |
a |
c |
b |
|
|
1, <0,1> |
|
|
|
|
|
|
|
|
|
|
|
|
|
1.На первом шаге словарь пуст, а в буфере находятся первые 3 символа кодируемой строки. Сначала осуществляется поиск в словаре первого символа буфера. Символ не найден, поэтому в качестве кода передается код (0,’а’) (бит 0 как признак того, что символа нет в словаре, и двоичное представление символа «а»). Окно сдвигается вправо на один символ.
2.Словарь содержит один уже закодированный символ «а», буфер – «bbb». В словаре ищется подстрока, начинающаяся на символ «b». Такой подстроки нет в словаре, поэтому передается код (0, ‘b’) (бит 0 как признак того, что этого символа нет в словаре, и двоичное представление символа «b»). Окно сдвигается вправо на один символ.
19
3.Словарь содержит два закодированных символа «ab», буфер – «bba». В словаре ищется подстрока, максимально начинающаяся как буфер. Такая подстрока имеется в словаре, она начинается с символа с номером 1 (нумерация символов в словаре начинается с 0 слева направо в непустой части словаря) и длина совпадающей подстроки 1. Поэтому в качестве кода передается (1,<1,1>) (бит 1 как признак того, что подстрока найдена в словаре, 1 – номер символа, с которого начинается найденная подстрока, 1 – длина найденной строки в словаре). Окно сдвигается на один закодированный символ вправо.
4.Словарь содержит три закодированных символа «abb», буфер – «bac». В словаре ищется подстрока, максимально совпадающая с началом буфера. Такая подстрока имеется в словаре, она начинается с символа с номером 1 (нумерация символов в словаре начинается с 0 слева направо в непустой части словаря) и длина совпадающей подстроки 1). Поэтому в качестве кода передается (1,<1,1>), где бит 1 как признак того, что подстрока найдена в словаре, 1 – номер символа, с которого начинается найденная подстрока, 1 – длина найденной строки в словаре. Окно сдвигается вправо на один закодированный символ.
5.Словарь содержит четыре закодированных символа «abbb», буфер – «aca». В словаре ищется подстрока, максимально совпадающая с началом буфера. Такая подстрока имеется в словаре, с нее начинается словарь и длина совпадающей подстроки 1. Поэтому в качестве кода передается пара (1,<0,1>), где бит 1 – признак, что подстрока найдена в словаре, 0 – номер символа, с которого начинается найденная подстрока, 1
– длина найденной строки в словаре. Окно сдвигается на один закодированный символ вправо.
6.Словарь содержит строку «abbba», буфер – «caс». В словаре ищется подстрока, максимально совпадающая с началом буфера. Такой подстроки нет в словаре, поэтому в качестве кода передается пара (0,’с’), где бит 0 как признак того, что символа нет в словаре, и двоичное представление символа «с». Окно сдвигается вправо на один символ.
7.Словарь содержит строку «abbbас», буфер – «aca». В словаре ищется подстрока, максимально совпадающая с началом буфера. Такая подстрока имеется в словаре, длина совпадающей подстроки 2. Поэтому в качестве кода передается пара (1,<4,2>), где бит 1 – признак, что подстрока найдена в словаре, 4 – номер символа словаря, с которого начинается найденная подстрока, 2 – длина найденной строки в словаре. Окно сдвигается на два закодированных символов вправо.
20
