Какова основная техника хранения дерева Хаффмана вместе с закодированным потоком битов в виде файла? - PullRequest
1 голос
/ 13 февраля 2011

Как я могу сохранить закодированный битовый поток Хаффмана в виде двоичного файла?

1 Ответ

3 голосов
/ 13 февраля 2011

Чтобы сохранить кодировку, вам потребуется три вещи:

  1. Какой-то способ восстановления дерева кодирования, отображающего каждый символ в битовую комбинацию.
  2. Фактическая кодировкапотока.
  3. Какой-то способ определения конца закодированных данных.

Существует множество способов решения каждой из этих проблем.Вы можете явно хранить шаблоны битов для каждого символа в таблице или просто использовать одну и ту же таблицу кодирования для всех потоков, которые вы сжимаете.Что касается определения конца потока, одним из вариантов может быть использование символа псевдо-EOF для завершения этого потока.Для этого, когда вы создаете дерево кодирования Хаффмана, добавьте к нему новый символ с кратностью, который будет служить в качестве часового, обозначающего конец потока.При записи результата вы пишете этот символ в конце, так что вы можете сказать, где заканчивается поток, даже если он не использует количество бит, которое идеально вписывается в байт.

Для хранения фактического содержимогоЯ бы предложил буферизовать закодированное представление в битовый вектор, который автоматически сбрасывается в файловый поток кратно восьми битам.Конечно, это не единственный способ сделать это, так что выбирайте то, что работает лучше всего.

...