java - 当字符都具有相似的重复时,使用霍夫曼编码压缩文件?
问题描述
所以我一直在对一堆不同类型的文件(.jpg、.txt、.docx)实施霍夫曼压缩,我注意到很多有时压缩文件有时与原始文件几乎相同(例如:251,339 kb -> 250,917kb(没有标题!))我很确定我的代码是可靠的,但我不确定这是否正确。我注意到的是字符频率非常相似,例如,我将有 10 个字符,所有字符都有 65 次重复,然后是另外 10 个字符,重复次数为 66,然后是另外 10 个字符,重复次数为 67由于文件很大,压缩后的字符表示代码最终与原始文件大小相同,甚至更大(9位)。使用霍夫曼压缩时这是正常现象吗?
解决方案
使用 Huffman 编码时,将文件分成更小的块。这个想法是,较小的块将比平均所有内容的巨型文件具有更大的偏差。例如,一个块中可能有很多 0x00。另一个块可能有 0xFF 等等。然后使用 Huffman 算法压缩每个块将利用这些偏差对其有利。当然,如果块太小,那么 Huffman 代码表将是压缩块的较大部分,您将失去分块的好处。在 Deflate 案例中,代码表的大小为 50-100 个字节。
当然,正如其他受访者所评论的那样,如果您的源文件已经被压缩(JPEG 等),您将不会发现任何偏差或冗余,但是您将其分块。
推荐阅读
- html - 如何在 col-xs-12 div 中水平居中子项?
- python - 在 Cognito 上访问我的用户详细信息对网络开放
- django - 如何在 Django 2.1 中显示服务器的任意图像?
- node.js - Nodejs + Typescript:如何用模型定义响应结构
- python - Python - 添加到数据框的现有行
- unix - RAM 中的虚拟内存和页面
- php - 警告:preg_replace_callback():需要参数 2, 'str_replace(array('.', ',', "'", ' '), '', '\1') 。'.\4'',作为一个有效的回调
- c# - MVVM Combobox 绑定:从/向更多源设置和获取数据
- jquery - Jquery:如何自动将 window.location.hash 应用为与按钮 ID 相同的数字?
- r - r中的散点图具有巨大的独特观察