将霍夫曼编码用于二进制数据时,如何确定字符?

时间:2019-04-20 17:19:44

标签: compression huffman-code

我见过的所有霍夫曼编码示例都使用字母(A,B,C)作为要编码的字符,它们在其中计算每个字符的频率以生成霍夫曼树。当您要编码的数据是二进制数据时,会发生什么?我见过人们把每个字节都当作一个字符,但是为什么呢?使用8位作为“字符”的临界值似乎是任意的,为什么不使用16位呢?为什么不将32位架构用于32位?

1 个答案:

答案 0 :(得分:0)

您会意识到Huffman encoding可以使用超过256个符号。 霍夫曼编码的一些实现可以处理超过256个符号,例如

  • HuffWord,它将英语文本解析为或多或少的英语单词(通常具有大约32,000个唯一单词的文本块),并生成一个Huffman树,其中每个叶子代表一个英语单词,并使用唯一的Huffman代码进行编码
  • HuffSyllable,它将文本解析为音节,并生成一个Huffman树,其中的每个叶子代表(大约)一个英语音节,并用唯一的Huffman代码进行编码
  • DEFLATE首先将重复的字符串替换为(长度,偏移量)符号,它具有几个不同的霍夫曼表,其中一个经过优化以表示距离(偏移量),而另一个具有287个符号,其中每片叶子表示 特定长度((长度,偏移量)符号的一部分)文字字节。
  • 某些length-limited Huffman trees used in JPEG compression编码JPEG quantized的亮度值(从-2047到+2047?),最大长度为16位。

在16位体系结构或32位体系结构的计算机上,ASCII文本文件以及UTF-8文本文件和照片与8位计算机上的几乎相同,因此没有真正的理由切换到其他方法

在16位或32位体系结构上, 通常,机器代码是16位对齐的,因此带有16位符号的静态Huffman可能有意义。

静态霍夫曼的开销是为每个符号传输有关位长的信息,因此接收器可以重建解压缩所需的码字。 8位静态Huffman标头中的257个左右的位长对于“短字符串压缩”而言已经太大了。 正如sascha所指出的那样,将16位用于一个“字符”将需要更多的开销(大约65,000个位长),因此具有16位输入的静态霍夫曼编码仅对那些开销不太重要的长文件有意义。 >