Предположим, у нас есть следующая каноническая таблица кода Хаффмана.Канонический кодировщик Хаффмана: содержимое кодированного битового потока
Symbol Code-length Codeword
A 2 00
B 2 01
C 2 10
D 2 11
Теперь мы читаем символы из входного файла и кодируем его, просто просматривая приведенную выше таблицу. Однако многие ресурсы говорят, что в случае канонического Хаффмана мы не должны отправлять кодовые слова. Вместо этого достаточно длины кода для каждого символа.
Если текстовый файл содержит ACCDB, следует ли передавать 00 01 10 11 или 10 10 10 10 (двоичный эквивалент соответствующей длины кода) в качестве закодированного битового потока? Пожалуйста, исправьте меня, если я ошибаюсь, и я ценю любое объяснение.
Кроме того, если это так для канонического Хаффмана, как бы мы декодировали этот бит-поток, чтобы вернуть исходные символы ACCDB (без использования дерева Хаффмана в декодере)?
После внесения изменений в вопрос, это еще не префиксный код. A является префиксом как C, так и D. В префиксном коде код не может содержать какой-либо другой код в качестве его префикса. –
Теперь это неполный код. 100 и 111 не используются. Вы можете вырезать последний бит C и D, чтобы сделать эти 10 и 11, чтобы сделать его полным кодом, с длиной 2 2 2 2. Единственные допустимые длины кода с четырьмя символами - 2 2 2 2 и 1 2 3 3. –