Составители:
155 156
например 0. Затем кодируется следующий символ во входном
потоке, и если этот символ встретился впервые, то он также
записывается в выходной поток в незакодированном виде, и
помещается в дерево Хаффмана, где ему присваивается код в
соответствии с его текущей частотой появления, равной 1. По
мере того как поступают символы на вход кодера, происходит
подсчёт числа их появления и их количества в соответствии с
этой информацией выполняется перестройка дерева Хаффма-
на. Для того, чтобы отличить незакодированный символ от
кода переменной длины применяется специальный esc
(escape) символ, который показывает, что за ним следует не-
закодированный символ. Код самого esc символа должен на-
ходиться в дереве Хаффмана и будет меняться каждый раз по
мере кодирования информации.
Рассмотрим пример кодирования последовательности
символов AFFAADB. Поскольку в начале кодирования дерево
Хаффмана- пустое, в выходной поток записывается 8-ми би-
товый код символа A (01000001), который затем добавляется
в дерево Хаффмана. (рис.9.8.)
Выходной поток 01000001
Счётчик А:1
1 0
Esc A
Рис.9.8. Кодирование первого символа
Следующий символ F записывается в выходной поток как код
ASC2 символа, но перед ним ставится ещё и esc символ
(рис.9.9.)
Выходной поток 01000001 1 01000110
Счётчик А:1
Счётчик F:1
1 0
A
1 0
Esc F
Рис 9.9. Кодирование второго символа
Далее третий символ опять F , для него имеется код в дереве
Хаффмана, поэтому этот код записывается в выходной поток,
а счётчик для F увеличивается на 1. (рис.9.10.)
Выходной поток 01000001 1 01000110 10
Счётчик А:1
Счётчик F:2
1 0
F
1 0
Страницы
- « первая
- ‹ предыдущая
- …
- 58
- 59
- 60
- 61
- 62
- …
- следующая ›
- последняя »