【问题标题】:Huffman text compression tree traverse algorithm霍夫曼文本压缩树遍历算法
【发布时间】:2014-11-23 11:23:50
【问题描述】:

我正在尝试对文本压缩算法进行逆向工程,但我已经在一个地方停留了大约一个月。 一般来说,here's C 中的解码器代码。它工作得很好,但我仍然不明白压缩方案是如何工作的。 问题部分是 GetNextChararacter 函数。

我不明白这种迭代比特流格式。它看起来像是以一种奇怪的方式序列化的二叉霍夫曼树。 所以迭代比特流就像递归树,算法在当前节点遍历所有叶子时进行搜索并输出叶子数。之后,源比特流向前跳过迭代比特流中的一些比特。如果设置了当前位置的iterBit,我们遍历迭代流的剩余部分并将结果添加到前一个偏移量。依此类推,直到我们在迭代偏移中到达叶子。到达叶子的总数是字符列表中用于解码字符的偏移量。

所以这是我第一次看到树用于存储其中的全部叶子。这种方案的压缩看起来过于复杂。同时,我觉得,代码做了一些非常基本的事情,但我对算法的理解是错误的。 谁能告诉我该算法是否还有其他更合乎逻辑的解释,或者它是否只是在其他地方进行了描述?

【问题讨论】:

  • 貌似Rice–Golomb编码,其实很常见。它通常用于压缩图像和音频数据。
  • 但是在这里我根本看不到余数部分,尽管商部分不是以 1 终止的。此外,我们计算的不是商块中的位数,而是块的数量。它是某种 Golomb 编码变体吗?

标签: serialization tree compression reverse-engineering huffman-code


【解决方案1】:

感谢所有参与其中的人。 一旦我建造了树并试图用手爬进去,我就想通了。 一般来说,迭代比特流是一棵二叉树,序列化in pre-order traversal。看起来很难识别汇编代码中的树遍历。 源流是该树中的普通路径。 整个压缩方案只是一个霍夫曼,每个字符都有单独的树。文本的下一个字符根据前一个字符的树进行解码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多