目录
哈夫曼树和相关术语概念
结点带权路径长度
在一棵树中,根节点到该节点的分支数 * 该节点的权。
树的带权路径长度
在一颗树中,所有叶子节点的带权路径长度相加之和。
什么是哈夫曼树
哈夫曼树,简而言之就是最优树,即带权路径长度最短的树。在哈夫曼树中,权值越大的叶子节点离根节点越近。
哈夫曼树的构造算法(贪心算法)
- 以所有权重节点为单个树组成森林;
- 选用两个最小树作为左右子树,两树权重之和作为根节点,组成新二叉树;
- 在森林中删除上一步选用的树,放入组建的新二叉树;
- 继续重复上面 2.3 两步操作,创建新树,直到森林中只剩下一棵树为止,这棵树就是哈夫曼树。
哈夫曼算法的实现
哈夫曼编码
前缀编码:在长度不等的编码设计中,为了防止重码问题,每一个字符前缀都不能与其他编码相同(例如下图中B中前缀包含了A,即00前缀是0),称为前缀编码。
哈夫曼编码: 使电文长度最短的前缀编码。
- 哈夫曼树是最优树,即带权路径长度最短的树,所以能保证哈夫曼树中的各个节点组成的编码长度是最短的。
- 哈夫曼树中的每一个叶子都不是另一片叶子的祖先,所以每个叶子节点的编码就不可能是其他叶子编码的前缀。