
- •Донецк, 2009
- •Лабораторная работа №1 Кодирование информации в компьютере Вещественные числа
- •Целые числа
- •Символьная информация
- •Задания:
- •Лабораторная работа №2 Арифметические операции над целыми числами Сложение и вычитание
- •Умножение и деление
- •Арифметические действия над нормализованными числами
- •Сложение и вычитание
- •Задания
- •Лабораторная работа №3 Способы измерения информации
- •Задания
- •Лабораторная работа №4 Сжатие информации. Алгоритм Шеннона-Фэно
- •Лабораторная работа №5 Сжатие информации. Алгоритм Хаффмена
- •Лабораторная работа №6 Сжатие информации. Арифметическое кодирование
- •Лабораторная работа № 7 Сжатие информации. Словарно-ориентированные алгоритмы (lz77, lzss)
- •Алгоритм lzss
- •Литература cодержание
Алгоритм 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. Закодировать строку, состоящую из фамилии, имени, отчества, образованных от фамилии. Длину буфера и словаря подобрать так, чтобы кодирование было эффективным. Вычислить длину исходного сообщения и длину кода в битах. Вычислить процент сжатия.