К чему такие сложности?
Из
всего сказанного не видно, в чем
преимущество арифметического кодирования
перед кодированием Хаффмена. Разница
становится заметна тогда, когда частота
встречаемости символов во входном
сообщении сильно отличается друг от
друга.
Пусть заранее известна
вероятность появления символа 'Ш' в
некотором сообщении, и она равна 0.9.
В табл. 6 показано то, как
алгоритм арифметического кодирования
обработает сообщение "ШШШШШШШ!".
Таблица
6.
Арифметическое кодирование сообщения
"ШШШШШШШ!" |
ОчереднойСимвол |
НижняяГраница |
ВерхняяГраница |
|
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 |
Очевидно,
что число 0.4375 (в двоичном виде 0.0111) может
однозначно закодировать это сообщение.
Это значит, что мы закодировали сообщение
дли-ной 8 символов в 4 бита. Оптимальное
кодирование Хаффмена могло бы дать
минимум 8 битов.
Эксперименты
на различных типах данных показывают,
что арифметическое кодирование всегда
дает результаты не хуже, чем кодирование
Хаффмена. В некоторых случаях выигрыш
может быть очень существенным. Однако
в силу того, что объем вычислений,
необходимых при работе алгоритма
арифметического кодирования, значительно
выше, чем при кодировании по методу
Хаффмена, он работает медленнее.
Арифметическое кодирование может быть
использовано в тех случаях, когда степень
сжатия важнее, чем временные затраты
на сжатие информации.