Научная статья на тему 'Комбинаторное кодирование для сжатия данных'

Комбинаторное кодирование для сжатия данных Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
452
87
i Надоели баннеры? Вы всегда можете отключить рекламу.

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Данилкин Ф. А., Гришин М. Л.

Разработан метод статистического сжатия данных, проведен сравнительный анализ эффективности данного метода и других алгоритмов энтропийного кодирования.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Комбинаторное кодирование для сжатия данных»

УПРАВЛЕНИЕ, ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА И ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ

УДК 004.627

Ф.А. Данилкин, М.Л. Гришин (Тула, ТулГУ)

КОМБИНАТОРНОЕ КОДИРОВАНИЕ ДЛЯ СЖАТИЯ ДАННЫХ

Разработан метод статистического сжатия данных, проведен сравнительный анализ эффективности данного метода и других алгоритмов энтропийного кодирования.

Комбинаторное кодирование, названное так по аналогии с арифметическим кодированием [1], использует статистику исходных данных и является разновидностью статистических (энтропийных) методов сжатия информации, к таким методам также относятся арифметическое кодирование, метод Хаффмана и ряд других менее популярных методов.

Суть комбинаторного метода заключается в том, что из известных алфавита и таблицы частот можно сформировать строго определенное число различных последовательностей данных. Поэтому каждой последовательности данных ставится в соответствие строго определенный (комбинаторный) номер (код) и, наоборот, каждому комбинаторному номеру - строго определенная последовательность данных. Для данного метода невозможна адаптивная реализация, но это в значительной мере окупается компактностью кода. Метод рекомендуется как основной в случае небольших выборок данных, это обуславливается тем, что чем больше выборка, тем длиннее арифметика, используемая при сжатии, или как вспомогательный. Для большого объема данных возможна блочная реализация. Исходную последовательность данных можно представить в виде массива с1[N], где N - количество элементов сжимаемой выборки. При сканировании массива [N] можно построить статистику частоты встречаемости символов в рассматриваемых данных. Она может быть представлена двумя массивами:

а[М] ~ символами алфавита;

п[М] - частотами встреч символов алфавита в рассматриваемых данных, где М - размер алфавита.

По полученной статистике и исходным данным можно вычислить комбинаторный номер, который будет всегда меньше возможного числа

N1

сочетаний С = -ту—.—.

М—1

П щ1

¡=о

Минимальное число бит, необходимое для хранения комбинаторного кода, определяется выражением В =]1с^2(С)[. В программной реализации вычисление логарифма можно заменить сканированием числа С до первой значащей двоичной единицы подобно ассемблерной команде Ьэг [2].

В отличие от арифметического сжатия и метода Хаффмана, для которых событием является очередной символ последовательности данных с

М-1

информационной энтропией [3] Яд = - Е

7 = 0

г

— \°ё>2 N

г

\

для комбина-

та

торного сжатия событием является вся последовательность данных. Поскольку все возможные последовательности данных равновероятны, то событие для комбинаторного кодирования имеет суммарную условную энтропию N порядка Н5Л, = 1с^2 (С), а затраты на хранение комбинаторного кода можно записать как В =]//5л [.

Известно, что размер данных, сжатых любым энтропийным кодером (без использования методов контекстно-зависимого моделирования (предсказаний) [4]), использующим в качестве события символ последовательности данных, всегда больше или равен суммарной энтропии последовательности Нзо = Н0* N рассматриваемых данных. Согласно свойству условной энтропии, которое можно представить в виде неравенства 0<ЯЛ, <Н0, чем выше ее порядок, тем она меньше, в

худшем случае не больше, поэтому для комбинаторного кодирования верно утверждение, что размер кода В всегда меньше или равен ]Н50[.

Число возможных сочетаний С необходимо вычислять во время построения статистики, по мере поступления данных:

с -г 1 +1

С/ -см

/<ч;+г

где /((¿¡) - число символов, эквивалентных ¿1, в уже рассмотренных данных, / меняется от 0 до N -1, при этом Со = 1. Такой подход позволяет

легко контролировать размер комбинаторного кода В для ограничения длины арифметики при блочной реализации.

При кодировании и декодировании удобно рассматривать каждый символ алфавита независимо от остальных символов, поэтому число сочетаний символов алфавита для рассматриваемой статистики примет вид

М-1

С = п к19 /=0

^ _(Ч + £//г м

где , =

при этом - 1 ■ можно рассматривать как число возможных перестановок символа алфавита а, со всеми предшествующими символами с учетом таблицы частот, таким образом, значение комбинаторного номера С можно представить формулой

Г , Л

- М-1 С = 2 »=1

V

¿-1 С; П К/ У=0

где с,- - номер перестановки а,- в количестве с последовательностью данных, состоящей из предыдущих 2,--.ао символов алфавита со-

ответственно в количестве , «,_2«о •

Таким образом, необходимо вычислить М -1 номеров перестановок с,-, чтобы получить комбинаторный номер С соответствующий рассматриваемой последовательности данных. Алгоритм вычисления комбинаторного номера (кодирования) представлен на рис. 1.

Вычисление С начинается с последнего символа алфавита ам_\ и по мере рассмотрения выборки данных уменьшается за счет исключения символов, эквивалентных текущему рассматриваемому символу алфавита. Значение Сх определяет количество комбинаций, которые могли бы быть, если бы текущий символ алфавита не совпал со значением в выборке, а встретился бы позже. Необходимо отметить, что факториал нуля равен единице. Если алфавит состоит из одного единственного символа, комбинаторный номер занимает 0 бит.

Процесс декодирования номера строится обратно процессу кодирования. Для успешного декодирования необходимы алфавит, таблица частот и комбинаторный номер, при этом размер комбинаторного номера легко вычислить по таблице частот. Алгоритм декодирования представлен на рис. 2, переменные у,к и т являются вспомогательными и не должны ассоциироваться с одноименными переменными в алгоритме кодирования.

Рис. 1. Алгоритм комбинаторного кодирования данных

В процессе декодирования значение Сх необходимо знать на каждом шаге вычислений. Для уменьшения времени декодирования значение Сх вычисляется с использованием факториалов только при смене текущего символа алфавита, а затем корректируется в зависимости от результата

сравнения с текущим номером перестановки с/. Аналогичным образом

можно поступить при кодировании.

начало

і

Л

Р=Н-П'>, *=0, к<п0; к-к+1, р=р+1

- ао

Ї

с, = с, -Сх т = ет + 1

Сх = Сх * /

л, = л, -1 У 7-7-1

р = р + 1 />=р+1

г

конец

Рис. 2. Алгоритм комбинаторного декодирования данных

Эффективное комбинаторное кодирование требует использования длинной арифметики, для этого можно использовать мультиплатформен-ную библиотеку ОМР [5]. Для ускорения вычисления факториалов можно предложить частичное табличное представление.

В ходе исследований был проведен сравнительный анализ эффективности методов Хаффмана, комбинаторного и арифметического кодирований, полученная статистика представлена в виде графиков на рис. 3 и 4. В тестах был использован классический арифметический кодер, описанный в [1] и идентичный реализации в [6]. Метод Хаффмана взят из источника [7] и модифицирован - снято ограничение на длину кодового слова, которое составляло 16 бит.

Рис. 3. Время работы алгоритмов относительно размера

комбинаторного кода

Время комбинаторного кодирования и декодирования (см. рис. 3) быстро растет с увеличением самого кода, поэтому в случае кодирования значительных объемов данных необходимо использовать блочную реализацию алгоритма, что все же не позволит обогнать классические методы и с точки зрения скорости они остаются предпочтительными.

В расчетах эффективности кодирования учитывался только размер соответствующего кода без учета затрат на таблицу частот и алфавит, поскольку они одинаковы для всех указанных методов. Если рассматривать эффективность кодирования относительно комбинаторного кода (верхняя часть рис. 4), видно, что на равных условиях комбинаторный метод позволяет получить более компактный код по сравнению с другими алгоритмами, пределом для которых является суммарная энтропия Н50. Если рассматривать адаптивные варианты арифметического кодирования и метода Хаффмана, то полученного преимущества может оказаться вполне достаточно, чтобы компенсировать невозможность адаптивной реализации

Комбинаторное кодирование

АриФматячбсюв идивошт.

Код Хаффмана

комбинаторного кодирования и сохранить превосходство в степени сжатия

данных.

Рис. 4. Сравнительная эффективность алгоритмов кодирования

Рассматривая эффективность кодирования относительно энтропии Н{) (нижняя часть рис. 4), необходимо отметить, что значительный

всплеск в начале графика, соответствующего методу Хаффмана, связан с тем, что данный метод в отличие от арифметического не может кодировать символ менее чем одним битом. Среднее число бит на символ при использовании комбинаторного кодирования лишь вначале незначительно больше энтропии вследствие того, что размер комбинаторного кода В является целым значением.

Комбинаторное кодирование является наиболее эффективным и предпочтительным при сжатии небольших объемов данных, а также случайных или трудно предсказуемых данных. Эффективной областью применения может быть использование в качестве дополнительного метода, например, при использовании в паре с алгоритмом, который в силу особенностей дальнейшего использования информации сжимает её небольшими порциями и формирует некие коэффициенты, требующие дополнительного статистического сжатия. Это могут быть алгоритмы сжатия различных потоков, таких как видео, звук, телеметрия или просто данные, сжатые блоками для ускорения произвольного доступа к архиву.

Библиографический список

1. Witten I., Neal R., Cleary J. Arithmetic Coding For Data Compression /1. Witten, R. Neal, J. Cleary // Communications of the ACM. - Vol. 30. - №6. June 1987.-P.520-540.

2. IA-32 Intel® Architecture Software Developer’s Manual Order Number: 253665-017 September 2005, http://www.intel.com

3. Цымбал В.П. Теория информации и кодирование / В.П. Цымбал. - Киев: Выща Школа, 1977. - 288 с.

4. Bell Т. Modeling for Text Compression / T.Bell, I.Witten, J.Cleary // ACM Computing Surveys. - Vol.21. -№4. - Dec. 1989. - P.557-591.

5. The GNU Multiple Precision Arithmetic Library, Edition 4.2.2, 30 August 2007, http://swox.com/gmp/

6. COMP, Arithmetic compression written by Mark R. Nelson. Published in Dr Dobbs february 1991, http://www.compression.ru

7. HUF, Static Huffman compression/decompression by William Demas, 14-August-1990, Version 1.0, http://www.compression.ru

Получено 17.01.08

i Надоели баннеры? Вы всегда можете отключить рекламу.