Кодирование Хаффмана определяет, как создать дерево Хаффмана из некоторой последовательности символов, а затем как его кодировать в последовательность битов.
В нем не указано, как следует кодировать дерево или как изображатьточно, сколько бит читать.Точное количество битов является проблемой, потому что вы можете сохранить в файл только целые байты.И поэтому вам нужен какой-то способ точно определить, какой именно бит должен заканчиваться.
Для кодирования дерева есть несколько вариантов.Одним из них является запись количества для каждого символа и позволить декодеру восстановить дерево из этого.Другой вариант заключается в том, чтобы как-то напрямую кодировать дерево, например, используя описание подхода 0-1 (и я полагаю, что описанные вами статьи) описывает.
Затем существует адаптивное кодирование Хаффмана , которое неДерево вообще не требуется, но сложнее.
Чтобы решить, когда заканчивать, вы можете записать общее количество символов в файл и использовать его, чтобы решить, когда остановиться.Или вы можете получить этот счет бесплатно, если вы закодировали дерево, используя количество символов.
Другой вариант - использовать символ EOF.Это символ, который находится в вашем дереве Хаффмана, но не кодирует нормальное значение.Вы можете представить его как 257-е значение, предполагая, что вы кодируете байты.(Вы могли бы использовать какое-нибудь нормальное значение, например нулевой байт, для токена EOF, но для этого вам необходимо быть абсолютно уверенным, что он не будет присутствовать во входном файле.)