您的位置:首页 > 其它

赫夫曼树和赫夫曼编码

2013-10-15 15:40 183 查看
赫夫曼树:

1、先把有权值的叶子节点按照从小到大的顺序排成一个有序序列,即:A(5),E(10),B(15),D(30),C(40)。

2、取前两个权值最小的结点即A(5)和E(10),作为一个新的结点N1的两个子节点,结点权值较小的作为左结点,即A为左结点,E为右结点,N1的权值为两个结点权值的和,即5+10=15。

3、将N1替换A和E,放到原序列里,重新排序,即:N1(15),B(15),D(30),C(40)。重复步骤2,取出N1(15),B(15),组成新的结点N2,N2权值为30。

4、将N2替换N1和B插入到序列里,即N2(30),D(30),C(40),重复步骤2,取出N2(30),D(30),组成新的结点N3,N3权值为60。

5、剩下N3(60)和C(40),将他俩组成新的结点T,C为左结点,N3为右结点。生成赫夫曼树如下图所示:



赫夫曼编码:

假设6个字母频率为A 27,B 8,C 15,D 15,E 30,F 5,合起来正好是100%,将他们排成赫夫曼树如下所示:



将权值左分支改为0,右分支改为1,如下图所示:



此时,我们对六个字母用其从跟到叶子结点所经过的路径的0和1来编码,可以得到如下:

A:01

B:1001

C:101

D:00

E:11

F:1000

双方约定好赫夫曼树后,也可以根据赫夫曼编码来解码,等到源码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: