
Оценка эффективности кодирования
Основная теорема о кодировании сообщений
заданного алфавита гласит, что такие
сообщения всегда можно закодировать
префиксными последовательностями так,
что среднее значение длины кодовой
комбинации будет удовлетворять
неравенству:
.
Таким образом, Н битов информации нельзя
представить в виде набора нулей и единиц
длиной менее Н знаков, но можно сколь
угодно близко подойти к этой границе.
Для оценки эффективности неравномерных
кодов используется коэффициент
относительной эффективности
,
где
это энтропия источника с алфавитом,
имеющим объем N знаков,
равная среднему количеству информации,
приходящемуся на один знак на выходе
источника и измеряющаяся в битах. Здесь
- вероятность появления i-го
символа из N различных
символов алфавита источника, а
средняя
длина кодовой комбинации. Отношение
среднего числа двоичных символов,
приходящихся на один знак алфавита,
при кодировании заданного источника
неравномерным кодом к длине кодовой
комбинации в случае кодирования
источника равномерным кодом называется
коэффициентом сжатия
.
Однако коды Хаффмана для своего
декодирования используют некоторую
служебную информацию, поэтому, рассчитывая
коэффициент сжатия, необходимо учитывать
это. Следующая формула иллюстрирует
сказанное:
,
где
- объем служебной информации;
- объем полезной информации; V
– объем исходных данных.
В качестве равномерного кода для цифрового представления текстовой информации используются коды ASCII. Таблицы кодов символов ASCII содержат десятичные и шестнадцатеричные представления расширенного ASCII (American Standards Committee for Information Interchange) набора символов. Расширенный набор ASCII символов включает в себя набор символов ASCII и 128 других символов, для представления графики и рисования линий, часто называемых набором символов IBM. Кроме того, существуют расширения кодов ASCII для представления символов национальных алфавитов, называемые кодовыми страницами или кодировками. Для русского языка существует две кодовые страницы с номерами 866 (DOS кодировка) и 1251 (Windows кодировка). Все названные таблицы приведены в приложении. Для представления каждого символа ASCII кодом необходимо 8 бит, т.е. длина кодовой комбинации в этом случае равна 8.
Для вычисления объема занимаемого служебной информацией при кодировании черно-белых изображений алгоритмом Хаффмана с использованием длин серий будем исходить из следующих соображений.
Кодирование изображения представленного совокупностью блоков размера w * h осуществляется сопоставлением каждому типу блока кодовой комбинации кода Хаффмана. Код Хаффмана построен для распределения вероятностей типов блоков встречающихся в кодируемом изображении. На рисунке 4 схематично показана структура файла для хранения изображения сжатого этим методом:
Рисунок
4 – Структура заголовка файла HFI
В верхней части рисунка указаны номера
байтов начиная с 0. Для каждого байта
номер поставлен в его начале и в конце.
Первые 3 байта используются для
кодирования формата файла (каждый байт
содержит символ в ASCII
коде), в данном случае это символы
hfi. Следующие два
поля содержат ширину и высоту кодируемого
изображения, каждое поле занимает два
байта, т.о. максимальная высота\ширина
равняется
пикселей. Затем два поля по одному байту
для ширины и высоты блока (т.е. максимальное
значение этих полей 255). Для декодирования
изображения необходимо знать соответствие
типа блока и кода Хаффмана, для этого
предназначены поля список блоков
и список счетчиков длин. Т.к. указанные
поля имеют переменную величину, то
необходимо сохранять размер для каждого
из них – поля размер списка блоков
и размер списка счетчиков длин
соответственно. Кроме того, размер
блоков в списке может быть не кратен
восьми, поэтому может присутствовать
дополнительное поле в конце списка
блоков для выравнивания на границу
байта. Максимальный размер этого поля
семь бит. Полезная нагрузка также
выравнивается на границу байта.
Итак, служебная информация будет рассчитываться по следующей формуле:
,
байт.
Здесь
-
длина списка счетчиков,
-
мощность алфавита источника, скобки
обозначают округление до целого в
большую сторону после деления.
Объем полезной нагрузки буде вычисляться как:
,
байт.
Здесь
-средняя
длина кодовой комбинации, а
-
суммарное количество появлений всех
элементов алфавита источника на его
выходе.