Код переменной длины
Код переменной длины — это способ кодирования, при котором разные символы сообщения получают кодовые слова неодинаковой длины. Чтобы такое сообщение можно было восстановить без двусмысленности, код должен удовлетворять дополнительным условиям, например быть префиксным или иметь разделители.
Как читается такой код
В коде переменной длины границы между кодовыми словами не всегда видны сразу. Например, последовательность 010 может означать 0|10, 01|0 или 0|1|0. Поэтому таблицу кодирования составляют так, чтобы получатель мог единственным образом определить границы слов. Удобное условие: ни одно кодовое слово не должно быть началом другого. Такой код называется префиксным.
Пусть символам соответствуют коды: А — 0, Б — 10, В — 11. Код 01011 читается однозначно: 0|10|11, то есть АБВ. Код 0 не является началом кодов 10 и 11, а 10 и 11 не являются началами других слов.
В задачах по эффективности кодирования иногда вычисляют среднюю длину кодового слова: \(l_i\) — длина кода символа, а \(p_i\) — число его появлений или вероятность. Код переменной длины позволяет уменьшить среднюю длину, если часто встречающимся символам назначить короткие коды.
Переменная длина сама по себе не гарантирует однозначного декодирования. Например, коды А — 0 и Б — 01 образуют неоднозначную систему: последовательность 01 можно прочитать как Б или как АА, если код А повторяется с другими условиями. Для надёжного чтения нужны префиксное свойство, разделители или заранее известные границы.
Какой набор кодовых слов является префиксным?
Главное
- Код переменной длины содержит кодовые слова разной длины.
- Для однозначного чтения нужны дополнительные условия; часто используют префиксный код.
- Короткие коды для частых символов могут уменьшить среднюю длину сообщения.