Эффективное кодирование
Эффективные коды v Эффективность кода определяется его избыточностью v Для кодирования символов первичного алфавита используют двоичные коды переменной длины
Эффективное кодирование v Алфавитное неравномерное кодирование с разделителем знаков v Код Шеннона-Фано v Код Хаффмана v Блочное кодирование
Алфавитное неравномерное кодирование v Однозначность декодирования! v Разделитель – постоянная комбинация двоичных знаков: § Признак конца знака: 00 § Признак конца слова: 000 v Правила построения кодов: § код признака конца знака может быть включен в код буквы; § коды букв не должны содержать двух нулей подряд в середине; § код буквы (кроме пробела) всегда должен начинаться с 1; § коды букв могут оканчиваться на 0 или 00 (до признака конца знака).
Алфавитное неравномерное кодирование Буква P*103 Код k пробел о е а и т н с 174 90 72 62 62 53 53 45 000 1000 1100 10000 10100 11000 11100 3 3 4 4 5 5
Префиксные коды v Префиксные коды – неравномерные коды без разделителя v Удовлетворяют условию Фано: § Неравномерный код может быть однозначно декодирован, если никакой из кодов не совпадает с началом какоголибо иного более длинного кода
Декодирование префиксных кодов 1. Отрезать от текущего сообщения крайний левый символ, присоединить к рабочему кодовому слову; 2. сравнить рабочее кодовое слово с кодовой таблицей; если совпадения нет, перейти к 1; 3. декодировать рабочее кодовое слово, очистить его; 4. проверить, имеются ли еще знаки в сообщении; если да, перейти к 1.
Код Шеннона-Фано v Упорядочить исходное множество символов по не возрастанию их частот. 1. список символов делится на две части так, чтобы суммы частот обеих частей были точно или примерно равны; 2. кодовым комбинациям первой части дописывается 1, второй части – 0; 3. если первая часть содержит только один символ, работа с ней заканчивается, переход к шагу 4, иначе – переход к шагу 1; 4. если вторая часть содержит только один символ, работа с ней заканчивается, переход к шагу 5, иначе – переход к шагу 1; 5. если оставшийся список пуст – код построен, работа заканчивается. Иначе – выполняется шаг 1.
Код Шеннона-Фано Символ p I a 0. 5 0. 3 c 0. 15 d 0. 05 III 1 b II 1 1 0 Код 0 01 1 001 0 000
Код Хаффмана v Упорядочить исходное множество символов по не возрастанию их частот. 1. Объединение частот: § две последние частоты складываются и исключаются из списка; § оставшийся список пополняется суммой частот и вновь упорядочивается; § предыдущие шаги повторяются пока не получится единица. 2. Построение кодового дерева: § строится двоичное дерево: корнем его является вершина, равная 1, листьями – исходные частоты; § ребра дерева кодируются: 1 и 0. 3. Формирование кода: для получения кодов исходных кодируемых символов продвигаются от корня к нужной вершине и записывают веса проходимых ребер.
Код Хаффмана Символ a b A 0 A 1 A 2 A 3 Код 0. 5 0. 3 0. 5 1 1 01 c 0. 15 0. 2 001 d 0. 05 000 1 1 0. 5 0 0. 5 1 0 0. 2 0. 3 1 0. 15 0 0. 05
Повышение эффективности кодирования v Блочное кодирование v a (0. 9); b (0. 1) Символ p I aa 0. 81 0. 09 ba 0. 09 bb 0. 01 III 1 ab II 1 1 0 Код 0 01 1 001 0 000