Я работаю над кодировкой Хаффмана на Java. Я не понимаю, как и где хранить дерево. Я знаю, как сделать дерево, а затем сохранить его как двоичный файл, но для цели декодирования нам снова понадобится то же дерево для декодирования. Как сохранить это дерево в файле, чтобы связать его с двоичным файлом?Как сохранить дерево Хаффмана в файле?
ответ
Напишите дерево как последовательность бит: 0 представляет лист, 1 представляет собой внутренний узел. Выход для двоичного дерева (Huffman или иначе) с N листовыми узлами и внутренними узлами N-1 будет представлять собой последовательность из 2N-1 бит. (Фактически вы можете сохранить два бита, поскольку вы знаете, что первый и последний узлы в дереве будут листовыми узлами, но, вероятно, не стоит усложнять алгоритм для сохранения двух бит.)
Возможно, проще всего расположить биты в предварительном порядке:
function write_tree (top_node) {
if is_leaf(top_node) {
write "0"
// optionally, write any date associated with the leaf node
// although in practice it's easier to write the leaf data
// to a separate output stream. That lets this stream contain
// actual bits rather than the characters "0"/"1"
}
else {
write "1"
write_tree (top_node.left)
write_tree (top_node.right) }}
function read_tree (bit_stream) -> returns tree
next_bit = bit_stream.read()
if next_bit = "0" {
root = new leaf
// optionally read data associated with the leaf node
}
else {
root = new internal node
root.left = read_tree (bit_stream)
root.right = read_tree (bit_stream) }
return root }
я не заметил сначала, что вы упомянули Java, так что я написал выше, в псевдо-коде, который я уверен, что у вас не будет никаких проблем переписывания в Java ,
Спасибо за вашу помощь, но я не сталкиваюсь с проблемой в создании дерева и присваивании кодов символам. Я не понимаю, как мы можем сохранить дерево в файле, чтобы такое же дерево можно было использовать для декодирования кода? см. дерево, которое мы создаем, в нашей памяти, используя связанный список, то как мы можем сохранить его в файле? – 5400824
Но это именно то, что я вам дал код! Последовательность бит точно кодирует ** форму ** дерева. Чтение этих бит позволяет построить новое дерево с точно такой же формой. Очевидно, что биты будут записаны и позже будут прочитаны из файла. В дереве Хаффмана все внутренние узлы имеют валентность 2, и все данные привязаны к листовым узлам (которые имеют валентность 0). Данные могут быть записаны отдельно в последовательном порядке в отдельный файл или в другую часть того же файла или, как указано, вкратце с битами точно там, где указан соответствующий листовой узел. – ganbustein
Извините, может быть, я не понимаю вашу точку зрения. Спасибо, теперь я понял. – 5400824
- 1. Как нарисовать дерево Хаффмана правильно
- 2. Дерево Хаффмана для больших файлов
- 3. Как сделать дерево хаффмана в схеме?
- 4. Как сериализовать дерево Хаффмана в C++
- 5. Чтобы сохранить двоичное дерево в файле
- 6. Восстановить дерево хаффмана по huffman table
- 7. Должно быть, должно быть двоичное дерево Хаффмана?
- 8. Дерево Хаффмана с максимальной высотой, хорошие вопросы?
- 9. Создайте дерево хаффмана из таблицы кодов
- 10. Дерево кодирования Хаффмана - Неисправность очереди приоритетов
- 11. Как я могу отобразить дерево Хаффмана в консоли?
- 12. Как создать дерево Хаффмана из заголовка FFC4 (DHT) в файле jpeg?
- 13. Как сохранить значения из кодировки Хаффмана
- 14. Необходимость помощи Хаффмана
- 15. Дерево Хаффмана с заданной частотой Смутно как начать? Java
- 16. Создать дерево кода Хаффмана из min-heap C++
- 17. Хранение и реконструкция дерева Хаффмана
- 18. Реконструкция дерево Хаффмана из (предпорядка) в битовой строке Haskell
- 19. Confused о Хаффмана Деревья
- 20. Помогите Сериализации в сохранении дерева Хаффмана в файл
- 21. Как создать префиксный код Хаффмана?
- 22. Нужен способ написать мое дерево Хаффмана для моей кодировки
- 23. Python: как сохранить двоичное дерево?
- 24. Дерево Хаффмана, застрявшее на последнем не-внутреннем узле
- 25. Файл кодировки Хаффмана в C++
- 26. Длина кода Хаффмана
- 27. Доказательство. Каждое абсолютное двоичное дерево может представлять собой ряд Хаффмана
- 28. Поиск пути на дереве Хаффмана
- 29. Алгоритм декодирования Хаффмана
- 30. Дерево Хаффмана для частот i-го алфавита 2^i?
Где мой код? Какой язык программирования? – Raptor
он сказал java, если вы обратили внимание –
показать код, который вы пробовали. –