快捷搜索:  汽车  科技

哈夫曼编码的数据结构和算法(漫步计算机系统)

哈夫曼编码的数据结构和算法(漫步计算机系统)F:1E:4首先,我们统计这串字符中每个字符出现的次数,作为权值:A:8D:1

定义:给定有N个权值的N个叶子结点,每个叶子结点代表一个字符,权值可表示为字符出现的频率或概率。构造出一棵带权路径最小的二叉树即最优二叉树,权值较大的结点离根结点较大,使这些字符组成的串所需的二进制编码最少。

哈夫曼编码在通讯领域应用广泛。

在通讯中,需要将字符串转换为二进制串,假设要传输的字符串为“AFTERDATAEARAREARTAREA”,现在我们就来将其编码:

由以上定义可知,结点的权值越小,离根结点越远,越有可能成为叶子结点,使整棵二叉树的带权路径最小。

首先,我们统计这串字符中每个字符出现的次数,作为权值:

A:8

D:1

E:4

F:1

R:5

T:3

接下来构造哈夫曼树:

重复以下步骤:

  1. 按照权值从小到大对字符排序:D-F-T-E-R-A;
  2. 选择权值最小的两个字符作为两个结点,此处为D和F,生成一个新的结点,新结点的权值为它们的和;

直至字符串中所有字符都生成了结点。

生成过程如下图:

哈夫曼编码的数据结构和算法(漫步计算机系统)(1)

哈夫曼编码的数据结构和算法(漫步计算机系统)(2)

现在,我们需要利用最终生成的二叉树对每个字符进行编码,该编码又叫哈夫曼编码。

我们约定:

  1. 将权值较小的结点作为左结点,较大的作为右结点;
  2. 左孩子编码为0,右孩子编码为1。

最终的哈夫曼树为:

哈夫曼编码的数据结构和算法(漫步计算机系统)(3)

从上图可知,E结点的编码为:00,D结点的编码为1001。

最终各字符的编码为:

E:00

R:01

F:1000

D:1001

T:101

A:11

哈夫曼编码的数据结构和算法(漫步计算机系统)(4)

注:凡属于本公众号内容,未经允许不得私自转载,否则将依法追究侵权责任。

猜您喜欢: