当前位置:文档之家› 数据结构第15讲赫夫曼树及其应用

数据结构第15讲赫夫曼树及其应用

如何设计前缀编码?
2021/3/1
18
利用二叉树设计二进制的前缀编码
假设有一棵如左图所示的二叉树,
0
1
四个叶结点分别表示A、B、C、D四
a
个字符,且约定左分支表示字符‘0’,
0
1
右分支表示字符‘1’,则可以从根结
c
0
1 点到叶子结点的路径上以分支字符
组成的字符串作为该叶子结点的编
bd
码。可以证明,如此得到的必为二
例:有四个叶子结点a,b,c,d,分别带权为9、4、5、 2,由它们构成三棵不同的二叉树。
2021/3/1
5
a bc 9 45
a
4b
9a
d
2d
5c
2
5c a9
4b d2
b
c
a) WPL=9×2 +4×2+5×2+2×2=40 b) WPL=4×1+2×2+5×3+9×3=50 c) WPL=9×1+5×2+4×3+2×3=37
字符:A B A C C D A
A B C D的编码分别为:0、00、1、01
电文:
000011010
?
电文总长度为:9
2021/3/1
无法译码!为此引 入前缀编码的概念
17
2)前缀编码
若对某一字符集进行不等长编码,则要求字符 集中任一字符的编码都不能是其他字符编码的前 缀。符合此要求的编码叫做前缀编码。
开关键
传统机械按键设计要点:
1.合理的选择按键的类型,尽量选择 平头类的按键,以防按键下陷。
2.开关按键和塑胶按键设计间隙建议 留0.05~0.1mm,以防按键死键。
3.要考虑成型工艺,合理计算累积公 差,以防按键手感不良。
若采用不等长编码,让出现频率高的字符具有 较短的编码,让出现频率低的字符具有较长的编 码,这样有可能缩短传送电文的总长度。
进制前缀编码。
如何得到电文总长最短的二进制前缀编码呢?
2021/3/1
19
3)赫夫曼编码
设计电文总长最短的二进制前缀编码即: 以 n种字符出现的频率作权,设计一棵赫夫曼 树的问题,由此得到的二进制前缀编码称赫夫曼 编码。
2021/3/1
20
例:设通信用的电文由字符集{a,b,c,d,e,f,g,h}中的 字母构成,这8个字母在电文中出现的概率分别为 { 0.07, 0.19, 0.02, 0.06, 0.32, 0.03, 0.21, 0.10 },试 为这8个字母设计哈夫曼编码。
电文:00010010101100 电文总长度为:14
2021/3/1
14
如何能缩短传送电文的 总长度,从而节省传送 时间呢?
2021/3/1
15
1.什么是传统机械按键设计?
传统的机械按键设计是需要手动按压按键触动PCBA上的开关按键来实现功 能的一种设计方式。
传统机械按键结构层图:
按键
PCBA
在解决某些判定问题时,利用赫夫曼树可以得到 最佳判定算法。
例:编制一将学生百分成绩按分数段分级的程序。
若学生成绩分布是 均匀的,可用图(a) 二叉树结构来实现。
Y a<60 N
不及格
a<70
Y
N
及格
Y a<80 N
中等 Y a<90 N
(a)
良好
优秀
2021/3/1
9
学生成绩分布不是均匀的情况:
分数 0—59 60—69 70—79 80—89 90—99
3) 从F中删去这两棵树,同时加入刚生成的新树;
4) 重复(2)和(3)两步,直至F中只含一棵树为止。
2021/3/1
7
第一步: 9 a 4 b 5 c 2 d
第二步: 9 a 5 c
6
第三步:
4b
d2
9a 5c
11 6
第四步:
9a
4b 20
11
d2
5c
6
2021/3/1
4b
d2
8
3.判定树 (赫夫曼树的应用之一)
2021/3/1
2
2)结点的权和带权路径长度 在许多应用中,常常将树中的结点赋上一个有
着某种意义的实数,称其为该结点的权。 结点的带权路径长度(WPL)规定为从树根到该
结点之间的路径长度与该结点上权的乘积。
例:结点c的路径长度为2,其WPL=2*9=18
a bc
d
2021/3/1
3 79
8
3
3)树的带权路径长度
树中所有叶子结点的带权路径长度之和。通常记
为:
n
WPL wili i 1
其中 n 表示叶子结点的数目,wi 和 li分别表示叶 子结点ki的权值和根到ki之间的路径长度。
a bc
d
3 79
8
2021/3/1
4
4)赫夫曼(Huffman)树
又称最优二叉树。它是 n 个带权叶子结点构成 的所有二叉树中,带权路径长度WPL最小的二叉 树。
比例 0.05 0.15
0.4
0.3
0.1
输入10000个 数据,则需 进行31500次
比较。
Y a<60 N
不及格
a<70
Y
N
及格
Y a<80 N
中等 Y a<90 N
(a)
良好
优秀
2021/3/1
10
有没有一种更好 的办法来减少比
较次数呢?
2021/3/1
11
分数 0—59 60—69 70—79 80—89 90—99
第6章 树和二叉树
6.1 树的定义和基本术语 6.2 二叉树 6.3 遍历二叉树和线索二叉树 6.4 树和森林 6.6 赫夫曼树及其应用
2021/3/1
1
6.6 赫夫曼树及其应用
A
1.基本术语
1)路径和路径长度
BLeabharlann CD EFG
若一棵树中存在一个结点序列k1,k2,…,kj,使得ki 是kj的双亲(0<i<j),则称此结点序列是从ki~ kj 的路径。从k1~kj所经过的分支数称为这两点之间 的路径长度,它等于路径上的结点数减1。
比例 0.05 0.15
0.4
0.3
0.1
以比例数为权构造一棵哈夫 曼树,如(b)判断树所示。
再将每一比较框的两次比较改 为一次,可得到(c)判定树。
输入10000个 数据,仅需进 行22000次比
较。
(c)
70≤a<80 80≤a<90 60≤a<70 a<60
(b)
2021/3/1
12
4.赫夫曼编码(赫夫曼树的应用之二)
2021/3/1
6
2.构造最优树
赫夫曼算法:
1)根据给定的n个权值{w1, w2, …, wn},构造 n棵二叉树 的集合 F = {T1, T2, …,Tn},其中每棵二叉树中均只含一个带 权值为wi的根结点,其左、右子树为空树;
2) 在F中选取其根结点的权值为最小的两棵二叉树,分别 作为左、右子树构造一棵新的二叉树,并置这棵新的二叉 树根结点的权值为其左、右子树根结点的权值之和;
1)二进制编码 通信中,可以采用0、1的不同排列来表示不同
的字符,称为二进制编码。 发送端需要将电文中的字符序列转换成二进制
的0、1序列,即编码; 接受端需要把接受的0、1序列转换成对应的字
符序列,即译码。
2021/3/1
13
字符:A B A C C D A A B C D的编码分别为:00、01、10、11
相关主题