哈夫曼编码

372 阅读1分钟

Huffman encode(哈夫曼编码)

Huffman 编码的基本思想就是用短的编码表示出现频率高的字符,用长的编码来表示出现频率低的字符,这使得编码之后的字符串的平均长度、长度的期望值降低,从而实现压缩的目的。

因此 Huffman 编码被广泛地应用于无损压缩领域。 可以看出, huffman 编码是一种可变编码,而不是固定长度编码。

Huffman 编码的过程包含两个主要部分:

  • 根据输入字符构建 Huffman 树
  • 遍历 Huffman 树,并将树的节点分配给字符

上面提到了他的基本原理就是——用短的编码表示出现频率高的字符,用长的编码来表示出现频率低的字符,因此首先要做的就是统计字符的出现频率,然后根据统计的频率来构建 Huffman 树(又叫最优二叉树)

image.png

如图,huffman 树以一颗二叉树。 其中节点的左子节点路径用 0 表示,右子节点用 1 表示,节点的值表示的是其权重,权重越大深度越小。深度表示的其实就是编码的长度。通常我们使用字符出现的频率作为权重。真正执行编码的时候,类似字典树,节点不用来编码,节点的路径用来编码.

例题

字符频率
a5
b9
c12
d13
e16
f45

结果这样

image.png