Алгоритм Хаффмана с потоком в Node JS
Я реализовал алгоритм Хаффмана в Node JS, и он выглядит так:
huffman.encode(inputFilename, outputFilename)
huffman.decode(inputFilename, outputFilename)
Но я хочу реализовать это так:
inputStream.pipe(HuffmanEncoderStream).pipe(outputStream)
outputStream.pipe(HuffmanDecoderStream).pipe(inputStream)
И проблема в том, что мне нужно дважды прочитать содержимое исходного файла. Во-первых, для создания таблицы частот и дерева Хаффмана, а во-вторых, для точного кодирования контента. Так можно ли реализовать эту задачу с помощью Transform Stream?
PS с расшифровкой проблем нет
1 ответ
Алгоритм Хаффмана требует, чтобы у вас были сначала все данные, чтобы вычислить частоты. Однако ничто не мешает вам применить алгоритм Хаффмана к фрагментам ваших данных, что позволит осуществлять потоковую передачу. Если фрагменты достаточно велики (от 100 K до МБ), накладные расходы на передачу описания кода будут очень небольшими по сравнению. Если данные однородны, вы получите примерно такое же сжатие. Если данные неоднородны, ваше сжатие может даже улучшиться, так как коды Хаффмана будут оптимизированы для статистики данных, локальных для этого фрагмента.