Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_лаб_раб_ТИК.doc
Скачиваний:
27
Добавлен:
10.11.2019
Размер:
687.62 Кб
Скачать

Алгоритм lzss

В 1982 г. Сторером (Storer) и Шиманским (Szimanski) на базе LZ77 был разработан алгоритм LZSS, который отличается от LZ77 производимыми кодами.

Код, выдаваемый LZSS, начинается с однобитного префикса, различающего собственно код от незакодированного символа. Код состоит из пары: смещение и длина, такими же как и для LZ77. В LZSS окно сдвигается ровно на длину найденной подстроки или на 1, если не найдено вхождение подстроки из буфера в словарь. Длина подстроки в LZSS всегда больше нуля, поэтому длина двоичного кода для длины подстроки - это округленный до большего целого двоичный логарифм от длины буфера.

Длина кода вычисляется следующим образом: длина подстроки не может быть больше размера буфера, а смещение не может быть больше размера словаря –1. Следовательно, длина двоичного кода смещения будет округленным в большую сторону n=log2(размер словаря), а длина двоичного кода для длины подстроки будет округленным в большую сторону m=log2(размер буфера). Каждый символ кодируется 8 битами (например, ASCII+). Т.е., для кодирования каждой подстроки исходного сообщения нужно n+m+8 бит.

Пример: Закодировать сообщение «Иванов Иван Иванович» с помощью метода LZSS с размеров буфера и словаря 8 и 5 символов соответственно.

Словарь (8)

Буфер (5)

Код

И

В

А

Н

О

0 ’И’

И

В

А

Н

О

В

0 ’В’

И

В

А

Н

О

В

_

0 ’А’

И

В

А

Н

О

В

_

И

0 ’Н’

И

В

А

Н

О

В

_

И

В

0 ’О’

И

В

А

Н

О

В

_

И

В

А

1 <4,1>

И

В

А

Н

О

В

_

И

В

А

Н

0 ’_’

И

В

А

Н

О

В

_

И

В

А

Н

_

1 <1,4>

Н

О

В

_

И

В

А

Н

_

И

В

А

Н

1 <3,5>

В

А

Н

_

И

В

А

Н

О

В

И

Ч

0 ’О’

А

Н

_

И

В

А

Н

О

В

И

Ч

1 <4,1>

Н

_

И

В

А

Н

О

В

И

Ч

1 <2,1>

_

И

В

А

Н

О

В

И

Ч

0 ‘Ч’

Длина исходного сообщения: бит

Длина закодированного сообщения: бит

% сжатия:

Задание:

1. Закодировать строку, состоящую из фамилии, имени, отчества, образованных от фамилии. Длину буфера и словаря подобрать так, чтобы кодирование было эффективным. Вычислить длину исходного сообщения и длину кода в битах. Вычислить процент сжатия.