УДК 681.3.053
И.В. ТРУФАНОВ, НТУ "ХПИ" (г. Харьков)
СЖАТИЕ ИНФОРМАЦИИ АНАЛИТИЧЕСКИМ
ПРЕДСТАВЛЕНИЕМ ФУНКЦИИ ИСТОЧНИКА ДАННЫХ
У статті розглянуте питання стиснення інформації з використанням позиційного підходу до розташування певних частин інформаційної послідовності й наступного аналітичного визначення функції, що описує дані позиції.
The article considers the question of compression of the information which uses the positional approach to layout of defined parts of an information sequence and consequent analytical definition of the function describing these positions.
Постановка проблемы. Количество нужной человеку информации неуклонно растет. Скорость ее роста превышает рост объема устройств для хранения данных и рост пропускной способности линий связи. Использование сжатия информации позволяет в несколько раз сократить требования к объему устройств хранения данных и пропускной способности каналов связи без дополнительных издержек. Наряду с этим широко используемые методы сжатия, как правило, устарели и не обеспечивают достаточной степени сжатия. Таким образом, разработка и внедрение новых алгоритмов сжатия позволит значительно сократить издержки на аппаратное обеспечение вычислительных систем.
Анализ литературы. Основоположником науки о сжатии информации принято считать Клода Шеннона. Его теорема об оптимальном кодировании показывает, к чему нужно стремиться при кодировании информации и на сколько та или иная информация при этом сожмется. На основе ряда опытов он пришел к выводу, что количество информации в английском тексте колеблется в пределах 0.6 - 1.3 бита на символ [1].
Первые алгоритмы сжатия были примитивными в связи с тем, что была примитивной вычислительная техника. Многие из них применяются и в настоящее время. К ним можно отнести сжатие кодами Шеннона-Фоно [2], Хаффмена [3], RLE-кодирование [4]. С развитием мощностей компьютеров стали возможными все более мощные алгоритмы. Настоящим прорывом было изобретение Лемпелем и Зивом в 1977 г. словарных алгоритмов [5]. Суть алгоритма состоит в том, что цепочки событий помещаются в словарь. Если в дальнейшем во входном потоке встречается цепочка событий, которая присутствует в словаре, то вместо этой цепочки в выходной поток помещается ссылка на элемент словаря. Словарные алгоритмы позволяли кодировать повторяющиеся строки символов, что дало возможность резко повысить степень сжатия.
Важную роль сыграло изобретение примерно в это же время арифметического кодирования [2], позволившего воплотить в жизнь идею Шеннона об оптимальном кодировании. Текст, сжатый арифметическим кодером, рассматривается как некоторая двоичная дробь из интервала [0, 1). Каждый символ исходного текста представляется отрезком на числовой оси с длиной, равной вероятности его появления, и началом, совпадающим с концом отрезка символа, предшествующего ему в алфавите. Удачной альтернативой арифметическому кодеру, широко используемой в настоящее время, является Range-кодер [6]. Основным его отличием от арифметического кодера является не побитное, а побайтное сравнение верхней и нижней границы, а также побайтное помещение закодированного результата в выходной поток. Такой подход позволяет заметно повысить быстродействие и качество кодера.
В 1984 г. Т. Велч предложил словарный алгоритм LZW, в котором все литеральные события являются элементами словаря [7]. Таким образом, в выходной поток помещаются только ссылки на элементы словаря, что упрощает алгоритм. Велч показал, что алгоритм может быть легко реализован аппаратно.
Следующим прорывом было изобретение в 1984 г. алгоритма предсказания по частичному совпадению (РРМ) [8] - метода контекстноограниченного моделирования, который позволяет оценить вероятность символа в зависимости от предыдущих символов. На сегодняшний день алгоритм РРМ является наилучшим алгоритмом для сжатия текстовой информации.
Последние работы в области сжатия информации ориентированы на представление сжимаемой информации не в виде потока бит (байт, слов и т.д.), а в виде дискретной или аналоговой функции. Одним из таких методов являются спектровыделяющие преобразования [9]. Метод применяется для сжатия последовательностей, содержащих пространственную избыточность -при сжатии звука, растровой графики, растровых трехмерных изображений, видео и т.д. Данные преобразования преобразуют поток событий к его спектру. После чего низкочастотные составляющие (содержащие основную информацию) кодируются, а низкочастотные (содержащие малозначимую информацию и шум) отбрасываются.
Перспективным направлением является использование для сжатия информации нейроалгоритмов. Первые удачные применения нейросетей при сжатии немецкого текста описаны в совместной работе ученых Швейцарии и Германии Юргена Шмидхубера и Стефана Хайла [10], которые обучили нейронную сеть с 25 нейронами в скрытом слое сжимать текст 20 статей (10000 - 20000 символов в каждой) с качеством сжатия выше, чем у описанных методов. Представленный Шмидхубером и Хайлом метод пока далек от практического применения, поскольку обучение сети заняло 3 дня и
основной задачей по модификации метода, до настоящего времени, является увеличение быстродействия до приемлемых величин. Обзор имеющихся источников показал, что в настоящее время практически все алгоритмы сжатия данных подходят к источнику информации как к источнику потока данных. Поток рассматривается без учета позиций сжимаемых данных, а в виде последовательности бит (байт, слов и т.д.), что, возможно, несколько ограничивает континуум алгоритмов, применение которых может привести к сжатию информации.
Цель статьи. Возможность применения алгоритмов из смежных областей информатики может привести к созданию алгоритма сжатия информации с более высоким качеством сжатия. Для реализации этой возможности информацию источника данных можно представить в виде дискретной функции. Статья содержит анализ данного подхода с целью определения применимости одного из алгоритмов прикладной теории цифровых автоматов для задачи сжатия данных.
Алгоритм сжатия. Предположим, что источник информации поместил во входной поток N бит двоичной информации. Алгоритм сжатия можно представить в следующем виде:
Шаг 1. Входной поток данных преобразуется к виду к-значной дискретной функции V, содержащей I /1о§2(к)[ значений.
Шаг 2. Составляется таблица значений функции, содержащая I строк и к столбцов. Для каждого значения функции на пересечении соответствующей позиции и столбца заносится да-значный код присутствия. Все остальные позиции заполняются кодом, отличным от кода присутствия.
Шаг 3. Составляется аналитическое описание функций (у), / с Як, У с [0,1 -1] для каждого из к столбцов.
Шаг 4. Поскольку каждая из функций £ описывает только позиции присутствующих значений, то набор описаний является избыточным, и одну функцию можно исключить, заполнив при восстановлении все позиции соответствующим значением. Поэтому функцию с максимальной длиной описания не учитываем, а сохраняем только значение, которое она кодирует -код заполнения (ЕС).
Шаг 5. Аналитическое описание функций ^ кодируется одним из известных методов [2, 3], полученные коды заносятся в выходной поток.
Алгоритм восстановления. Для восстановления сжатой информации необходимо определить величины к - количество значений в каждой позиции функции, I - количество позиций функции, т - количество значений в коде присутствия, код заполнения - ЕС. Величины к и т можно использовать статические, величина I определяется из входного потока по сохраненной
длине закодированной последовательности, ЕС также извлекается из входного потока.
Шаг 1. Определяется величина I.
Шаг 2. Составляется к-значный вектор г значений функции длиной I. Все элементы вектора заполняются кодом заполнения ЕС.
Шаг 3. Для всех ■ с Як и у с [0,1 -1] проводится декодирование аналитического представления функции £ и вычисляется ее значение / (у). Если значение ^ (у) равно коду присутствия, то в у позиции вектора г устанавливается значение /.
Шаг 4. Вектор г преобразуется к двоичному виду и помещается в выходной поток.
Пример. Пусть источник информации поместил во входной поток последовательность из 128 бит информации. Поток сформируем случайным образом, например, символьную последовательность следующего вида: "2322233323332222". Количество значений функции и кода присутствия выберем двоичные, т.е. к = 2, т = 2.
Шаг 1. Определяем величину I = 128/1о§2(2) = 128 . Дискретная функция входного потока V = 00110010 00110011 00110010 00110010 00110010
00110011 00110011 00110011 00110010 00110011 00110011 00110011 00110010 00110010 00110010 00110010 (2).
Шаг 2. Составляем таблицу значений (табл. 1). В качестве кода присутствия выберем значение "1". Поскольку к = 2 и т = 2, то второй столбец является инверсией первого.
Таблица 1 Таблица значений функции
V
0 0
1 0
2 1
3 1
4 0
122 1
123 1
124 0
125 0
126 1
127 0
Шаг 3. Для составления аналитического описания функции используем метод минимизации логического описания функции - метод Квайна - Мак-Класки [11, с. 200 - 201].
Функции запишем в следующем виде:
/о (Л) = 0 VIV 4 V 5 V 7 V 8 V 9 V12 V13 V16 V17 V 20 V 21V 23 V 24 V 25 V 28 V 29 V
V 31V 32 V 33 V 36 V 37 V 39 V 40 V 41V 44 V 45 V 48 V 49 V 52 V 53 V 56 V 57 V
V 60 V 61V 64 V 65 V 68 V 69 V 71V 72 V 73 V 76 V 77 V 80 V 81V 84 V 85 V 88 V
V 89 V 92 V 93 V 96 V 97 V100 V101V103 V104 V105 V108 V109 V111V112 V V113 V116 V117 V119 V120 V121V124 V125 V127;
/ (Л) = 2 V 3 V 6 V10 V11V14 V15 V18 V19 V 22 V 26 V 27 V 30 V 34 V 35 V 38 V 42 V
V 43 V 46 V 47 V 50 V 51V 54 V 55 V 58 V 59 V 62 V 63 V 66 V 67 V 70 V 74 V 75 V
V 78 V 79 V 82 V 83 V 86 V 87 V 90 V 91V 94 V 95 V 98 V 99 V102 V106 V107 V V110 V114 V115 V118 V122 V123 V126.
Представим номер позиции ] в бинарном виде с количеством разрядов р = 1о§2 (/) = 1о§2(128) = 7 (табл.2).
Таблица 2
Преобразованная таблица значений функции /
І7 16 І5 І4 І3 І2 І1 /0
0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 1
1 1 1 1 1 1 1 1
Минимизируя логическое описание указанным методом, получим выражения для функций /0 (1) и /1(2).
/0(11,14,15 ,16,17 ) = 17 ■ 16 ■ 15 ' 13 ' 11 V 15 ' 14 ' 13 ' 11 V 17 ' 16 ' 13 ' 11 V 12 ; (1)
АУъ 12, h, l4,15 , ^, 17 ) = 16 ■ 15 ■ 14 ■ 12 V 17 ■ 16 ■ 14 ■ 12 V 17 ■ 16 ■ 15 ■ 12 V ^
V 17 ■ 16 ■ 15 ■ 12 V 13 ■ 12 V 12 ■ 11.
Шаг 4. Функция /\ содержит максимальное аналитическое описание, поэтому код заполнения ЕС принимаем равным 1. В качестве результирующего описания выбираем функцию /0.
Шаг 5. Каждый элемент функции описания может принимать значения
4, 4, "отсутствует". Выберем для кодирования описания простой двоичный код. Количество всех комбинаций в р = 7 разрядах равно 37 и составляет 2187 вариантов. Для кодирования в двоичном виде номера каждого набора понадобится 1о^(2187) « 12 бит. Код для функции/0 займет 12*4=48 бит.
Сжатие закончено. Размер выходных данных составляет 48 бит закодированного аналитического описания и один бит кода заполнения, итого 49 бит. Исходная последовательность сжата в 2,6 раза. В табл. 3 приведены данные по степени сжатия сгенерированной последовательности разными
методами, из которой следует, что на предложенной последовательности существующие алгоритмы показали степень сжатия в несколько раз хуже.
Таблица 3
Сравнительная степень сжатия последовательности
Метод Степень сжатия
Предлагаемый метод 2,60
Арифметическое кодирование 1,14
ЯЬБ-кодирование 1,06
Предсказание по частичному совпадению (РРМ) 0,94
Модификация LZW (дар) 0,43
Физический смысл. В рассмотренном примере аналитическая функция представляет собой логическое описание кластеров значений кода присутствия в 7-мерном двоичном пространстве номеров позиций. Входные последовательности небольшой длины могут сжиматься с увеличением размера выходной последовательности, вследствие низкой вероятности образования кластеров большого размера. В больших последовательностях вероятность образования и количество кластеров должно быть выше, соответственно и степень (качество) сжатия будет выше.
Выводы. Несмотря на показанное в тестовом примере высокое качество сжатия, до практического внедрения алгоритма необходимо провести серии опытов по: 1) тестированию алгоритма на наборах различной длины; 2) аналитическому описанию k-значными функциями; 3) составлению аналитического описания другими методами; 4) применению более эффективного кодирования аналитического представления функций.
Список литературы: 1. Shannon C.E. Prediction and entropy of printed English // Bell System Technical Journal, 1951. - P. 50 - 64. 2. Мастрюков Д. Арифметическое кодирование. Алгоритмы сжатия информации. Часть 2. Арифметическое кодирование // Монитор. - 1994. - № 1. - C. 20 - 23.
3. Hirschberg D., Lelewer D. Data compression. Computing Surveys. - 1987. - 19. - № 3. - P. 261 - 297.
4. Романов В.Ю. Популярные форматы файлов для хранения графических изображений на IBM PC. - М.: Унитех, 1992. - 156 с. 5. Ватолин Д., Ратушняк А., Смирнов М., Юкин В. Методы сжатия данных. Устройство архиваторов, сжатие изображений и видео. - M.: Диалог-МИФИ, 2002. - 384 c. 6. Martin G. N. Range encoding: an algorithm for removing redundancy from a digitized message // Video & Data Recording Conference. - Southampton. - 1979. 7. Сэломон Д. Сжатие данных, изображений и звука. - M: Техносфера, 2004. - 368 c. 8. Sadakane K., Okazaki T., Imai H. Implementing the Context Tree Weighting Method for Text Compression. // Proceedings of IEEE Data Compression Conference. -2000. - Snowbird. - Utah. - P.123 - 132. 9. Said А., Pearlman W.A. A new, fast, and efficient image codec based on set partitioning in hierarchical trees // IEEE Trans. On Circuits and Systems for Video Technology. - 1996. - P.234 - 250. 10. Schmidhuber J., Heil S.. Sequential neural text compression // IEEE Transactions on Neural Networks. - Vol. 7 (1). - 1996. - P.142 - 146. 11. Прикладная теория цифровых автоматов / Самофалов К.Г., Романкевич А.М., Валуйский В.Н., Каневский Ю.С., ПиневичМ.М. - К.: Вища Школа, 1987. - 375 с.
Поступила в редакцию 30.04.2005