目录
一、哈夫曼树的概念
1、结点的权:
2、结点的带权路径长度
3、树的带权路径长度
4、哈夫曼树
二、哈夫曼树的构造
1、构造步骤
三、哈夫曼树的编码
一、哈夫曼树的概念
1、结点的权:
定义: 每个结点的权重(重要性)
如上图:假设每个结点权重都是数字,那么每个数字代表的就是这个结点的权重
2、结点的带权路径长度
定义:是指从根节点出发一直到该节点的分支数目乘以权重
如下图:
上图计算了权重为2和4的带权路径长度,分别为6和8
3、树的带权路径长度
定义:从根结点出发一直到所有的叶子结点的分支数目乘以该叶子结点的权重之和,称为“树的带权路径长度”
这颗树的带权路径长度就为34;
计算方法是:每个叶子结点到根节点的路径数目*权重 之和
4、哈夫曼树
定义:树的带权路径长度最小的树,称之为“哈夫曼树”,也称为“最优二叉树”,应用:编码(哈夫曼编码)问题
假如现在有很多个结点,我们用这些结点构造了很多个二叉树,这些二叉树的带权路径长度最小的,就是我们说的哈夫曼树,也叫“最优二叉树”
二、哈夫曼树的构造
(1)创建n个具有一个结点的二叉树,n个具有一个结点的二叉树就构成了深林T={T1,T2,T3,.......................}
(2)在深林T中取出两个权重最小的二叉树组成一个新的二叉树(两个二叉树的权重相加称为新的二叉树的权重),将新的二叉树放入深林中
(3)重复第(2)步,直到最终构成的一棵树,就成为“哈夫曼树”
如果单纯看概念,其实很难看懂;
1、构造步骤
下面是一些结点:
第一步:从这些结点中找到权重最小的结点,组成一个树。组成树的根的权重值是两个子树权重值的相加
第二步:重复第一步
最终得到哈夫曼树如下图:树的权重=28
当然还有另外的构造方法:将权重最小的两个组成一个树,再把剩下的权重最小的两个结点组成一个树 ,两个树的根组成一个新的树,依此类推,直到没有结点
如下图:树的权重:28
哈夫曼树特点:
离根结点越近,结点的权重越大
离根结点越远,结点的权重越小
结点的度没有为1的情况,结点的度要么是2要么是0
三、哈夫曼树的编码
编码方式:
将哈夫曼树中的结点的左分支编码为0,将结点的右分支编码为1