【发布时间】:2011-02-16 14:30:47
【问题描述】:
我出于学术目的在 haskell 上编写了一个小型(相对)应用程序。我正在实现 Huffman 压缩,基于此代码 http://www.haskell.org/haskellwiki/Toy_compression_implementations 。
我的代码变体在这里https://github.com/kravitz/har/blob/a5d221f227c27fd1c5587217a29a169a377521a6/huffman.hs,它使用惰性字节串。当我实现 RLE 压缩时,一切都很顺利,因为它一步处理输入流。但是 Huffman 对其进行了两次处理,结果我在内存中存储了一个评估的字节串,这对大文件不利(但对于相对较小的文件,它也在堆中分配了太多空间)。这不仅是我的怀疑,因为 profiling 还表明大部分堆都被字节串分配吃掉了。
我还序列化了文件中的流长度,它也可能导致完整的字节串加载到内存中。有什么简单的方法可以说 ghc 友善并多次重新评估流?
【问题讨论】:
-
Adaptive Huffman Coding 只需要一次通过。
-
很好,但实际上我的任务是通过两遍方式实现霍夫曼压缩。我为此选择了haskell,因为我正在努力学习这门语言,并且通常知识伴随着实践。
标签: optimization haskell compression ghc huffman-code