我正在尝试用Java编写带有Huffman压缩程序的 BWT 。在 BWT 中,我想实现距离编码(DC)。我正在寻找一些例子,但没有那么多。
我找到了这个例子:
http://www.cs.ucr.edu/~stelo/cpm/cpm07/move_to_front_gagie.pdf
DC以29页开头。但它真的很难理解,因为没有评论。
也许某人已经实现了DC或者知道如何在实际代码中实现它? :)
我理解那个首先需要写出char的部分。但是随着距离我没有得到它。
我红色表示每个字符,DC在序列中找到它的下一个出现并将其写入S并输出距离。如果没有出现,则写入0。
感谢。
答案 0 :(得分:1)
我用Java编写了一个实现: http://code.google.com/p/kanzi/source/browse/java/src/kanzi/function/DistanceCodec.java
您可以在代码的开头看到算法的解释(完整示例)。 另外,看一下Block编码器(它包括BWT + MoveToFront +零长度变换+熵编码): http://code.google.com/p/kanzi/source/browse/java/src/kanzi/function/BlockCodec.java
我尝试使用距离编码而不是移动到前面。与MTFT相比,DC的输出更小(压缩效果更好)。然而,在熵编码之后,结果是相反的:MTFT看起来更适合于熵压缩。