(一) 哈夫曼树
- 目的:找出存放一串字符所需的最少的二进制编码
- 原理:
- 统计出每种字符出现的频率!(也可以是概率)//权值
- 选择最小的两个,其根节点值为这两个元素权值的和;将出现频率(权值)最小的放在根节点左侧,次小值放在根节点右侧;
- 用权值和替代原来的两个元素的权值;接着重复第二步,直到所有元素都被放置好为止;
例题:
假如我有A,B,C,D,E五个字符,出现的频率(即权值)分别为5,4,3,2,1
- 那么我们第一步先取两个最小权值作为左右子树构造一个新树,即取1,2构成新树,其结点为1+2=3
- 虚线为新生成的结点,第二步再把新生成的权值为3的结点放到剩下的集合中,所以集合变成{5,4,3,3}
- 剩下的集合中: {5,4,6}
- 选择4和5, 则集合为{9,6}
- 最后为:
权值: (1+2)3 + 32+ (4+5)*2
(二)哈夫曼编码
- 利用哈夫曼树来编码,出现得越多的元素,他的编码越短 ,出现频率越少的元素,他的编码越长
- 上面案例的编码如下所示:
所以各字符对应的编码为:A->11,B->10,C->00,D->011,E->010
霍夫曼编码是一种无前缀编码。解码时不会混淆。其主要应用在数据压缩,加密解密等场合