Node JS中具有流的霍夫曼算法

问题描述

我已经在Node JS中实现了霍夫曼算法,它看起来像这样:

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

但是我想这样实现:

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

问题是我需要读取源文件内容两次。首先创建频率表和霍夫曼树,然后精确地编码内容。那么可以使用Transform Stream实现此任务吗?

P.S。解码没有问题

解决方法

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