Должно ли дерево кода Хаффмана в алгоритме Deflate быть полным деревом?

#zlib #deflate

#zlib #deflate

Вопрос:

Должно ли дерево кода Хаффмана в алгоритме Deflate быть полным деревом? Под полным деревом я подразумеваю, что каждый конечный узел всегда должен представлять один символ. Другими словами, последнему символу с самым длинным кодом будут присвоены все единицы.

Возьмем, к примеру, крайний случай: для 286 символов каждый символ кодируется 15-битным кодом, что возможно при общем кодировании дерева Хаффмана. Однако в этом случае существует 2 ^ 15 — 286 конечных узлов, которые не назначаются / не используются. Разрешено ли это в Deflate? У меня сложилось впечатление, что это не разрешено в Deflate, и дерево должно быть полным. Это правда?

Ответ №1:

За исключением одного случая, коды Хаффмана, описанные в динамическом блоке в допустимом потоке deflate, должны быть полными. Это код длины бита, код литерала / длины и код расстояния.

Единственное исключение состоит в том, что если используется только один символ расстояния, он кодируется одним битом (нулем), а не нулевыми битами, оставляя один неиспользованный код (единственный бит равен единице).