答案:
哈夫曼树的定义
在许多应用中,树中结点常常被赋予一个表示某种意义的数值,称为该结点的权。从树的根到任意结点的路径长度(经过的边数〉与该结点上权值的乘积,称为该结点的带权路径长度。树中所有叶结点的带权路径长度之和称为该树的带权路径长度
哈夫曼树的构造
给定n个权值分别为W1,W2...,Wn的结点,构造哈夫曼树的算法描述如下:1)将这n个结点分别作为n棵仅含一个结点的二叉树,构成森林F。2)构造一个新结点,从F中选取两棵根结点权值最小的树作为新结点的左、右子树,并且将新结点的权值置为左、右子树上根结点的权值之和。3)从F中删除刚才选出的两棵树,同时将新得到的树加入F中。4)重复步骤2)和3)直至F中只剩下一棵树为止。
从上述构造过程中可以看出哈夫曼树具有如下特点:
L)每个初始结点最终都成为叶结点,且权值越小的结点到根结点的路径长度越大。2)构造过程中共新建了n-1个结点(双分支结点),因此哈夫曼树的结点总数为2n-1。3)每次构造都选择2棵树作为新结点的孩子,因此哈夫曼树中不存在度为Ⅰ的结点。
哈夫曼编码:
在数据通信中,若对每个字符用相等长度的二进制位表示,称这种编码方式为固定长度编码。若允许对不同字符用不等长的二进制位表示,则这种编码方式称为可变长度编码。可变长度编码比固定长度编码要好得多,其特点是对频率高的字符赋以短编码,而对频率较低的字符则赋以较长一些的编码,从而可以使字符的平均编码长度减短,起到压缩数据的效果。哈夫曼编码是一种被广泛应用而且非常有效的数据压缩编码。若没有一个编码是另一个编码的前缀,则称这样的编码为前缀编码。由哈夫曼树得到哈夫曼编码是很自然的过程。首先,将每个出现的字符当作一个独立的结点,其权值为它出现的频度(或次数),构造出对应的哈夫曼树。显然,所有字符结点都出现在叶结点中。我们可将字符的编码解释为从根至该字符的路径上边标记的序列,其中边标记为0示“转向左孩子”,标记为1表示“转向右孩子”。