К чему такие сложности?
Из всего сказанного не видно, в чем преимущество арифметического кодирования перед кодированием Хаффмена. Разница становится заметна тогда, когда частота встречаемости символов во входном сообщении сильно отличается друг от друга.
Пусть заранее известна вероятность появления символа 'Ш' в некотором сообщении, и она равна 0.9.
В табл. 6 показано то, как алгоритм арифметического кодирования обработает сообщение “ШШШШШШШ!”.
Очевидно, что число 0.4375 (в двоичном виде 0.0111) может однозначно закодировать это сообщение. Это значит, что мы закодировали сообщение длиной 8 символов в 4 бита. Оптимальное кодирование Хаффмена могло бы дать минимум 8 битов.
Эксперименты на различных типах данных показывают, что арифметическое кодирование всегда дает результаты не хуже, чем кодирование Хаффмена. В некоторых случаях выигрыш может быть очень существенным. Однако в силу того, что объем вычислений, необходимых при работе алгоритма арифметического
Монитор
1.94
ОчереднойСимвол
|
НижняяГраница
|
ВерхняяГраница
|
|
0.0 |
1.0 |
Ш |
0.0 |
0.9 |
Ш |
0.0 |
0.81 |
Ш |
0.0 |
0.729 |
Ш |
0.0 |
0.6561 |
Ш |
0.0 |
0.59049 |
Ш |
0.0 |
0.531441 |
Ш |
0.0 |
0.4782969 |
! |
0.43046721 |
0.4782969 |
кодирования, значительно выше, чем при кодировании по методу Хаффмена, он работает медленнее. Арифметическое кодирование может быть использовано в тех случаях, когда степень сжатия важнее, чем временные затраты на сжатие информации. •
Рекомендуемая литература
1. Witten Ian H., Neal Radford M., Cleary John G. Arithmetic coding for data compression// Communications of the ACM.- June 1987.- Vol. 30.-№6.
2. Nelson Mark, The Data Compression Book.- USA: M&T Books, 1991.
3. Storer J.A. Data Compression.- USA: Computer Science Press, 1988.
Комментарии к листингу
Приведенная программа является несколько модифицированной версией алгоритма, опубликованного в работе [1]. Она написана на языке С и реализует адаптивную версию арифметического кодирования. Для того чтобы использовать ее в конкретных приложениях, скорее всего, понадобится существенная оптимизация исходного текста для достижения приемлемого быстродействия.
В следующем номере
Следующая статья этой серии будет посвящена алгоритмам группы LZ(LZ77, LZ78, LZSS), которые лежат в основе почти всех современных программных и аппаратных средств сжатия информации. PKZIP, LHA, Stacker, SuperStor, Dblspace и многие другие используют ту или иную модификацию алгоритма LZ. Кроме того, алгоритм LZ является незапатентованным алгоритмом, так что, познакомившись с ним, вы сможете помериться силами с такими гигантами, как Microsoft, PKWare и Stac Electronics.
