Uploaded by steamstoretw

Слайды МСИ без потерь

advertisement
Федеральное государственное бюджетное образовательное учреждение высшего
профессионального образования
«Кемеровский Государственный Университет» (КемГУ)
Кафедра фундаментальной
О.Г. Багина
Методы сжатия информации без потерь
Кемерово
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
Download