【答案解析】在计算机中,数据是以0、1的形式进行存储和传递的,常见的字母、汉字、图片本质都是规则的二进制01串,这就涉及数据的编码。编码分为等长编码和非等长编码。ASCⅡ和UNICODE都是等长编码,等长编码存在一个局限,就是浪费空间。例如,给4个字母编码就需要两位,分别是00、01、10和11,这样0和1这两个码字就没有意义。如果两位用来编码6个字母,就会出现这样一个问题:串001011无法解码出正确的意义,第一个0可能单独出现,也可能和后面的0成对出现。霍夫曼编码就是用来解决这种问题的。霍夫曼是一种非等长编码,其既不会引起歧义,又可以解码出正确的数据,并且出现概率大的数据编码短,概率小的数据编码长,极大地提高了编码效率。
霍夫曼编码用到一种叫做“前缀编码”的技术,即任意一个数据的编码都不是另一个数据编码的前缀。而最优二叉树,即霍夫曼树(带权路径长度最小的二叉树)就是一种实现霍夫曼编码的方式。霍夫曼编码的过程就是构造霍夫曼树的过程,构造霍夫曼树的相应算法如下:
1)有一组需要编码且带有权值的字母,如a(4)、b(8)、c(1)、d(2)、e(11)。括号内分别为各字母相对应的权值。
2)选取字母中权值较小的两个c(1)、d(2)组成一个新二叉树,其父亲结点的权值为这两个字母权值之和,记为f(3),然后将该结点加入到原字母序列中去(不包括已经选择的权值最小的两个字母),则剩下的字母为a(4)、b(8)、e(11)、f(3)。此时得到的树如图1所示。

图1 二叉树结构图(一)
3)重复进行步骤2),直到所有字母都加入到二叉树中为止,最后得到的二叉树如图2所示。