根据下面给定的字母和权重建立Huffman编码树,并给出各个字母的代码。
(A,2)(B,3)(C,5)(D,7)(E,11)(F,13)(G,17)
(H,19)(I,23)(J,31)(K,37)(L,41)
分析:
给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。
哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。
构建哈夫曼树:
(1)将每一个字母构造成单个树,然后构造树集合,即:
{ (A,2)(B,3)(C,5)(D,7)(E,11)(F,13)(G,17)
(H,19)(I,23)(J,31)(K,37)(L,41)}
(2)找到权重最小的两个字母,构造一个树,即:
如果集合中已经存在相同权重的字母,可以作为左子树,建立新的树