我编写了一个实现霍夫曼编码的程序,我在3种不同类型的文件上测试了它,然后在Matlab的散点图上绘制了它们的频率。
是3种不同类型的文件 文本文件(.txt):我能够将文件大小从65 KB
缩小到37 KB
,即几乎像43%的压缩。
音频文件(.mp3):我能够将文件大小从99 KB
缩减到98 KB
,即几乎像1%压缩(LOL)
压缩文件(.rar):我能够将文件大小从16.1 KB
减少到16.2 KB
,即几乎像-1%压缩(Big LOL)。
现在我在压缩之前获取每个文件中出现的字符频率,并在Matlab中制作散点图。例如,在本文中:mimmi
,m出现3次,我出现2次,所以我在x轴上绘制数字2和3,它们相应的y值只是一些随机数(它们不是我们的关注)。所以这里是这三个文件的图,那么如何从这些图中看出某个图经历了良好的压缩并且某个图经历了不良的压缩?我期待答案是这些点在一起或多远的距离,所以我需要你的帮助。
下面给出了情节。 X轴包含文件中出现的字符的频率,而Y轴是我们不关心的。我映射了Y,因此每个点都是单独绘制的,而不是一个在另一个上面(这会破坏我们分析的目的)。
注意:我的Huffman程序对于文本文件以外的文件失败了,我已经在SO上回答了问题,似乎其他类型的文件已经被压缩了(就像我的第三次使用rar文件压缩的情况一样)我的压缩率为-1%。
P.S我不确定我是否能够清楚地解释我的问题,但如果有人问我,我会再次编辑它。
答案 0 :(得分:0)
如果您尝试从频率估算压缩,则可以简单地计算熵。
将字节值的频率乘以频率的对数基数2(对于那些非零的频率)。然后从输入长度中减去该总和乘以长度的对数基数2。如果长度为零,则熵为零。
那将以比特为单位给出熵。您可以除以8以得到霍夫曼压缩结果中字节数的近似值。