CSP初赛复习-05哈夫曼树和哈夫曼编码

CSP初赛复习-05哈夫曼树和哈夫曼编码

哈夫曼树的基本概念

树的路径长度PL:

  1. 从树根到树的每个节点的路径长度(每条边长度为1)之和

  2. 完全二叉树为这种路径长度(PL)最短的二叉树

树的带权路径长度WPL:

树的所有叶子节点的带权路径长度(该节点到根节点路径长度与节点上权的乘积)之和。

WPL=7 * 3 + 5 * 3 +2 * 1 +4 * 2 =46

WPL计算公式

哈夫曼树:

  1. 带权路径长度WPL最短的二叉树(最优二叉树)

  2. 构造这种树的算法最早是由哈夫曼(Huffman)1952年提出,这种树在信息检索中很有用。

例1,构造哈夫曼树的WPL为35是最小的。具体比较如下图:

如何构造一棵哈夫曼树?(哈夫曼树也是一棵二叉树)

给n个点,每个点都有权值,构造一棵哈夫曼树。每次选剩下的两棵根权值最小的树合并成一棵新树,新树的根权值等于两棵合并前树的根权值和。(一开始一个点也看成一棵树,只不过这棵树没有孩子节点)

例1:4个点,a、b、c、d,权值分别为7、5、2、4。

构树过程:因为4个点,所以合并3次(n个点,合并n-1次)

第一步:选根权值最小的两棵树2(c)和4(d)合并,新树的根节点为6,如图(b);

第二步:选根权值最小的两棵树5(b)和6合并,新树的根节点为11,如图(c);

第三步:选根权值最小的两棵树7(a)和11合并,新树的根节点为18,如图(d);

例2:6个点,a、b、c、d、e、f,权值分别为0.4、0.3、0.1、0.1、0.02、0.08。

构图过程同例1(如下图)

哈夫曼编码

一篇电文,原文为:AMCADEDDMCCAD。现在要把原文转换成01串发送给对方。为了节省资源,我们当然希望翻译好的01串长度尽量的短。怎么办?

研究发现:

1、只有5个字母E,M,C,A,D;

2、这5个字母的使用频度分别为{E,M,C,A,D}={1,2,3,3,4}。

用频度为权值生成哈夫曼树,并在叶子上标注对应的字母,在树枝上标注分配码“0”或“1”(注:分配码不是边的长度,而是区分左右孩子代表方向):

哈夫曼编码原则:

n个节点(n个叶子节点)的哈夫曼树含有2n-1个节点,没有度为1的节点 编码从叶子节点到根节点,译码从根节点到叶子节点。

从哈夫曼树根节点开始,对左子树分配码“0”,右子树分配码“1”,一直到达叶子节点为止,然后将从树根沿每条路径到达叶子结点的代码排列起来,便得到了哈夫曼编码。

各字母的编码即为哈夫曼编码: EMCAD 所有编码长度和为12位,即PL=12,此时的PL并不是最小的,但此时的WPL一定是最小的。WPL最小才能使得密报翻译的01串长度最短。

3对原电文进行哈夫曼编码,如下图,则哈夫曼编码的WPL= 1 * 3 + 2 * 3 + 3 * 2 + 3 * 2 + 4 * 2 = 29 。

解析:

E:000 3位二进制 所以1 * 3

M:001 3位二进制 出现次数为2 所以 2 * 3

C:01 2位二进制,出现次数为3 所以 3 * 2

A:10 2位二进制,出现次数位3 所以 3 * 2

D:11 2位二进制,出现次数位4,所以 4 * 2

所以

WPL= 1 * 3 + 2 * 3 + 3 * 2 + 3 * 2 + 4 * 2 = 29

例4: 对原电文进行等长编码,则:

等长编码的WPL = 1 * 3 + 2 * 3 + 3 * 3 + 3 * 3 + 4 * 3 = 39

所以哈夫曼编码可以节省空间。

原电文AMCADEDDMCCAD翻译成01串后为:10001011011000111100101011011。

对方根据事先构造好的哈夫曼树编码表可以还原原电文。

哈夫曼编码的性质

1)哈夫曼编码是前缀编码,任何一个字符的编码都不是另一个字符编码的前缀

只对叶子节点进行编码/解码唯一

例如字符串:CCACE

编码:

01011001000

解码:

根据当前的编码,找到对应的字符,此字符是唯一的(从根节点找到叶子节点)

2)哈夫曼编码是一种最优前缀编码

​ 权值(出现次数)大的编码短,这种贪心策略可以保证总体编码最短

3)哈夫曼编码是一种贪心算法

​ 从树的集合中选取两个频率最低的字符,使其作为左右子树构造一棵新树,父节点的频率为左右节点频率之和,然后将新树插入到树的集合中

贪心策略:出现频率低的在树中的深度高,编码长

CSP初赛复习-05哈夫曼树和哈夫曼编码-练习
https://www.cnblogs.com/myeln/articles/17538919.html

posted @ 2023-07-09 15:21  new-code  阅读(374)  评论(0)    收藏  举报