哈夫曼树

来源:互联网 发布:js时间计算 编辑:程序博客网 时间:2024/06/05 17:29

(一)基础知识
路径:从一个结点到另一个结点之间的分支序列。
路径长度:从一个结点到另一个结点所经过的分支数目。
结点的权:根据应用的需要可以给树的结点赋权值
带权路径长度:从根到该结点的路径长度与该结点权的乘积。
树的带权路径长度: 树中所有叶子结点的带权路径之和。
哈夫曼树:由n个带权叶子结点构成的所有二叉树中带权路径长度最短的二叉树。又叫最优二叉树。

(二)有数据为{ 22,10,46,17,13,110,20,15,34 }试构造一棵哈夫曼(Huffman树),并计算WPL。

先从其中选出两个最小的节点10 ,13,由他们的和组成他们的父节点 23。

然后,将23放回中序列中。参与其他的节点筛选。

这里写图片描述

重复上面的过程则可以完成构造树的过程。

结果如下:(结果有多种,但是WPL值是统一的。)

这里写图片描述

WPL=110*1+34*3+22*4+20*4+46*3+10*5+13*5+15*5+17*5=793

(三)字符串“alibaba”用哈夫曼编码来编码,则共有多少位?

a有3个,b有2个,l、i分别有一个。

所以,a的权值为3,b的权值为2,l的权值为1,i的权值为1。

构造哈夫曼树的结果为:

这里写图片描述

编码结果:

这里写图片描述

每个字母对应的编码
a 0
b 10
l 110
i 111

则alibaba对应的编码,总共需要13位
a 0
l 110
i 111
b 10
a 0
b 10
a 0

(四)二叉树转化为树

这里写图片描述

(五)树转化为二叉树

这里写图片描述