- •Теоретические основы информационных процессов введение
- •1.Кодирование сообщений
- •§1. Информационные процессы
- •§2. Передача и кодирование данных в аис
- •§3. Сжатие данных как информационный процесс
- •§4. Сжатие на основе смыслового содержания данных
- •§5. Переход от естественных обозначений к более компактным.
- •§6. Подавление повторяющихся символов
- •§7. Кодирование часто используемых данных
- •§8. Сжатие данных на основе сравнения
- •§9. Целесообразность сжатия данных
- •§10. Сжатие на основе статистических свойств данных и неравномерные коды
- •§11. Двоичное кодирование и бинарные деревья
- •§12. Кодирование сообщений словами переменной длины
- •§13. Процедура Шеннона-Фано
- •§14. Процедура Хафмана
- •§15. Кодирование последовательностей символов
- •§16. Помехоустойчивость данных
- •§17. Методы обеспечения помехоустойчивости
- •§18. Способность кодов обнаруживать и исправлять ошибки
- •2. Поиск данных
- •§1. Проблема поиска данных
- •§ 2. Виды зу
- •§3. Поиск на основе преобразования ключа в адрес
- •§4. Перемешивание
- •§5. Поиск на основе сравнения ключей
- •§6. Последовательный поиск
- •§7. Блочный поиск
- •§8. Двоичный поиск
- •§9. Поиск по бинарному дереву
- •§10. Чистый бинарный поиск
- •§11. Помехоустойчивый поиск
- •§12. B-деревья: общие сведения
- •§13. B-деревья: добавление ключей
- •§14. B-деревья: удаление ключей
§14. Процедура Хафмана
Рассмотренная в §13 процедура Шеннона-Фано является простым, но не всегда оптимальным алгоритмом построения экономного кода. Причина состоит в том, что способ разбиения на подмножества ограничен: вероятности сообщений, отнесенных к первому подмножеству, всегда больше или всегда меньше вероятностей сообщений, отнесенных ко второму подмножеству. Оптимальный алгоритм, очевидно, должен учитывать все возможные комбинации при разбиении на равновероятные подмножества. Это обеспечивается в процедуре Хафмана.
Процедура Хафмана представляет собой рекурсивный алгоритм, который строит бинарное дерево «в обратную сторону», т.е. от конечных вершин к корню. Основная идея алгоритма состоит в том, чтобы объединить два сообщения с наименьшими вероятностями – например, p1 и p2 – в одно множество и далее решать задачу с m-1 сообщениями и вероятностями p1’ = p1 + p2; p2’ = p3; … ; pm-1’ = pm. Кодовое дерево, построенное процедурой Хафмана для рассматриваемого примера, приведено на рис.1.6.
Рис.1.6
Кодовое дерево в процедуре Хафмана
Расчеты по формуле 1.3 дают среднее значение длины кодового слова λkS=3,145 (бит/сообщение), что совпадает с результатом применения процедуры Шеннона-Фано. Это означает, что для данного примера процедура Шеннона-Фано также оказалась оптимальной.
§15. Кодирование последовательностей символов
Пусть количество передаваемых сообщений заранее неизвестно и, следовательно, заранее неизвестны вероятности поступления каждого из сообщений на вход канала связи. Однако, известно, что сообщения формируются из символов алфавита A={a,b}, появляющихся независимо друг от друга с вероятностями p1=0,7 и p2=0,3.
При посимвольном кодировании этих сообщений, например, с помощью процедуры Шеннона-Фано, получим равномерные коды, приведенные в таблице 1.2:
Таблица 1.2
Символ ai |
Вероятность pi |
Кодовое слово ki |
Средняя длина кодового слова λkA |
a |
0,7 |
1 |
1 бит/символ |
b |
0,3 |
0 |
Однако, процедуру Шеннона-Фано можно применить не только к отдельным символам алфавита A, но также и к их всевозможным комбинациям – двухсимвольным, трехсимвольным и т.д. – другими словами, можно кодировать целые последовательности символов в сообщениях (при условии, что сообщения будут иметь длину, кратную числу символов в каждой такой последовательности).
Например, для всевозможных двухсимвольных последовательностей алфавита A получим данные, приведенные в таблице 4.3. Из сравнения данных в таблицах 1.2 и 1.1 видно, что кодирование двухсимвольных комбинаций более экономно, чем трехсимвольное кодирование. Еще лучшие результаты дает трехсимвольное кодирование (0,895 бит.символ).
Таблица 1.3
Последовательность символов aiaj |
Вероятность pij |
Кодовое слово kij |
Средняя длина кодового слова λkA |
aa |
0,49 |
1 |
0,905 бит/символ |
ab |
0,21 |
01 | |
ba |
0,21 |
001 | |
bb |
0,09 |
000 |
При дальнейшем увеличении размерности кодируемых комбинаций средняя длина кодового слова уменьшается, стремясь к предельному значению, приблизительно равному 0,881 бит/символ. Повышение экономности кода достигается за счет того, что с увеличением числа кодируемых последовательностей расширяется диапазон возможных значений вероятностей их появления и на каждом шаге кодирования удается точнее разбивать множество кодируемых последовательностей на приблизительно равновероятные подмножества.