- •Министерство образования и науки российской федерации федеральное агентство по образованию
- •Захарова ю.Ф. Дискретная математика и ее приложения
- •Введение
- •Глава 1. Введение в теорию множеств.
- •1.1. Основные определения.
- •1.2. Задание множеств
- •1.3. Операции над множествами
- •1.4. Разбиения и покрытия
- •1.5. Представление множеств в эвм.
- •1.5.1. Включение множеств.
- •1.5.2. Объединение множеств.
- •1.5.3. Пересечение множеств.
- •Глава 2. Булева алгебра.
- •2.1. Основные элементарные функции.
- •2.2. Основные элементарные тождества.
- •2.3. Формы представления булевых функций.
- •2.4. Минимизация булевых функций.
- •2.4.1. Метод Куайна.
- •2.4.2. Метод Карно.
- •Глава 3. Исчисление высказываний и исчисление предикатов.
- •3.1. Исчисление высказываний.
- •3.2. Исчисление предикатов.
- •Глава 4. Теория сжатия текстовой информации.
- •4.1. Метод Хаффмена
- •4.1.1. Общие положения
- •4.1.2. Краткое описание метода Хаффмена.
- •4.1.3. Пример использования метода Хаффмена.
- •4.2. Метод Зива Лемпеля (lz-метод)
- •4.2.1. Основные определения
- •4.2.2. Краткое описание lz-метода
- •4.2.3. Пример lz-метода
- •4.3. Метод Зива-Лемпеля-Велча (lzw-метод)
- •4.3.1. Общие положения
- •4.3.2. Краткое описание lzw-метода
- •4.3.3. Пример lzw-метода.
- •4.4. Метод Барроуза-Уиллера.
- •4.4.1. Общие положения.
- •4.4.2. 1 Этап. Преобразование Барроуза-Уилера.
- •4.4.3. 2 Этап. Mtf–метод.
- •4.4.4. 3 Этап. Статистический кодер.
- •4.4.5. Модификации различных этапов.
- •4.4.6. Сравнение алгоритмов сжатия на базе bwt с другими методами.
- •Глава 5. Теория сжатия графической информации. Введение.
- •5.2. Волновой метод (wavelet-метод)
- •5.2.1. Описание метода
- •5.2.2. Пример волнового метода
- •5.3. Дискретное косинус-преобразование (дкп-метод).
- •5.3.1. Описание метода.
- •5.3.2. Пример дкп-метода.
- •5.4. Классический алгоритм jpg.
- •5.5. Фрактальный алгоритм.
- •Глава 6. Введение в криптографию. Введение.
- •6.1. Методы перестановки
- •6.1.1. Матрицы
- •6.1.2. Маршруты Гамильтона
- •6.1.3. Электрический монтаж
- •6.1.4. Особенности перестановки
- •6.2. Методы подстановки
- •6.2.1. Вектор замен
- •6.2.2. Таблицы Вижинера
- •6.3. Метод замены. Использование алгебры матриц.
- •6.4. Аддитивные методы
- •6.5. Стеганология
- •6.6. Ключ. Основные понятия, связанные с ключом и алгоритмом.
- •6.6.1. Основные понятия.
- •6.6.2. Ключ.
- •6.6.3. Случайные и псевдослучайные числа.
- •6.6.4. Действия по шифрованию информации.
- •6.7. Блочные и поточные шифры.
- •6.8. Алгоритмы des, Triple des и их заменяющие.
- •6.8.2. Алгоритм Triple des
- •6.8.3. Коммерческие алгоритмы, заменившие des
- •6.9. Системы с открытым ключом.
- •6.10. Электронная подпись.
- •6.11. Взлом защищенных файлов.
- •6.11.1. Атака на ключ
- •6.11.2. Атака на алгоритм.
- •6.11.3. Скомпрометированный пароль.
- •6.11.4. Подделка открытых ключей.
- •6.11.5. Не до конца удаленные файлы.
- •6.11.6. Вирусы и закладки.
- •6.11.7. Виртуальная память.
- •6.11.8. Нарушение режима физической безопасности. Радиоатака. Фальшивые даты подписи.
- •6.11.10. Утечка информации в многопользовательской среде.
- •Содержание
- •Глава 6. Введение в криптографию. 1
4.4.3. 2 Этап. Mtf–метод.
Как было сказано выше, это тоже преобразование. Его алгоритм легко понять, если представить стопку книг, каждая из которых соответствует определенному символу. По мере востребования из стопки вытаскивается нужная книга и кладется сверху. Через некоторое время те книги, которые используются часто, оказываются ближе к верхушке стопки.
Вернемся к нашему примеру, а именно, к полученной в результате работы BWT строке "рдакраааабб". Символы этой строки принадлежат алфавиту, содержащему пять элементов. Предположим для простоты, что других символов мы не используем, а начальный список MTF содержит эти символы в следующем порядке: { 'а', 'б', 'д', 'к', 'р' }.
Приступим к преобразованию. Символ 'р' является пятым элементом списка, поэтому первым выходным кодом становится код 4. После перемещения символа 'р' в начало списка, тот принимает вид {'р', 'а', 'б', 'д', 'к'}. И т.п.
Символ |
Список |
Выход |
р |
абдкр |
4 |
д |
рабдк |
3 |
а |
драбк |
2 |
к |
адрбк |
4 |
р |
кадрб |
3 |
а |
ркадб |
2 |
а |
аркдб |
0 |
а |
аркдб |
0 |
а |
аркдб |
0 |
б |
аркдб |
4 |
б |
баркд |
0 |
На выход второго этапа подается строка “43243200040” и алфавит {'а', 'б', 'д', 'к', 'р' }.
Обратное преобразование выполняется симметрично.
4.4.4. 3 Этап. Статистический кодер.
В качестве статистического кодера наиболее часто используют метод Хаффмена (см. пункт 1.1 данной главы.). В рассматриваемом примере дерево преобразований Хаффмена может выглядеть например так:
Рис. 9.
Таким образом на выход третьего этапа подается строка
010010000101001000111011,
занимающая 24 бита, и алфавит Хаффмена.
В качестве упражнения можно рекомендовать проделать обратные преобразования всего BWT-метода следующей строки:
010001010000101110.
Дополнительная информация:
1) алфавит Хаффмена:
0 |
00 |
1 |
10 |
2 |
01 |
3 |
11 |
2) алфавит MTF: арты
3) номер строки для преобразований Барроуза: 7.
4.4.5. Модификации различных этапов.
Преобразование Шиндлера (список Шиндлера)
Следует отметить еще одно преобразование, основанное на сортировке блока данных - преобразование Шиндлера (ST) [5]. Отличие от BWT заключается в том, что строки матрицы перестановок упорядочиваются не по всей длине, а только по указанному количеству первых символов. Число таких символов называется порядком преобразования Шиндлера. В случае, если эти символы одинаковы у двух или более строк, они упорядочиваются в соответствии с номером позиции, в которой эти строки встречаются в исходной последовательности.
Distance Coding (кодирование расстояний).
Стоит упоминания метод, который все чаще используется как альтернатива MTF. По крайней мере, на большинстве файлов архиваторы, его использующие, имеют преимущество по сравнению с работающими в традиционной манере. Пока описание этого метода нигде официально не опубликовано, подробно он разобран в статье В. Юкина “Преобразования Барроуза-Уилера или алгоритм сжатия без потерь при помощи сортировки блока данных” (см. www. compression. ru). Используют его всего три архиватора - DC, YBS и SBC.
Рассмотрим кодирование строки "рдакраааабб" из прошлого примера. Первый шаг заключается в том, чтобы определить первое вхождение каждого символа. Для этого к началу строки мы по очереди приписываем все символы алфавита (при декодировании мы можем проделать тоже самое). А также воспользуемся символом конца строки, означающим окончание кодирования определенного символа. Обозначим его как '%'. Получается "абдкррдакраааабб%".
Находим число - расстояние от первого символа этой последовательности, 'а' до следующего такого же. Оно равно 6 - это число других символов между ними. Но нам заранее известно, что после 'а' идут символы 'б','д','к' и 'р'. А поскольку наша задача выяснить номер позиции, в которой потенциально может оказаться символ 'а' при декодировании, эти символы мы можем не считать. Таким образом, получаем число 2.
Аналогично кодируем еще несколько символов по очереди, подсчитывая число точек, символизирующих незанятые позиции, в строке известных символов.
а б д к р |
рдакраааабб |
|
а б д к р |
. . а . . . . . . . . |
2 |
а б д к р |
. . а . . . . . . б . |
28 |
а б |
. да . . . . . . б . |
281- |
а б |
. дак . . . . . б . |
281-1- |
а б |
рдак . . . . . б . |
281-1-0 |
а б |
рдак . а . . . б . |
281-1-01 |
а |
рдак . а . . . бб |
281-1-014- |
а |
рдакра . . . бб |
281-1-014-0- |
|
рдакраааабб |
281-1-014-0-000- |
Run Length Encoding (RLE).
Как видно из названия, суть этого кодирования - в замене части последовательности одинаковых символов на число, показывающее количество замененных символов.
Например, мы можем включать RLE в случае, когда количество одинаковых символов превышает 4. Тогда строка "abbbbbbbbccddddd" будет записана в виде "abbbb4ccddddl".
RLE может пригодиться тогда, когда в данных есть длинные повторы одинаковых символов. Такие повторы могут возникнуть в двух случаях - в исходных данных и после преобразования Барроуза-Уилера. В первом случае, особенно если повторов особенно много, RLE нам может заметно помочь ускорить сортировку матрицы перестановок ценой небольшого ухудшения сжатия. Аналогично, тот же эффект может иметь применение RLE и во втором случае. Правда, как было показано в предыдущем параграфе, использование DC делает RLE ненужным.
1-2 coding (OTC).
Альтернатива метода Хаффмена на третьем этапе. Это один из широко используемых способов кодирования длинных повторов. Обычно он применяется после MTF. Этот метод нашел свое применение в Bzip2, Imp.
Как известно, после MTF-преобразования мы получаем последовательность, в которой при удачном раскладе присутствует большое количество нулей, соответствующих нулевому рангу MTF.
Если кодировать каждый код MTF-0, то во-первых, это накладно по времени и, во-вторых, может заметно ухудшить сжатие из-за погрешностей статистического кодера.
Элегантный выход был найден в отведении под MTF-0 не одного, а двух символов (назовем их zl и z2). Таким образом, у нас в MTF-алфавите получилось не 256, а 257 символов. Эти zl и z2 можно использовать для кодирования числа идущих подряд MTF-0:
1 - zl
2 - z2
3 - zlzl
4 - zlz2
5 - z2zl
6 - z2z2
7 - zlzlzl
8 - zlzlz2
9 - zlz2zl
10 - zlz2z2
11 - z2zlzl
Как вы помните, наша строка "абракадабра" после двух преобразований выглядела как {4,3,2,4,3,2,0,0,0,4,0}. Подвергнем ее еще одному - и получим {4,3,2,4,3,2,zl,zl,4,zl}.
Структурная модель.
Было замечено, что данные, полученные после преобразования Барроуза-Уилера, состоят из так называемых "хороших фрагментов" (которые соответствуют часто встречаемым сочетаниям символов), разделенных "плохими фрагментами". Одна из главных задач при сжатии заключается в своевременном обнаружении границ фрагментов. То есть, в быстрой адаптации к смене фрагмента одного типа другим.
Еще одно наблюдение связано со статистикой MTF-рангов, полученных на типичных данных. Как уже упоминалось, для большинства текстов количество нулей превышает половину всех значений. Количество остальных рангов в среднем убывает по мере увеличения ранга и, соответственно, увеличивается погрешность при появлении конкретного значения и сглаживается разница между соседними рангами. Кроме того, появление нескольких больших рангов подряд в файле, подвергнутом BWT и MTF, может служить признаком "плохого фрагмента".
Одна из довольно эффективных моделей, призванных воспользоваться этой информацией, была описана Петером Фенвиком. Все MTF-ранги были поделены на группы:
MTF-ранги |
Номер группы |
0 |
0 |
1 |
1 |
2-3 |
2 |
4-7 |
3 |
8-15 |
4 |
16-31 |
5 |
32-63 |
6 |
64-255 |
7 |
При обработке очередного ранга первым делом кодируется номер группы, а затем, в случае необходимости - номер ранга внутри группы.
Описанная модель получила довольно широкое распространение и используется в ряде современных архиваторах.
