我暑假的作业是写一个霍夫曼压缩程序。我进行了很多搜索,但我不知道我们可以将其用于每种文件格式还是仅用于文本文件。我认为有可能,但我在这里问。
答案 0 :(得分:1)
就从输入文件读取数据并将数据写入输出文件的机制而言,将霍夫曼编码算法应用于二进制文件没有任何障碍。一个简单地读取字节,对其进行操作,然后写入字节。
就霍夫曼编码算法是否会使二进制文件变小而言,存在有关信息内容和概率分布的问题。任何压缩方案都试图通过利用数据中的模式来减少所使用的数据。例如,当有重复的字节序列时,可以用表示它们的较短代码代替它们。
文本文件通常具有很高的可压缩性,因为自然人类语言不是任意数据,而是使用有限的字符集,字符中具有许多模式,并且具有许多重复的部分。 “二进制文件”可以是任何东西。我们存储在二进制文件中的许多数据的确具有模式,并且在某种程度上可以压缩,但是某些数据的信息内容可能非常密集,并且没有可用于压缩算法的模式。
任何无损压缩算法都不可能压缩每个文件。如果压缩算法总是产生较小的文件,那么我们可以在较小的文件上再次运行它以获得更小的文件,然后重复该操作,最终将文件大小减小为零。
因此,任何压缩算法都必须使某些文件变短。实际上,由于存在给定长度且较小的固定数量的文件,因此如果使任何文件更小,则必须使某些文件变大。
答案 1 :(得分:0)
“文本文件”仅是二进制文件,带有特殊解释,该软件将以人类可读的形式呈现。使用霍夫曼编码的任何内容的可压缩性取决于特定字节值(或可能的其他字长)的频率分布。
大多数语言的文本文件使用受限制的字符集,并且频率分布非常不均匀,因此易于压缩。其他文件类型将随格式和特定内容的性质而变化。