【发布时间】:2014-11-23 11:23:50
【问题描述】:
我正在尝试对文本压缩算法进行逆向工程,但我已经在一个地方停留了大约一个月。 一般来说,here's C 中的解码器代码。它工作得很好,但我仍然不明白压缩方案是如何工作的。 问题部分是 GetNextChararacter 函数。
我不明白这种迭代比特流格式。它看起来像是以一种奇怪的方式序列化的二叉霍夫曼树。 所以迭代比特流就像递归树,算法在当前节点遍历所有叶子时进行搜索并输出叶子数。之后,源比特流向前跳过迭代比特流中的一些比特。如果设置了当前位置的iterBit,我们遍历迭代流的剩余部分并将结果添加到前一个偏移量。依此类推,直到我们在迭代偏移中到达叶子。到达叶子的总数是字符列表中用于解码字符的偏移量。
所以这是我第一次看到树用于存储其中的全部叶子。这种方案的压缩看起来过于复杂。同时,我觉得,代码做了一些非常基本的事情,但我对算法的理解是错误的。 谁能告诉我该算法是否还有其他更合乎逻辑的解释,或者它是否只是在其他地方进行了描述?
【问题讨论】:
-
貌似Rice–Golomb编码,其实很常见。它通常用于压缩图像和音频数据。
-
但是在这里我根本看不到余数部分,尽管商部分不是以 1 终止的。此外,我们计算的不是商块中的位数,而是块的数量。它是某种 Golomb 编码变体吗?
标签: serialization tree compression reverse-engineering huffman-code