我现在正在测试Huffman编码,我想知道哪些类型的文件(如.txt,.jpg,.mp3等)在进行基于Huffman的压缩时会经历良好的压缩。我在java中实现了霍夫曼编码,我发现我的.txt文件(普通英文文本)减少了大约40%,而.jpg,.mp3和.mp4减少了近0% - 1%文件(当然我还没有在1 MB以上的大文件上测试它,因为我的程序非常慢)。我知道霍夫曼编码最适合那些频繁出现符号的文件,但是我不知道视频,音频或图像文件中有哪种符号,因此问题就在于此。既然我已经设计了这个程序(我在学校做了我的项目,我不会否认它,我自己做了,我只是要求我的研究指点),我想知道它会在哪里工作得很好。
感谢。
注意:我最初只为.txt文件创建了这个项目,而且我很奇怪,它也在处理所有其他类型的文件,因此我想测试它,因此我不得不问这个问题。我发现对于图像文件,你不是自己编码符号,而是编码一些RGB值?如果我错了,请纠正我。
答案 0 :(得分:4)
这完全取决于文件中的冗余量。
在任何文件中,每个字节占用8位,每个字节允许256个不同的符号。在文本文件中,实际使用了相对较少数量的符号,并且符号的分布不是平坦的(e
s比q
s更多。因此,信息“密度”更像是每字节5位。
JPEG,MP3和MP4已经过压缩,几乎没有冗余。使用所有256个符号,频率大约相等,因此信息“密度”非常接近每字节8位。你无法进一步压缩它。