📜  霍夫曼代码

📅  最后修改于: 2020-12-10 06:41:46             🧑  作者: Mango

霍夫曼码

  • (i)可以使用霍夫曼码对数据进行有效编码。
  • (ii)它是一种广泛使用的有益数据压缩技术。
  • (iii)霍夫曼的贪婪算法使用每个字符出现频率的表来建立将每个字符表示为二进制字符串的最佳方式。

假设数据文件中有10个5个字符。普通存储:每个字符8位(ASCII)-文件中的8 x 10 5位。但是我们要压缩文件并紧凑地保存它。假设文件中仅出现六个字符:

我们如何以紧凑的方式表示数据?

(i)固定长度代码:每个字母由相等位数表示。使用固定长度的代码,每个字符至少3位:

例如:

对于具有10 5个字符的文件,我们需要3 x 10 5位。

(ⅱ)一种可变长度代码:它可以做相当好于一个固定长度的代码,通过给多的字符的短码字和偶发字符长码字。

例如:

因此,用224,000位表示该文件,节省了大约25%。这是此文件的最佳字符代码。

前缀代码:

一个字符的编码前缀不能等于另一个字符的完整编码,例如1100和11001是无效代码,因为1100是某些其他代码字的前缀,称为前缀代码。

前缀代码是可取的,因为它们阐明了编码和解码。对于任何二进制字符代码,编码总是很简单;我们将描述文件每个字符的代码字连接起来。使用前缀代码也可以很方便地进行解码。由于没有代码字是任何其他字词的前缀,因此以编码数据开头的代码字是明确的。

构造霍夫曼码的贪婪算法:

霍夫曼(Huffman)发明了一种贪婪算法,该算法可创建称为“霍夫曼码(Huffman Code)”的最佳前缀码。

该算法以自下而上的方式构建类似于最佳代码的树T。它以| C |的集合开始离开(C是字符数)并执行| C | -1个“合并”操作以创建最终树。在霍夫曼算法中,“ n”表示一组字符的数量,z表示父节点,x和y分别是z的左右子节点。