1

我在 Node JS 中实现了Huffman 算法,它看起来像这样:

huffman.encode(inputFilename, outputFilename)
huffman.decode(inputFilename, outputFilename)

但我想像这样实现它:

inputStream.pipe(HuffmanEncoderStream).pipe(outputStream)
outputStream.pipe(HuffmanDecoderStream).pipe(inputStream)

问题是我需要两次读取源文件的内容。首先是创建频率表和霍夫曼树,其次是对内容进行精确编码。那么有没有可能用 Transform Stream 来实现这个任务呢?

PS带解码没问题

4

1 回答 1

0

霍夫曼算法要求您首先拥有所有数据才能计算频率。但是,没有什么能阻止您将 Huffman 算法应用于数据块,这将允许流式传输。如果块足够大(K 到 MB 的 100 个),则传输代码描述的开销相比之下将非常小。如果数据是同质的,您将获得大致相同的压缩率。如果数据不是同质的,您的压缩甚至可能会提高,因为 Huffman 代码将针对该块本地数据的统计信息进行优化。

于 2020-09-27T23:18:14.623 回答