Не существует окончательной версии адаптивного Хаффмана, вот некоторые предположения, которые я сделал, чтобы придумать одно возможное решение:
- Кодер для каждого символа адаптивен
- Дерево построено в полете, вы начинаете с пустого дерева, которое
содержит только escape-символ
- Символ Escape всегда имеет вес 0
- Левая ветвь - кодовый бит 0, правая ветвь - 1
Сначала в заглушке дерева нет ветвей, поэтому для декодирования escape-символа стоит 0 битов.
Далее получен буквенный код 011 => 4 . Добавлены два новых узла: родительский узел (вес 1) и символ 4 (код 0, вес 1). Экранирующий символ имеет код 1 и вес 0.
Далее код 0 декодируется => 4 , символ 4 имеет вес 2.
Далее код 0 декодируется => 4 , символ 4 имеет вес 3.
Далее код 1 декодируется => escape. Получен буквенный код 000 => 1 . Добавлены два новых узла: родительский узел (вес 1) и символ 1 (код 10, вес 1). Экранирующий символ имеет код 11 и вес 0.
и т. Д. В какой-то момент узлы, возможно, придется переместить, чтобы исправить дисбаланс, но, видимо, не в этом упражнении.