首页 > 解决方案 > 当字符都具有相似的重复时,使用霍夫曼编码压缩文件?

问题描述

所以我一直在对一堆不同类型的文件(.jpg、.txt、.docx)实施霍夫曼压缩,我注意到很多有时压缩文件有时与原始文件几乎相同(例如:251,339 kb -> 250,917kb(没有标题!))我很确定我的代码是可靠的,但我不确定这是否正确。我注意到的是字符频率非常相似,例如,我将有 10 个字符,所有字符都有 65 次重复,然后是另外 10 个字符,重复次数为 66,然后是另外 10 个字符,重复次数为 67由于文件很大,压缩后的字符表示代码最终与原始文件大小相同,甚至更大(9位)。使用霍夫曼压缩时这是正常现象吗?

标签: javahuffman-code

解决方案


使用 Huffman 编码时,将文件分成更小的块。这个想法是,较小的块将比平均所有内容的巨型文件具有更大的偏差。例如,一个块中可能有很多 0x00。另一个块可能有 0xFF 等等。然后使用 Huffman 算法压缩每个块将利用这些偏差对其有利。当然,如果块太小,那么 Huffman 代码表将是压缩块的较大部分,您将失去分块的好处。在 Deflate 案例中,代码表的大小为 50-100 个字节。

当然,正如其他受访者所评论的那样,如果您的源文件已经被压缩(JPEG 等),您将不会发现任何偏差或冗余,但是您将其分块。


推荐阅读