Федеральное государственное автономное образовательное учреждение высшего образования «Санкт-Петербургский государственный электротехнический университет «ЛЭТИ» им. В.И. Ульянова (Ленина)» Кафедра информационных систем ОТЧЕТ по практической работе № 7 по дисциплине «Теория информации» Тема: Словарное кодирование. Метод LZW Выполнил: Васеха Д.А. Группа: 8894 Преподаватель: Писарев И.А. “Выполнено” “___” __________ Подпись преподавателя __________ Санкт-Петербург, 2022 1) Письменно ответить на вопросы: 1) В чем состоит особенность методов словарного кодирования; 2) Дайте сравнительную характеристику наиболее известных методов словарного кодирования (LZ77, LZ78, LZW); 3) Опишите метод Лемпеля-Зива-Велча (LZW). 2) Решить задачи: 1. Закодировать сообщение методом LZW. Опишите выполненные шаги алгоритма кодирования. Какое значение степени сжатия получено? bbbbbbbbbb 2. Закодировать сообщение методом LZW. Опишите выполненные шаги алгоритма кодирования. Какое значение степени сжатия получено? DADAADAAA 2 Выполнение работы 1) Ответы на вопросы: 1. В чем состоит особенность методов словарного кодирования. Статистические методы компрессии используют статистическую модель данных, и качество сжатия информации напрямую зависит от того, насколько хороша была эта модель. Методы, основанные на словарном подходе, не рассматривают статистические модели, они также не используют коды переменной длины. Вместо этого они выбирают некоторые последовательности символов, сохраняют их в словаре, а все последовательности кодируются в виде меток, используя словарь. Словарь может быть статическим или динамическим (адаптивным). Первый является постоянным; иногда в него добавляют новые последовательности, но никогда не удаляют. Динамический словарь содержит последовательности, ранее поступившие из входного файла, при этом разрешается и добавление, и удаление данных из словаря по мере чтения входного файла. 2. Дайте сравнительную характеристику наиболее известных методов словарного кодирования (LZ77, LZ78, LZW). Метод LZ77 Этот алгоритм основывается на предположении, что похожие образцы сжимаемых данных находятся близко друг от друга. Если содержимое файла не удовлетворяет этому условию, то он будет сжиматься плохо. Простой пример - это текст, в котором слово «economy» встречается часто и равномерно распределено по всему тексту. Может случиться, что когда это слово попадает в упреждающий буфер, его предыдущая копия уже вышла из буфера просмотра. Более лучший алгоритм мог бы сохранять часто встречающиеся слова в словаре, а не сдвигал бы их все время. Другой недостаток метода - это ограниченные размеры упреждающего буфера. Размер совпадающей строки лимитирован числом L — 1, но L приходится держать маленьким, так как процесс сравнения строк основан на сравнении индивидуальных символов. Если удвоить L, то степень сжатия могла бы возрасти, но одновременно с этим произойдет замедление процесса поиска совпадений. Размер S буфера поиска тоже ограничен. Большой буфер поиска мог бы тоже улучшить компрессию, но опять возрастет сложность поиска по дереву, даже двоичному. Увеличение буферов также означает удлинение меток, что сокращает фактор сжатия. Метод LZ78 Метод LZ78 (иногда его называют LZ2, см. [Ziv 78]) не использует буфер поиск, упреждающий буфер и скользящее окно. Вместо этого имеется словарь встретившихся ранее строк. В начале этот словарь пуст (или почти пуст), и размер этого словаря ограничен только объемом доступной памяти. На выход кодера поступает последовательность меток, состоящих из двух полей. Первое поле -это указатель на строку в словаре, а второе - код символа. Метка не содержит длины строки, поскольку строка берется из словаря. Каждая метка соответствует последовательности во входном файле, и эта последовательность добавляется в словарь после того, как метка записана в выходной сжатый файл. Ничего из словаря не удаляется, что является одновременно и 3 преимуществом над LZ77 (поскольку будущие строки могут совпадать даже с очень давними последовательностями) и недостатком (так как быстро растет объем словаря). Метод LZW Его главной особенностью является удаление второго поля из метки. Метка LZW состоит только из указателя на место в словаре. Алгоритмы LZ77 и LZ78 уступают алгоритму LZW. В методе LZW первым делом инициализируется словарь всеми символами исходного алфавита. Поскольку словарь уже частично заполнен, первые поступившие символы всегда будут обнаружены в словаре, и поэтому метка может состоять только из указателя, и не нужно хранить код символа, к в алгоритмах LZ77 и LZ78. 3. Опишите метод Лемпеля-Зива-Велча (LZW). Алгоритм Лемплея-Зива-Велча [1, С.66-68]: Последовательно считываются символы входного потока и происходит проверка, существует ли в созданной таблице строк такая строка. Если такая строка существует, считывается следующий символ, а если строка не существует, в поток заносится код для предыдущей найденной строки, строка заносится в таблицу, а поиск начинается снова. Последовательность: 1. Инициализация словаря всеми возможными одно символьными фразами; 2. Инициализация входной фразы ω первым символом сообщения; 3. Считать очередной символ K из кодируемого сообщения; 4. Если КОНЕЦ_СООБЩЕНИЯ, то выдать код для ω, иначе, если фраза ω(K) уже есть в словаре, присвоить входной фразе значение ω(K) и перейти к Шагу 3, иначе выдать код ω, добавить ω(K) в словарь, присвоить входной фразе значение K и перейти к Шагу 3; 5. Конец. 4 2) Задачи: 1) Закодировать сообщение методом LZW. Опишите выполненные шаги алгоритма кодирования. Какое значение степени сжатия получено? bbbbbbbbbb 0: b Вывод Текущая Текущий Следующий строка символ символ Код Биты Словарь bb b b 0 000 1: bb bb b b - - - bbb b b 1 001 2: bbb bb b b - - - bbb b b - - - bbbb b b 2 010 3: bbbb bb b b - - - bbb b b - - - bbbb b b - - - bbbb b - 3 011 - Ответ: 0 1 2 3 Наше закодированное сообщение «0123», что на 2 бита короче. Коэффициент сжатия K = 4 10 ∗ 100 = 40% 5 2) Закодировать сообщение методом LZW. Опишите выполненные шаги алгоритма кодирования. Какое значение степени сжатия получено? DADAADAAA 0: A 1: D Вывод Текущая Текущий Следующий строка символ символ Код Биты Словарь DA D A 1 001 2: DA AD A D 0 000 3: AD DA D A - - - DAA A A 2 010 4: DAA AD A D - - - ADA D A 3 011 5: ADA AA A A 0 000 6: AA AA A A - - - AA A - 6 110 - Ответ: 1 0 2 3 0 6 Наше закодированное сообщение «102306», что на 5 бита короче. 6 Коэффициент сжатия K = ∗ 100 = 66% 9 6 СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 1. Гошин Е.В. Теория информации и кодирования: учеб, пособие / Е.В. Гошин – Самара: Изд-во Самарского университета, 2018. - 124 с. 2. Д.Сэломон. Сжатие данных, изображений и звука М.: Техносфера, 2004. – 368с. 7