Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «Кемеровский Государственный Университет» (КемГУ) Кафедра фундаментальной О.Г. Багина Методы сжатия информации без потерь Кемерово 2015 Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 1 / 107 Содержание 1 Введение Актуальность, принципы, характеристики Общее описание методов сжатия без потерь 2 Статистические методы Алгоритм Хаффмана Арифметическое сжатие Метод Шеннона-Фано 3 RLE - сжатие 4 Словарные методы Алгоритм LZ77 Алгоритм LZSS Алгоритм LZ78 Алгоритм LZW 5 Ответы к упражнениям 6 Литература Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 2 / 107 Актуальность Необходимость сжатия информации появилась с тех пор, как появились массивы информации, которые следовало как-то хранить и передавать. Поэтому проблема компактного хранения и быстрой передачи информации актуальна с достаточно давних времен. С ростом информационных технологий растут и объемы информации, поэтому в наши дни эта проблема стоит особенно остро. Целью сжатия цифровой информации является экономия места на каком-либо носителе цифровой информации: жестком или гибком магнитном диске. Для решения данной проблемы было разработано большое число алгоритмов и методов. Созданные алгоритмы реализовывались в специальных программах-архиваторах. Архиваторы — это программы для создания архивов, содержащих какую-либо цифровую информацию. Архивы предназначены для хранения информации в удобном компактном виде и для быстрой ее передачи. В качестве данных в архивах обычно выступают файлы и папки. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 3 / 107 Актуальность Первые теоретические разработки в области сжатия информации появились в конце 40-х годов XX века. Немного позже появились работы Шеннона, Фано и Хаффмана. С развитием и распространением интернета, а также в связи с увеличением объема цифровой информации необходимость сжатия информации еще более возросла. Пропускная способность каналов связи является более дорогостоящим ресурсом, чем дисковое пространство, поэтому сжатие информации до или во время ее передачи еще более актуально, чем просто хранение информации. В этом случае целью сжатия информации является экономия пропускной способности, а в конечном итоге ее увеличение. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 4 / 107 Принципы сжатия 1 У всякого сжатия есть предел. Сжатие ранее сжатого файла в лучшем случае не дает выигрыша, а в худшем случае может привести и к проигрышу в размере полученного файла. Поэтому прежде чем сжимать информацию, хорошо бы знать, не была ли она до этого сжата другими средствами. 2 Для всякого метода сжатия можно подобрать файл, применительно к которому данный метод является наилучшим. Справедливо и обратное: для всякого метода сжатия можно подобрать файл, который в результате сжатия не уменьшится, а наоборот увеличится. 3 Наилучшие программы-архиваторы до начала работы должны выполнять предварительный просмотр обрабатываемых файлов и выбирать тот метод упаковки, который в данном случае дает наилучший результат. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 5 / 107 Технические характеристики процессов сжатия Степень сжатия (compress rating) – это отношение объемов исходного потока к результирующему: худшая степень – доля, на которую возрастет сообщение, если исходные данные будут наихудшими; средняя степень – некая среднестатистическая степень для того класса данных, на который ориентирован алгоритм; лучшая степень – максимальная степень сжатия для того класса данных, на который ориентирован алгоритм. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 6 / 107 Технические характеристики процессов сжатия Скорость сжатия – время, которое затрачивается на сжатие некоторого объема информации входного потока, для получения из него эквивалентного сжатого выходного потока. Качество сжатия – величина, которая показывает на сколько сильно упакован выходной поток, при помощи применения к нему повторного сжатия по этому же или иному алгоритму. Симметричность – отношение характеристики алгоритма кодирования к аналогичной характеристике при декодировании. Характеризует ресурсоемкость процессов кодирования и декодирования. Симметричность по времени – отношение времени кодирования ко времени декодирования. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 7 / 107 Методы сжатия информации Два класса методов сжатия информации: сжатие с потерей информации сжатие без потери информации Сжатие с потерей информации означает, что после распаковки уплотненного архива мы получим документ, который несколько отличается от того, который был в самом начале. Чем больше степень сжатия, тем больше величина потери и наоборот. Величиной допустимой потери при сжатии обычно можно управлять. Это позволяет экспериментировать и добиваться оптимального соотношения размер/качество. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 8 / 107 Методы сжатия информации Такие алгоритмы неприменимы для текстовых документов, таблиц баз данных и особенно для программ. В то же время, существуют материалы, в которых стоит пожертвовать несколькими процентами информации, чтобы получить сжатие в десятки раз. К ним относятся фотоизображения, видеоматериалы и аудиоинформация. Такое сжатие дает огромный выигрыш в размерах файлов (в 10-15 раз на аудиофайлах, в 20-30 раз на фото- и видеоматериалах). К алгоритмам сжатия с потерей информации относятся такие известные алгоритмы как JPEG (используется при сжатии фотоизображений) и алгоритмы MPEG (используются при сжатии видео и музыки). Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 9 / 107 Методы сжатия информации Методы сжатия без потерь информации применяют в основном при передаче текстовых документов и программ. Методы сжатия этого класса не могут допустить утрату информации, поэтому они основаны только на устранении ее избыточности, а информация имеет избыточность почти всегда. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 10 / 107 Методы сжатия информации без потерь Методы сжатия информации без потерь можно условно разделить на три группы: статистическое кодирование; кодирование длин повторов; динамическое кодирование на основе предварительно созданного словаря. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 11 / 107 Статистические методы Идея Если в сообщении часто встречаемые символы представлять короткими кодами, а редко встречаемые – длинными кодами, то для хранения этого сообщения требуется меньший объем памяти, чем если бы все символы представлять кодами одинаковой длины. Связь между вероятностями появления символов и размерами их кодов установлена в теореме Шеннона. Теорема Шеннона. Элемент a, вероятность появления которого равняется p(a), выгоднее всего представлять −log2 p(a) битами. Если при кодировании последовательности символов размер кодов символов всегда в точности получается равным −log2 p(a) битам, то в этом случае длина закодированной последовательности будет минимальной для всех возможных способов кодирования. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 12 / 107 Статистические методы Основные принципы алгоритмы присваивают каждому входному символу определенный код; наиболее часто используемому символу присваивается наиболее короткий код, а наиболее редкому – более длинный; таблицы кодирования создаются заранее и имеют ограниченный размер. Статистические методы 1 Алгоритм Хаффмана 2 Арифметическое сжатие 3 Метод Шеннона-Фано Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 13 / 107 Кодирование длин повторов Методы на основе кодирования длин повторов (RLE) одни из самых простых и достаточно мало эффективных в большинстве случаев методов сжатия информации. Они заменяет цепочки повторяющихся символов на код символа и число повторов либо цепочки повторяющихся последовательностей на код последовательности и число повторов. Данные алгоритмы могут, например, применяться для сжатия файлов в формате BMP. Иногда данные алгоритмы применяются в качестве вспомогательных методов на промежуточном этапе. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 14 / 107 Динамические методы Методы на основе динамического кодирования являются альтернативой статистическим методам. Такие методы также называют словарными, в основном они базируется на последовательной схеме сжатия Лемпеля-Зива – группа LZ. Основные принципы алгоритмы основаны на динамически изменяемом словаре; поток символов заменяется кодами, записанными в памяти в виде словаря (таблицы кодирования); таблицы кодирования периодически меняются. Динамические методы 1 LZ77 2 LZSS 3 LZ78 4 LZW Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 15 / 107 Канонический алгоритм Хаффмана Алгоритм является одним из старейших алгоритмов сжатия. Он предложен Дэвидом Хаффманом (David Huffman) в 1952 году. Особенности кодирует символы, которые встречаются чаще, меньшим числом бит, чем те, которые встречаются реже; для сбора статистики требует двух проходов по входному блоку; на входе получает таблицу частот встречаемости символов в сообщении; строит бинарное дерево (дерево кодирования Хаффмана или H-дерево); на выходе строит префиксный код. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 16 / 107 Канонический алгоритм Хаффмана Бинарное дерево Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 17 / 107 Алгоритм построения H-дерева Шаг 1 В процессе первого прохода по входящему сообщению подсчитываются частоты символов сообщения. Символы входного алфавита образуют список свободных узлов (вершин дерева). Каждый лист αi (вершина степени 1) имеет частоту kαi (или вес, или вероятность). Символы αi упорядочиваются в порядке неубывания весов {(α1 )kα1 , . . . , (αm )kαm }, kα1 ≤ kα2 ≤ . . . ≤ kαm . Шаг 2 Выбираются 2 свободных узла дерева с наименьшими весами (α1 )kα1 , (α2 )kα2 . Создается их родитель с весом, равным их суммарному весу (α1 , α2 )kα1 +kα2 . Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 18 / 107 Алгоритм построения H-дерева Шаг 3 Родитель добавляется в список свободных узлов, а двое его детей удаляются из списка. Новый список узлов упорядочивается в порядке неубывания весов. Шаг 4 Одному ребру, выходящему из родителя к детям, ставится в соответствие бит 1, другому – бит 0 (обычно, левое ребро -0, правое – 1). Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 19 / 107 Алгоритм построения H-дерева Шаг 5 Шаги 2-4, повторяются до тех пор, пока в списке свободных узлов не останется только один свободный узел. Он и будет считаться корнем дерева. Шаг 6 Каждому элементу αi ставится в соответствие код длиной, равной числу ребер от листа αi к корню H-дерева. Каждый элемент кода равен 0 или 1. Формирование кода идет, начиная с ребра, идущего из корня. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 20 / 107 Построение выходного сообщения При повторном проходе по сообщению символы заменяются на соответствующие коды. В результате получаем последовательность из 0 и 1. Кроме закодированного сообщения выходной файл содержит таблицу кодов или частот символов. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 21 / 107 Пример алгоритма Хаффмана, кодирование Сообщение ccceacbcdaaabdeecdcddcccceecccccccc Таблица частот a 4 Багина О.Г. (КемГУ) b 2 c 19 d 5 e 5 Методы сжатия информации без потерь 2015 22 / 107 Пример алгоритма Хаффмана, кодирование Списки свободных узлов H-дерево {b2 , a4 , d5 , e5 , c19 } {d5 , e5 , (b, a)6 , c19 } {(b, a)6 , (d, e)10 , c19 } {(b, a, d, e)16 , c19 } {(b, a, d, e, c)35 } Таблица кодов a – 001 b – 000 Багина О.Г. (КемГУ) c–1 d – 010 e – 011 Методы сжатия информации без потерь 2015 23 / 107 Пример алгоритма Хаффмана, кодирование Сообщение ccceacbcdaaabdeecdcddcccceecccccccc Закодированное сообщение 111011001100010100010010010000100 110111010101001011101101111111111 Степень сжатия Объем входящего сообщения: 35 · 8 = 280 бит (35 символов по 8 бит) Объем закодированного сообщения: 67 бит (число нулей и единиц) Объем таблицы кодов: 5 · 8 + 13 = 53 бита (объем символов и кодов) Общий объем выходного сообщения после архивации: 67 + 53 = 120 бит Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 24 / 107 Пример алгоритма Хаффмана, декодирование При декодировании проходим по закодированному сообщению и, согласно таблице кодов, заменяем коды на символы. Сообщение ccceacbcdaaabdeecdcddcccceecccccccc Закодированное сообщение 111011001100010100010010010000100 110111010101001011101101111111111 Процесс декодирования 1 c 1 c 1 c 011 e Багина О.Г. (КемГУ) ... ... 1 c 1 c Методы сжатия информации без потерь 2015 25 / 107 Характеристики алгоритма Хаффмана Степени сжатия 8, 1.5, 1 (лучшая, средняя, худшая степени). Симметричность по времени 2:1 (за счет того, что требует двух проходов по массиву сжимаемых данных). Использование Практически не применяется в чистом виде. Обычно используется как один из этапов компрессии в более сложных схемах, например, на последних стадиях при сжатии изображений JPEG методом. Характерные особенности Прост в реализации, занимает мало времени и объема оперативной памяти. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 26 / 107 Упражнения 1. Закодируйте сообщения с помощью алгоритма Хаффмана и вычислите объемы входящих и выходящих сообщений: (1) сорворсорт (2) сор_тор_вор_сорт_рот Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 27 / 107 Арифметическое сжатие Элиас (Alieas), 60-е годы XX века. В дальнейшем усовершенствован Ришаненом (Rissanen). Идея Для сбора статистики требует двух проходов по входному блоку. На входе получает таблицу частот символов в сообщении. Затем вычисляются вероятность и диапазон для каждого символа. На выходе информация представляется дробным числом из интервала [0; 1) в виде последовательности двоичных цифр, которыми записывается эта дробь. По мере кодирования информации, интервал уменьшается, а количество битов на его представление возрастает. Очередные символы текста сокращают величину интервала исходя из значений их вероятностей: более вероятные символы сокращают интервал в меньшей степени, чем менее вероятные, поэтому добавляют меньше битов к результату. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 28 / 107 Пример арифметического сжатия, кодирование Сообщение ABCDABEBCF Таблица частот символ B A C E F D частота 3 2 2 1 1 1 вероятность 0,3 0,2 0,2 0,1 0,1 0,1 диапазон [0,0; 0,3) [0,3; 0,5) [0,5; 0,7) [0,7; 0,8) [0,8; 0,9) [0,9; 1) Частоты символов передаются в компрессор и декомпрессор. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 29 / 107 Пример: ABCDABEBCF Для каждого символа входящего сообщения создается рабочий интервал [li ; hi ) ⊂ [0; 1), который зависит от предыдущего рабочего интервала и от диапазона самого символа. Вычисляется длина интервала Li = hi − li . Пусть текущий символ имеет диапазон [a; b), а [li−1 ; hi−1 ) – предыдущий рабочий интервал, тогда новый рабочий интервал вычисляется по формуле: [li , hi ) = [li−1 + Li−1 · a; li−1 + Li−1 · b). Создание рабочих интервалов Исходный рабочий интервал [l0 , h0 ) = [0, 1), L0 = 1 − 0 = 1. Символ «A». Диапазон: [a; b) = [0, 3; 0, 5). Рабочий интервал: [l1 , h1 ) = [0 + 1 · 0, 3; 0 + 1 · 0, 5) = [0, 3; 0, 5). L1 = 0, 5 − 0, 3 = 0, 2. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 30 / 107 Пример: ABCDABEBCF Создание рабочих интервалов Символ «B». Диапазон: [a; b) = [0, 0; 0, 3). Рабочий интервал: [l2 , h2 ) = [0, 3 + 0, 2 · 0, 0; 0, 3 + 0, 2 · 0, 3) = [0, 3; 0, 36). L2 = 0, 36 − 0, 3 = 0, 06. Символ «C». Диапазон: [0, 5; 0, 7). Рабочий интервал: [l3 , h3 ) = [0, 3 + 0, 06 · 0, 5; 0, 3 + 0, 06 · 0, 7) = [0, 33; 0, 342). L3 = 0, 342 − 0, 32 = 0, 012. Символ «D». Диапазон: [0, 9; 1). Рабочий интервал: [l4 , h4 ) = [0, 33 + 0, 012 · 0, 9; 0, 33 + 0, 012 · 1) = [0, 3408; 0, 342). L4 = 0, 342 − 0, 3408 = 0, 0012. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 31 / 107 Пример: ABCDABEBCF Создание рабочих интервалов Символ «A». Диапазон: [0, 3; 0, 5). Рабочий интервал: [l5 , h5 ) = [0, 3408 + 0, 0012 · 0, 3; 0, 3408 + 0, 0012 · 0, 5) = [0, 34116; 0, 3414). L5 = 0, 00024. ... Символ «F». Диапазон: [0, 8; 0, 9). Рабочий интервал: [l10 , h10 ) = [0, 34121148 + 0, 000000432 · 0, 8; 0, 34121148 + 0, 000000432 · 0, 9) = [0, 3412118256; 0, 3412118688). L10 = 0, 0000000432. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 32 / 107 Пример: ABCDABEBCF Графически процесс кодирования первых символов можно представить так: Полученный интервал: [0, 3412118256; 0, 3412118688). Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 33 / 107 Пример: ABCDABEBCF В качестве выходного сообщения берут левую границу полученного интервала. Именно эта граница зависит от порядка следования символов в потоке. Ее достаточно для восстановления исходного сообщения, если известна исходная таблица частот. Закодированное сообщение 0, 3412118256 Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 34 / 107 Пример: ABCDABEBCF Объем выходящего сообщения удобно вычислять по теореме Шеннона, хотя полученное значение не Pвсегда достигается. Объем представляется в виде суммы (−log2 p(ai )), где p(ai ) – вероятность символа ai . Полученное число округляем до целого. Объем входящего сообщения: 10*8=80 бит. Объем таблицы частот: 6*8+3*4+2*2=64 бит. Объем выходящего сообщения: −log2 (0, 3) · 3 − log2 (0, 2) · 4 − log2 (0, 1) · 3 = 24, 46439 ≈ 25 бит. Общий объем выходящего сообщения после архивации: 25+64=89 бит. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 35 / 107 Процедура сжатия Если обозначить диапазон символа c как [a[c]; b[c]), а интервал i-го кодируемого символа как [li , hi ),то алгоритм сжатия может быть записан следующим образом. l0 = 0; h0 = 1; i = 0; while (not DalaFile.EOF()) { c=DataFile.ReadSymbol(); i + +; li = li−1 + a[c] · (hi−1 − li−1 ); hi = li−1 + b[c] · (hi−1 − li−1 ); }; Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 36 / 107 Пример: ABCDABEBCF (распаковка) При декодировании на входе алгоритм получает закодированное сообщение 0, 3412118256 и таблицу частот символов входного алфавита {B, A, C , E , F , D}. По таблице частот алгоритм вычисляет диапазоны символов, а затем само закодированное сообщение. Таблица частот символ B A C E F D Багина О.Г. (КемГУ) частота 3 2 2 1 1 1 вероятность 0,3 0,2 0,2 0,1 0,1 0,1 диапазон [0,0; 0,3) [0,3; 0,5) [0,5; 0,7) [0,7; 0,8) [0,8; 0,9) [0,9; 1) Методы сжатия информации без потерь 2015 37 / 107 Пример: ABCDABEBCF (распаковка) Шаг 1: выбор первого символа Каждый следующий интервал вложен в предыдущий. Это означает, что если есть число x = 0, 3412118256, то первым символом в цепочке может быть только «A», поскольку, только его диапазон [0, 3; 0, 5) включает это число. Этот интервал становится рабочим. Далее на каждом шаге при определении следующего символа создаются вспомогательные интервалы для всех символов входного алфавита {B, A, C , E , F , D}. Затем из этих интервалов выбирается нужный рабочий интервал, содержащий число x, и символ, соответствующий найденному интервалу. Вспомогательные интервалы создаются по той же формуле, которая использовалась при сжатии: [li , hi ) = [li−1 + Li−1 · a; li−1 + Li−1 · b). Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 38 / 107 Пример: ABCDABEBCF (распаковка) Шаг 2: выбор второго символа Число x ∈ [l1 ; h1 ) = [0, 3; 0, 5). Первый символ «A», L1 = 0, 2. «B» Диапазон [0, 0; 0, 3). Интервал [0, 3 + 0, 2 · 0, 0; 0, 3 + 0, 2 · 0, 3) = [0, 3; 0, 36). «A» Диапазон [0, 3; 0, 5). Интервал [0, 3 + 0, 2 · 0, 3; 0, 3 + 0, 2 · 0, 5) = [0, 36; 0, 4). «C» Диапазон [0, 5; 0, 7). Интервал [0, 3 + 0, 2 · 0, 5; 0, 3 + 0, 2 · 0, 7) = [0, 4; 0, 44). «E» Диапазон [0, 7; 0, 8). Интервал [0, 3 + 0, 2 · 0, 7; 0, 3 + 0, 2 · 0, 8) = [0, 44; 0, 46). «F» Диапазон [0, 8; 0, 9). Интервал [0, 3 + 0, 2 · 0, 8; 0, 3 + 0, 2 · 0, 9) = [0, 46; 0, 48). «D» Диапазон [0, 9; 1]. Интервал [0, 3 + 0, 2 · 0, 9; 0, 3 + 0, 2 · 1) = [0, 48; 0, 5). Так как x ∈ [0, 3; 0, 36), то следующий после «A» идет символ «B». Рабочий интервал [l2 ; h2 ) = [0, 3; 0, 36), L2 = 0, 06. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 39 / 107 Пример: ABCDABEBCF (распаковка) Шаг 3: выбор третьего символа «B» Диапазон [0, 0; 0, 3). Интервал [l2 + L2 · a; l2 + L2 · b) = [0, 3 + 0, 06 · 0, 0; 0, 3 + 0, 06 · 0, 3) = [0, 3; 0, 318). «A» Диапазон [0, 3; 0, 5). Интервал [0, 3 + 0, 06 · 0, 3; 0, 3 + 0, 06 · 0, 5) = [0, 318; 0, 33). «C» Диапазон [0, 5; 0, 7). Интервал [0, 3 + 0, 06 · 0, 5; 0, 3 + 0, 06 · 0, 7) = [0, 33; 0, 342). «E» Диапазон [0, 7; 0, 8). Интервал [0, 3 + 0, 06 · 0, 7; 0, 3 + 0, 06 · 0, 8) = [0, 342; 0, 348). «F» Диапазон [0, 8; 0, 9). Интервал [0, 3 + 0, 06 · 0, 8; 0, 3 + 0, 06 · 0, 9) = [0, 348; 0, 354). «D» Диапазон [0, 9; 1]. Интервал [0, 3 + 0, 06 · 0, 9; 0, 3 + 0, 06 · 1) = [0, 354; 0, 36). Так как x ∈ [0, 33; 0, 342), то следующий после «B» идет символ «C». Рабочий интервал [l3 ; h3 ) = [0, 33; 0, 342), L3 = 0, 012. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 40 / 107 Пример: ABCDABEBCF (распаковка) «ABC» следующие шаги Продолжая таким же образом, получаем исходное сообщение. При этом продолжать нужно до тех пор, пока левая граница текущего интервала не станет равной числу x. Сообщение «ABCDABEBCF». Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 41 / 107 Процедура распаковки Если обозначить диапазон символа cj как [a[cj ]; b[cj ]), а интервал i-го символа как [li , hi ),то алгоритм декомпрессии может быть записан следующим образом. l0 = 0; h0 = 1; value=File.Code(); for (i = 0; i <File.DataLength(); i + +) { for (all symbols cj ) { li = li−1 + a[cj ] · (hi−1 − li−1 ); hi = li−1 + b[cj ] · (hi−1 − li−1 ); If (li <= value < hi ) break; }; DataFile.Writesymbol(cj ); }; Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 42 / 107 Замечания по распаковке При использовании алфавита из 256 символов cj внутренний цикл выполняется достаточно долго, однако его можно ускорить. Заметим, что поскольку b[cj + 1] = a[cj ], то li для cj+1 равно hi для j , а последовательность границ hi для j строго возрастает с ростом j. Так как достаточно проверять только одну границу интервала, то количество операций во внутреннем цикле можно сократить вдвое. Если у нас мало символов, то, отсортировав их в порядке уменьшения вероятностей, мы сокращаем число итераций цикла и таким образом работу декомпрессора. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 43 / 107 Характеристики алгоритма Степени сжатия > 8, 2, 1 (лучшая, средняя, худшая степени). Симметричность по времени 2:1 (за счет того, что требует двух проходов по массиву сжимаемых данных). Использование Практически не применяется в чистом виде. Обычно используется как один из этапов компрессии в более сложных схемах, например, на последней стадии компрессии. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 44 / 107 Характеристики алгоритма Характерные особенности Позволяет сжимать несколько сильнее, чем алгоритм Хаффмана. Занимает достаточно много времени и объема оперативной памяти. Необходима вещественная арифметика неограниченной точности, в то время как математический сопроцессор компьютера обеспечивает точность порядка 19-20 значащих цифр. Результат становится известен лишь после полного просмотра и сжатия входного потока. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 45 / 107 Сравнение алгоритмов Пример Пусть есть 256 символов a или b. Вероятности: p(a) = 253/256 и p(b) = 3/256. Арифметическое сжатие Для арифметического сжатия мы должны потратить на цепочку из 256 байт −log2 (253/256) · 253 − log2 (3/256) · 3 = 23.546 ≈ 24 бита. Алгоритм Хаффмана При кодировании по Хаффману мы закодируем a и b как 0 и 1 и нам придется потратить 1 · 253 + 1 · 3 = 256 бит, т.е. в 10 раз больше. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 46 / 107 Упражнения 2. Закодируйте сообщения методом арифметического сжатия и вычислите объемы входящих и выходящих сообщений: (1) сорворсорт (2) сор_тор_вор_сорт_рот Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 47 / 107 Метод Шеннона-Фано Метод близок методу Хаффмана, но использует иной механизм генерации кодов. Алгоритм был независимо друг от друга разработан Шенноном в 1948 году и, позже, Фано. Особенности метода кодирует символы, которые встречаются чаще, меньшим числом бит, чем те, которые встречаются реже; для сбора статистики требует двух проходов по входному блоку; на входе получает таблицу частот встречаемости символов в сообщении; на выходе строит префиксный код. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 48 / 107 Метод Шеннона-Фано Этапы 1. Счетчик t := 0. Символы исходного алфавита упорядочиваются по невозрастанию частот. В результате получаем последовательность символов aij с частотами ij – G = (ai1 , ..., aiN ). В этой последовательности для всех j = 1, 2, . . . N − 1 ij ≥ ij+1 . 2. Счетчик t := t + 1. Рассматриваемую последовательность символов разбиваем на 2 группы, не меняя порядка следования символов. При этом суммарные частоты символов в каждой группе примерно были одинаковы. Получаем подпоследовательности G0 , G1 : G0 = (ai1 , . . . , aik ), G1 = (aik+1 , . . . , aiN ). 3. Формируем t-й символ кодовых слов: кодовым словам символов первой последовательности G0 дописывается 0, кодовым словам символов второй последовательности G1 дописывается 1. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 49 / 107 Метод Шеннона-Фано Этапы 4. Если некоторая последовательность Gi состоит из одного символа aj то для этого aj процесс построения кодового слова считается законченным. Для каждой из полученных последовательностей, содержащих по 2 и более символов, выполняем действия, соответствующие Шагу 2 и 3. В результате чего получаем очередные t-е символы кодовых слов. После просмотра всех последовательностей, осуществляется переход к Шагу 4. Процесс работы алгоритма заканчивается, когда все последовательности будут содержать ровно по одному символу исходного алфавита. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 50 / 107 Метод Шеннона-Фано Обратим внимание на особенности, которые нужно иметь в виду при реализации этого метода. Особенности При разбиении на группы не разрешается переставлять элементы последовательности с целью выравнивания сумм частот. Порядок, полученный на Шаге 1, сохраняется в течение всего времени работы алгоритма. Разбиение последовательностей на группы не всегда выполняется однозначным образом. Это связано с тем, что иногда некоторый «пограничный» символ ai может быть присоединён к любой из двух групп равноценным образом. Так как подобная ситуация может возникнуть несколько раз, то результат кодирования однозначно не определяется. Можно получить несколько равноценных между собой кодов для одного и того же сообщения. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 51 / 107 Метод Шеннона-Фано Особенности Следует на всех шагах придерживаться одного принципа приписывания символов кодового слова группам символов сообщения. Этот принцип приписывания необходимо зафиксировать до начала работы алгоритма. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 52 / 107 Пример метода Шеннона-Фано, кодирование Сообщение ABCDABEBCF Таблица частот символ B A C E F D частота 3 2 2 1 1 1 Частоты символов передаются в компрессор и декомпрессор. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 53 / 107 Пример метода Шеннона-Фано, кодирование Построение кодов Имеем невозрастающую последовательность G = (B3 , A2 , C2 , E1 , F1 , D1 ). Разбиваем последовательность на две группы G0 = (B3 , A2 ), G1 = (C2 , E1 , F1 , D1 ). Формируем 1-й символ кодовых слов: кодовым комбинациям символов группы G0 дописывается 0, кодовым комбинациям символов группы G1 дописывается 1. Разбиваем последовательность G0 на две группы G00 = (B3 ), G01 = (A2 ). Формируем 2-й символ кодовых слов группы G0 : кодовым комбинациям символов группы G00 дописывается 0, кодовым комбинациям символов группы G01 дописывается 1. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 54 / 107 Пример метода Шеннона-Фано, кодирование Построение кодов Разбиваем последовательность группы G1 на две группы G10 = (C2 , E1 ), G11 = (F1 , D1 ). Формируем 2-й символ кодовых слов группы G1 : кодовым комбинациям символов группы G10 дописывается 0, кодовым комбинациям символов группы G11 дописывается 1. В группах G00 и G01 по одному символу, следовательно разбиение этих групп заканчивается. Разбиваем последовательность группы G10 на две группы G100 = (C2 ), G101 = (E1 ). Формируем 3-й символ кодовых слов группы G10 : кодовым комбинациям символов группы G100 дописывается 0, кодовым комбинациям символов группы G101 дописывается 1. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 55 / 107 Пример метода Шеннона-Фано, кодирование Построение кодов Разбиваем последовательность группы G11 на две группы G110 = (F1 ), G111 = (D1 ). Формируем 3-й символ кодовых слов группы G11 : кодовым комбинациям символов группы G110 дописывается 0, кодовым комбинациям символов группы G111 дописывается 1. Все полученные группы содержат по одному символу, значит разбиение групп закончено, а следовательно закончено формирование кодовых слов. Таблица кодов B –– 00 A —- 01 Багина О.Г. (КемГУ) C –– 100 E –– 101 F –– 110 Методы сжатия информации без потерь D — 111 2015 56 / 107 Пример метода Шеннона-Фано, кодирование Кодирование Сообщение ABCDABEBCF Закодированное сообщение 0100100111010010100100110 Степень сжатия Объем входящего сообщения: 10*8=80 бит. Объем выходящего сообщения: 25 бит. Объем таблицы кодов: 6*8+3*4+2*2=64 бит. Общий объем выходящего сообщения после архивации: 25+64=89 бит. В разделе арифметическое сжатие был рассмотрен этот же пример. Объемы выходящих сообщений при архивировании этими методами совпадают. Процесс декодирования в методе Шеннона-Фано полностью совпадает с процессом декодирования методом Хаффмана. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 57 / 107 Упражнения 3. Закодируйте сообщения методом Шеннона-Фано и вычислите объемы входящих и выходящих сообщений: (1) сорворсорт (2) сор_тор_вор_сорт_рот Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 58 / 107 Метод сжатия — RLE Run Length Encoding (RLE) – кодирование длин повторов – один из самых старых и самых простых алгоритмов сжатия изображений без потерь. Позволяет сжимать данные любых типов, независимо от содержащейся в ней информации. Поддерживается большинством растровых форматов (tif, bmp и т.д). Распространенные форматы для упаковки данных с помощью RLE: PCX, PackBits и ILBM. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 59 / 107 RLE Идея Существует несколько модификаций алгоритма RLE. Один из первых методов заключается в следующем. Алгоритм уменьшает физический размер повторяющихся строк символов, идущих подряд в сообщении. Такие повторяющиеся символы называются группами и обычно кодируются в трех байтах. 1 байт – префикс, говорящий о том, что встретилась входная повторяющаяся последовательность (prefix); 2 байт определяет количество символов в группе и называется счетчиком группы (length); 3 байт содержит значение символов группы и называется значением группы (symbol). <prefix, length, symbol> В качестве префикса часто используется редко встречаемый символ, например, *. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 60 / 107 Пример RLE – сжатия, кодирование Входящее сообщение: аaaaabbbaddddddddddaaccccccc — 28 байт Выходящее сообщение: *5abbba*10daa*7c —- 15 байт Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 61 / 107 RLE Особенности Повторяющиеся данные были заменены символом-префиксом (*), числом повторов и самим символом. Префикс не фиксирован, он может отличаться в различных реализациях. Если символ, соответствующий префиксу, встречается в сжимаемом файле, он кодируется как отдельный символ. Таким образом, RLE сжатие эффективно для сжатия последовательностей, где одинаковые символы идут 4 и более раз подряд. Сжатие трех символов не приводит к уменьшению файла, а сжатие двух символов увеличивает его. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 62 / 107 Модификация алгоритма RLE Идея Последовательности повторяющихся символов ставить в соответствие пару, состоящую из двух файлов <длина последовательности; входной символ>. В данном алгоритме признаком счетчика служат единицы в двух верхних битах первого файла. Оставшиеся 6 бит расходуются на счетчик, который может принимать значения от 0 до 63. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 63 / 107 Характеристики алгоритма RLE Степени сжатия 64, 3, 128/129 (Лучший, средний, худший коэффициенты). Класс изображений Ориентирован алгоритм на изображения с небольшим количеством цветов: деловую и научную графику. Характерные особенности Положительные стороны алгоритма: не требует дополнительной памяти при архивации и разархивации; быстро работает. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 64 / 107 RLE схемы битового, байтового и пиксельного уровней Большинство форматов графических файлов в зависимости от уровня обрабатываемых данных выделяют 3 класса схем: RLE схемы битового уровня; RLE схемы байтового уровня; RLE схемы пиксельного уровня. Различие между этими способами кодирования заключается в формировании пакетов, соответствующих группам символов. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 65 / 107 RLE схемы битового уровня Принципы Схемы кодируют в группы биты строк входящего сообщения, игнорируя при этом границы байтов и слов. Используются только для обработки монохромных, т.е. однобитовых изображений, содержащих достаточное количество битовых групп. Кодируют в группу от 1 до 128 битов, создавая из них однобайтовые пакеты. 7 младших бит этого байта – это счетчик группы, старший бит содержит значение группы. однобайтовый пакет Значение (0/1) счетчик 7 6 5 4 3 2 Багина О.Г. (КемГУ) Методы сжатия информации без потерь 1 0 2015 66 / 107 RLE схемы битового уровня, примеры 100 пикселей черного цвета 1 байт черный 100 пикселей (99) 0 1 1 0 0 0 1 1 черн 0 200 пикселей черного цвета 1 байт 2 байт 128 пикселей (127) черн 72 пикселей (71) 1 1 1 1 1 1 1 0 0 0 1 1 0 1 1 Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 67 / 107 RLE схемы байтового уровня Принципы Кодируют в группы одинаковые байтовые значения. Используются для изображений, в которых каждый пиксель содержит 8 бит информации. Кодируют группы байтов в двухбайтовые пакеты: 1-ый байт — счетчик группы (0-255); 2-ой байт — значение группы (0-255). Существует схема 2-х байтового кодирования, позволяющая хранить в потоке закодированных данных литералы – незакодированные группы байтов. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 68 / 107 RLE схемы байтового уровня Схема 2-х байтового кодирования 1-ый байт. 7 младших битов содержат счетчик группы, а старший бит — тип группы: 1 – закодированная группа; 0 – литеральная группа (т.е. следующие байты должны читаться напрямую из закодированных данных изображения в количестве, указанном счетчиком группы +1). 2-ой байт — значение группы. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 69 / 107 RLE схемы байтового уровня, примеры тип 1 1 100 пикселей черного цвета 1 байт 2 байт счетчик = 99 значение – черный (0) 1 0 0 0 1 1 0 0 0 0 0 0 0 0 черный (0) тем. серый (70) серый (120) св. серый (200) В скобках указаны значения цветов в модели цветопредставления в градациях серого. тип 1 байт 2 байт 3 байт 4 байт 5 байт счетчик = 3 черн т. серый серый св. серый 0 0 0 0 0 0 1 1 0 70 120 200 Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 70 / 107 RLE схемы пиксельного уровня Применяется, когда для хранения одного пиксельного значения используется два или более байта. 100 пикселей синего цвета Счетчик значение – синий 99 0 0 255 7...0 7...0 7...0 7...0 1-ый байт -– счетчик (0-255); 2-ой байт — пиксель 1-го канала (0-255); 3-ой байт — пиксель 2-го канала (0-255); 4-ой байт — пиксель 3-го канала (0-255). Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 71 / 107 Упражнения 4. Закодировать сообщение nnnnnnnnnnnnnnnnnnDDfffddddddddddddLhhhhhhMaaaffff методом RLE и вычислить размеры входного и выходного сообщений: (1) кодами из трех байт с префиксом; (2) кодами из двух байт без префикса. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 72 / 107 Словарные методы Словарные методы базируются на последовательной схеме сжатия Лемпеля-Зива. Авторы – Якоб Зив (Jacob Ziv) и Абрахам Лемпель (Abraham Lempel). В 1977 г. «Универсальный алгоритм для последовательного сжатия данных». В дальнейшем на основе этого алгоритма были созданы другие алгоритмы. Все эти алгоритмы объединили в группу под названием LZ. Данные алгоритмы лежат в основе таких известных программ-архиваторов, как ARJ, PKZIP, Stacker и многих других. Принципы алгоритмы сжимают входной поток по мере поступления символов, не требуя для себя никакой предварительной информации о потоке; второе и последующее вхождения некоторой строки символов в сообщение заменяются ссылкой на ее первое появление в сообщении. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 73 / 107 Алгоритм LZ77 Алгоритм является родоначальником целого семейства словарных схем — алгоритмов со скользящим словарем, или со скользящим окном. LZ77 использует уже просмотренную часть сообщения как словарь. Чтобы добиться сжатия, он пытается заменить очередной фрагмент сообщения на указатель этого же фрагмента, хранящегося в словаре, если он повторяется. LZ77 использует «скользящее» по сообщению окно, разделенное на 2 неравные части. словарь просмотренная часть сообщения (несколько килобайт) Багина О.Г. (КемГУ) буфер незакодированные символы сообщения (менее 100 байт) Методы сжатия информации без потерь 2015 74 / 107 Алгоритм LZ77 Выдает коды, состоящие из 3-х элементов hi, j, symboli: i — смещение в словаре относительно начала подстроки, совпадающей с содержимым буфера (отсчет в словаре идет слева направо, начиная с нуля), либо 0, если совпадения нет; j — длина совпадающей подстроки, либо 0, если совпадения нет; symbol – первый символ в буфере, следующий за совпадающей подстрокой, либо текущий символ, если совпадения нет. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 75 / 107 Пример алгоритма LZ77, кодирование Будем использовать словарь, содержащий 8 позиций (0 . . . 7), и буфер, содержащий 5 позиций. При кодировании окно – словарь/буфер скользит по сообщению слева направо. Сообщение ABCDECFGABCDAC словарь (8) ........ .......A ......AB .....ABC ....ABCD ...ABCDE .ABCDECF ABCDECFG CFGABCDA Багина О.Г. (КемГУ) буфер (5) ABCDE BCDEC CDECF DECFG ECFGA CFGAB GABCD ABCDA C код 0,0,A 0,0,B 0,0,C 0,0,D 0,0,E 5,1,F 0,0,G 0,4,A 0,0,C Методы сжатия информации без потерь 2015 76 / 107 Пример алгоритма LZ77, кодирование Выходящее сообщение – 9 кодов 00A, 00B, 00C, 00D, 00E, 51F, 00G, 04A, 00C. Вычисляя объем полученных кодов hi, j, symboli, будем придерживаться правил: смещение в словаре не может быть больше размера словаря (в примере длина словаря равна 8, значит объем двоичного кода для i равен 3 бита); длина подстроки не может быть больше размера буфера (в примере длина буфера равна 5, значит объем двоичного кода для j равен 3 бита); symbol занимает 8 бит. Объем входящего сообщения: 14*8=112 бит. Объем выходящего сообщения: 9*(3+3+8)=126 бит. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 77 / 107 Пример алгоритма LZ77, декодирование При декодировании на входе алгоритм получает цепочку кодов и информацию об объеме словаря и буфера – 8/5. Строим такую же таблицу, как при кодировании, только с самого начала последний столбец кодов в таблице полностью заполненный, а буфер заполняется и сдвигается постепенно в зависимости от кодов. Строка, попадающая в словарь, является закодированным сообщением. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 78 / 107 Упражнения 5. Закодируйте сообщение методом LZ77 (словарь – 12 символов, буфер – 5 символов) и вычислите объемы входящего и выходящего сообщений: синяя синева сини 6. Декодируйте сообщение методом LZ77 (словарь – 15 символов, буфер – 6 символов): 00к, 00р, 00и, 121_, 103ч, 00а, 00т, 00ь, 71з, 101к, 55ь Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 79 / 107 Алгоритм LZSS Разработан в 1982 г. Лемпелем, Зивом, Сторером и Шиманским (Lempel, Ziv, Storer, Szimansky). Алгоритм использует «скользящее» по сообщению окно, разделенное на 2 неравные части. В результате работы алгоритма выдается строка кодов. Код начинается с однобитного префикса, различающего собственно код от незакодированного символа. Если префикс принимает значение 0, то далее идет незакодированный символ S, который встречается впервые, и на него нет ссылки в словаре. Код имеет вид – 0,S. Если префикс принимает значение 1, то далее идет код, который состоит из пары: смещение (i), длина (j). Код имеет вид – 1, i, j. Окно сдвигается ровно на длину найденной подстроки или на 1, если не найдено вхождение подстроки из буфера в словаре. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 80 / 107 Пример алгоритм LZSS, кодирование Словарь/буфер — 8/5. Сообщение ABCDECFGABCDAC словарь (8) ........ .......A ......AB .....ABC ....ABCD ...ABCDE ..ABCDEC .ABCDECF ABCDECFG ECFGABCD CFGABCDA Багина О.Г. (КемГУ) буфер (5) ABCDE BCDEC CDECF DECFG ECFGA CFGAB FGABC GABCD ABCDA AC C код 0,A 0,B 0,C 0,D 0,E 1,5,1 0,F 0,G 1,0,4 1,4,1 1,0,1 длина кода 1+8=9 1+8=9 1+8=9 1+8=9 1+8=9 1+3+3=7 1+8=9 1+8=9 1+3+3=7 1+3+3=7 1+3+3=7 Методы сжатия информации без потерь 2015 81 / 107 Пример алгоритм LZSS, кодирование Выходящее сообщение – 11 кодов 0,A, 0,B, 0,C, 0,D, 0,E, 1,5,1, 0,F, 0,G, 1,0,4, 1,4,1, 1,0,1. Объем выходящего сообщения: 9*7+7*4=63+28=91 бит. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 82 / 107 Недостатки алгоритмов LZ77 и LZSS Работают медленно. При увеличении размеров окна для повышения степени сжатия скорость работы будет пропорционально уменьшаться. Не эффективны при кодировании одного символа (1 к 3). Невозможность кодирования подстрок, отстоящих друг от друга на расстоянии, большем длины словаря. Длина подстроки, которую можно закодировать, ограничена размером буфера. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 83 / 107 Упражнения 7. Закодируйте сообщение методом LZSS (словарь – 12 символов, буфер – 5 символов) и вычислите объемы входящего и выходящего сообщений: синяя синева сини 8. Декодируйте сообщение методом LZSS (словарь – 15 символов, буфер – 6 символов): 0,с, 0,о, 0,р, 0,_, 1,11,2, 0,н, 1,11,3, 1,7,1, 0,и, 0,т, 0,ь, 1,4,4, 1,3,1, 1,7,1, 0,к Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 84 / 107 Алгоритм LZ78 В 1978 г. авторами алгоритма LZ77 был разработан алгоритм LZ78, лишенный недостатков предыдущих алгоритмов. Принципы Не использует «скользящее» окно, хранит словарь из уже просмотренных фраз. При старте алгоритма этот словарь содержит только одну пустую строку. Теоретически он может расти бесконечно. На каждом шаге в словарь вставляется новая фраза, которая представляет собой сцепление одной из фраз S словаря, имеющей самое длинное совпадение со строкой буфера, и символа s. Символ s является символом, следующим за строкой буфера, для которой найдена совпадающая фраза S. В отличие от LZ77 в словаре нет одинаковых фраз. Кодер порождает только последовательность кодов фраз. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 85 / 107 Алгоритм LZ78 Принципы Каждый код состоит из номера (индекса) n «родительской» фразы S или префикса 0, и символа s (<ns> или <0s>. Последний символ в сообщении дает либо код (<0s>), если символ ранее не встречался, или только номер n «родительской» фразы S, если символ ранее встречался. На практике при достижении определенного объема занимаемой памяти словарь должен очищаться полностью иди частично. От размера словаря зависит размер получаемых кодов. Длина кода: log2 (размер словаря)+8. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 86 / 107 Пример алгоритма LZ78, кодирование. Сообщение ABCDECFGABCDAC Багина О.Г. (КемГУ) словарь код A B C D E CF G AB CD AC 0A 0B 0C 0D 0E 3F 0G 1B 3D 1C позиция словаре 1 2 3 4 5 6 7 8 9 10 в Методы сжатия информации без потерь 2015 87 / 107 Пример алгоритма LZ78, кодирование. Выходящее сообщение – 10 кодов 0A, 0B, 0C, 0D, 0E, 3F, 0G, 1B, 3D, 1C. Объем выходящего сообщения: 10 · (log2 (10) + 8) = 10 · (3, 3219 + 8) = 10 · 11, 3219 = 113 бит. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 88 / 107 Упражнения 9. Закодируйте сообщение методом LZ78 и вычислите объемы входящего и выходящего сообщений: синяя синева сини 10. Декодируйте сообщение методом LZ78: 0п, 0о, 0л, 0_, 1о, 3к, 0а, 4п, 2л, 0к Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 89 / 107 Алгоритм LZW В 1984 г. Абрахам Лемпель, Якоб Зив и Терри Уэлч (Terry Welch) разработали алгоритм LZW путем модифификации алгоритма LZ78. Алгоритм запатентован! Принципы Алгоритм динамически создает таблицу преобразования строк. Таблица инициализируется всеми 1-символьными строками. В случае 8-битных символов (таблица ASCII) – это 256 записей, кроме того для кода очистки и кода конца информации зарезервированы значения 256 и 257. При заполнении таблицы определённым последовательностям символов ставится в соответствие код фиксированной длины, этот код является индексом в создаваемой таблице. Обычно длина кода от 9 до 12 бит, и тогда под коды выделяются значения от 258 до 4095. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 90 / 107 Алгоритм LZW Этапы 1 Инициализация входной фразы w первым символом сообщения. 2 Считать очередной символ K из кодируемого сообщения. 3 Если КОНЕЦ СООБЩЕНИЯ Выдать код для w Конец 4 Если фраза wK уже есть в словаре Присвоить входной фразе w значение wK Перейти к шагу 2 Иначе Выдать код для w Добавить w в словарь Присвоить входной фразе w значение K Перейти к шагу 2. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 91 / 107 Пример алгоритма LZW, кодирование ABCDECFGABCDAC Багина О.Г. (КемГУ) входная фраза код ASCII AB BC CD DE EC CF FG GA ABC CDA AC C A B C D E C F G 258 260 A C позиция словаре 0-257 258 259 260 261 262 263 264 265 266 267 268 Методы сжатия информации без потерь в 2015 92 / 107 Пример алгоритма LZW, кодирование. Выходящее сообщение – 12 кодов A, B, C, D, E, C, F, G, 258, 260, A, C. Объем выходящего сообщения В зависимости от размера словаря объем выходящего сообщения может быть различным: чем меньше словарь, тем меньше объем сообщения. Но маленький словарь удобно использовать только для небольших входящих сообщений. В основном используется словарь из 4095 фраз. Объем словаря – 512 фраз, тогда под коды выделяется 9 бит. В нашем примере получаем 12 · 9 = 108 бит. Объем словаря – 4095 фраз, тогда под коды выделяется 12 бит. В нашем примере получаем 12 · 12 = 144 бита. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 93 / 107 Алгоритм LZW Характеристики и применение Коэффициенты компрессии: примерно 1000, 4, 5/7 (Лучший, средний, худший коэффициенты). Сжатие в 1000 раз достигается только на одноцветных изображениях размером, кратным 7 Мб. Применяется в основном для сжатия изображений, например, 8-битных изображений, построенных на компьютере. Симметричность: почти симметричен, при условии оптимальной реализации операции поиска строки в таблице. В 1987 году алгоритм стал частью стандарта на формат изображений GIF. В настоящее время, алгоритм содержится в стандарте PDF. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 94 / 107 Упражнения 11. Закодируйте сообщение методом LZ78 и вычислите объемы входящего и выходящего сообщений (код 9 бит): синяя синева сини 12. Декодируйте сообщение методом LZW: р, о, т, _, 258, т, а, _, п, о, в, о, 262 Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 95 / 107 Ответы к упражнениям. Алгоритм Хаффмана 1(1). сорворсорт Таблица кодов: в – 000 т — 001 с – 01 о – 10 р – 11 Сообщение: 0110110001011011011001 Размеры сообщений: входное сообщение: 80 бит выходное сообщение: 74 бита 1(2). сор_тор_вор_сорт_рот Таблица кодов: в – 0000 с – 0001 т – 001 р – 01 _ – 10 0 – 11 Выходное сообщение: 0001110110001110110000011011000011101001100111001 Размеры сообщений: входное сообщение: 160 бит выходное сообщение: 114 бит Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 96 / 107 Ответы к упражнениям. Арифметическое сжатие 2(1). сорворсорт Таблица частот: символ частота о 3 р 3 с 2 т 1 в 1 вероятность 0,3 0,3 0,2 0,1 0,1 диапазон [0,0; 0,3) [0,3; 0,6) [0,6; 0,8) [0,8; 0,9) [0,9; 1) Таблица рабочих интервалов: с о р в о li 0,6 0,6 0,618 0,6342 0,6342 hi 0,8 0,66 0,636 0,636 0,63474 с о р li 0,6344592 0,6344592 0,634462116 hi 0,6344916 0,63446892 0,634465032 р 0,634362 0,634524 т 0,6344644488 0,6344647404 Выходное сообщение: 0,6344644488 Размеры сообщений: входное сообщение: 80 бит выходное сообщение (без таблицы частот): −log2 (0, 3) · 6 − log2 (0, 2) · 2 − log2 (0, 1) · 2 = 21, 71 ≈ 22 бита Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 97 / 107 Ответы к упражнениям. Арифметическое сжатие 2(2). сор_тор_вор_сорт_рот Таблица частот: символ частота о 5 р 5 _ 4 т 3 с 2 в 1 вероятность 0,25 0,25 0,2 0,15 0,1 0,05 диапазон [0,0; 0,25) [0,25; 0,5) [0,5; 0,7) [0,7; 0,85) [0,85; 95) [0,95; 1) Таблица рабочих интервалов: с о р _ т о р li 0,85 0,85 0,85625 0,859375 0,86025 0,86025 0,86026171875 hi 0,95 0,875 0,8625 0,860625 0,8604375 0,860296875 0,8602734375 _ в о р li 0,860267578125 0,8602698046875 0,8602698046875 0,860269812011719 hi 0,860269921875 0,860269921875 0,860269833984375 0,860269819335937 _ с о li 0,860269815673828 0,860269816918945 0,860269816918945 hi 0,860269817138672 0,86026981706543 0,860269816955566 Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 98 / 107 Ответы к упражнениям. Арифметическое сжатие Таблица рабочих интервалов (продолжение): p т li 0,860269816928101 0,860269816934509 hi 0,860269816937256 0,860269816935883 р о li 0,860269816935265 0,860269816935265 hi 0,860269816935333 0,860269816935282 _ 0,860269816935196 0,860269816935471 т 0,860269816935277 0,860269816935279 Выходное сообщение: 0,860269816935277 Размеры сообщений: входное сообщение: 160 бит выходное сообщение: (без таблицы частот): −log2 (0, 25) · 10 − log2 (0, 2) · 4 − log2 (0, 15) · 3 − log2 (0, 1) · 2 − log2 (0, 05) = 48, 46 ≈ 49 бит Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 99 / 107 Ответы к упражнениям. Метод Шеннона-Фано 3(1). сорворсорт Таблица кодов: в – 111 т — 110 с – 10 о – 00 р – 01 Выходное сообщение: 1000011110001100001110. Размеры сообщений: входное сообщение: 80 бит, выходное сообщение: 74 бита. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 100 / 107 Ответы к упражнениям. Метод Шеннона-Фано 3(2) сор_тор_вор_сорт_рот Таблица кодов: в – 1111 с – 1110 т – 110 р – 01 _ – 10 0 – 00 Выходное сообщение: 1110000110110000110111100011011100001110100100110. Размеры сообщений: входное сообщение: 160 бит, выходное сообщение: 114 бит. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 101 / 107 Ответы к упражнениям. RLE – сжатие 4(1). nnnnnnnnnnnnnnnnnnDDfffddddddddddddLhhhhhhMaaaffff Выходное сообщение: *18nDDfff*12dL*6hMaaa*4f. Размеры сообщений: входное сообщение: 8 · 50 = 400 бит, выходное сообщение: 8 · 22 = 176 бит. 4(2). nnnnnnnnnnnnnnnnnnDDfffddddddddddddLhhhhhhMaaaffff Выходное сообщение: 18n2D3f12d1L6h1M3a4f. Размеры сообщений: входное сообщение: 8 · 50 = 400 бит, выходное сообщение: 8 · 18 = 144 бит. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 102 / 107 Ответы к упражнениям. Алгоритм LZ77 5. синяя синева сини Выходное сообщение: 00с, 00и, 00н, 00я, 111_, 63е, 00в, 00а, 54и Размеры сообщений: входное сообщение: 8 · 17 = 136, выходное сообщение: 9 · 15 = 135. 6. 00к, 00р, 00и, 121_, 103ч, 00а, 00т, 00ь, 71з, 101к, 55ь Выходное сообщение: крик кричать закричать Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 103 / 107 Ответы к упражнениям. Алгоритм LZSS 7. синяя синева сини Выходное сообщение: 0,с, 0,и, 0,н, 0,я, 1,11,1, 0,_, 1,6,3, 0,е, 0,в, 0,а, 1,5,4, 1,3,1 Размеры сообщений: входное сообщение: 8 · 17 = 136, выходное сообщение: 9 · 8 + 8 · 4 = 104. 8. 0,с, 0,о, 0,р, 0,_, 1,11,2, 0,н, 1,11,3, 1,7,1, 0,и, 0,т, 0,ь, 1,4,4, 1,3,1, 1,7,1, 0,к Выходное сообщение: сор сон сорить сонник Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 104 / 107 Ответы к упражнениям. Алгоритмы LZ78 9. синяя синева сини Выходное сообщение: 0с, 0и, 0н, 0я, 4_, 1и, 3е, 0в, 0а, 0_, 6н, 2 Размеры сообщений: входное сообщение: 8 · 17 = 136, выходное сообщение: 12 · (log2 (12) + 8) = 140. 10. 0п, 0о, 0л, 0_, 1о, 3к, 0а, 4п, 2л, 0к Выходное сообщение: пол полка полк Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 105 / 107 Ответы к упражнениям. Алгоритмы LZW 11. синяя синева сини Выходное сообщение: с, и, н, я, я, _, 258, н, е, в, а, 263, 259, и Размеры сообщений: входное сообщение: 8 · 17 = 136, выходное сообщение: 14 · 9 = 126. 12. р, о, т, _, 258, т, а, _, п, о, в, о, 262 Выходное сообщение: рот рота поворот Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 106 / 107 Литература Балашов, К. Ю. Сжатие информации: анализ методов и подходов / К. Ю. Балашов. – Минск, 2000. – 42 с. Ватолин, Д. Методы сжатия данных. Устройство архиваторов, сжатие изображений и видео / Д. Ватолин, А. Ратушняк, М. Смирнов, В. Юкин. – М.: ДИАЛОГ-МИФИ, 2003. – 384 с. Захаров, В. Е. Системы кодирования и сжатия информации: Учебное пособие / В. Е. Захаров. – Калининград, 2002. – 93 с. Семенюк, В. В. Экономное кодирование дискретной информации / В. В. Семенюк. – СПб.: СПбГИТМО (ТУ), 2001. – 115 с. Сэломон, Д. Сжатие данных, изображений и звука / Д. Сэломон. – М.: Техносфера, 2004. – 368 с. Фомин, А. А. Основы сжатия информации / А. А. Фомин. – С-П., 1998. – 82 с. Электронный ресурс – http:/compression.ru/. Багина О.Г. (КемГУ) Методы сжатия информации без потерь 2015 107 / 107