Коды в виде деревьев
Ниже показано, как бинарные коды фиксированной длины и беспрефиксные коды могут быть представлены в виде двоичных деревьев, где каждый лист соответствует кодовому слову, левое ребро обозначает бит $``0’’$, а правое — бит $``1’’$.
Бинарные коды фиксированной длины
Код фиксированной длины над алфавитом из $n$ символов с длиной кодового слова $L = \lceil \log_2 n \rceil$ соответствует полному двоичному дереву глубины $L$. Каждый лист располагается ровно на уровне $L$.
Пример
Пусть $\Sigma = \lbrace A, B, C, D \rbrace$, тогда $L = 2$.
Дерево может выглядеть так:
Пути:
Символ | Путь | Кодовое слово |
---|---|---|
A | влево $\rightarrow$ влево | 00 |
B | влево $\rightarrow$ вправо | 01 |
C | вправо $\rightarrow$ влево | 10 |
D | вправо $\rightarrow$ вправо | 11 |
Поскольку все листья находятся на одной глубине, декодирование тривиально: достаточно читать по 2 бита за раз.
Бинарные коды переменной длины
Любой код переменной длины можно представить в виде корректного двоичного дерева, в котором:
- Каждый лист соответствует кодовому слову одного символа.
- Так как код беспрефиксный, ни одна внутренняя вершина не является листом — то есть при достижении листа декодирование завершается.
Пример
Рассмотрим алфавит $\Sigma = \lbrace A, B, C, D \rbrace$ с весами, дающими следующие коды Хаффмана:
Символ | Кодовое слово |
---|---|
A | 0 |
B | 10 |
C | 110 |
D | 111 |
Глубины листьев:
Символ | Глубина |
---|---|
A | 1 |
B | 2 |
C | 3 |
D | 3 |
Last updated 09 мая 2025, 23:43 +0500 .