




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章
树和二叉树哈夫曼树及应用哈夫曼树及构造哈夫曼编码6.7哈夫曼树及应用6.7.1
哈夫曼树及构造1
哈夫曼树的概念路径:从一个祖先结点到子孙结点之间的分支构成这两个结点间的路径;路径长度:路径上的分支数目称为路径长度;结点的权:根据应用的需要可以给树的结点赋权值;结点的带权路径长度:从根到该结点的路径长度与该结点权的乘积;树的带权路径长度=树中所有叶子结点的带权路径之和;通常记作WPL=
wi
·
Li哈夫曼树:假设有n个权值(w1
,
w2
,
…
,
wn
),构造有n个叶子结点的二叉树,每个叶子结点有一个wi
作为它的权值。则带权路径长度最小的二叉树称为哈夫曼树。6.7哈夫曼树及应用2应用举例在求得某些判定问题时,利用哈夫曼树获得最佳判定算法。例编制一个将百分制转换成五分制的程序。最直观的方法是利用if语句来的实现。可用二叉树描述判定过程。参见课本P145
图6.23(a)。如果这个程序很不经常使用,或要转换的分数不多,不必考虑该程序效率,我们可以按照这个流程编程。可是如果该程序经常要使用或数据量很大。比如对北京市几十万小学生的分数进行转换,在这种情况下,要考虑转换程序的效率。设有10000个百分制分数要转换,设学生成绩在5个等级以上的分布如下:分数0-5960-6970-7980-8990-100比例数0.050.150.400.300.106.7哈夫曼树及应用403060155
101530按图的判定过程,转换一个分数所需的比较次数=从根到对应结点的路径长度。转换10000个分数所需的总比较次数=10000(0.05
·
1+0.15
·
2+0.4
·
3+0.3
·
4+0.1
·
4)若将学生成绩在5个等级以上的分布比例看作描述判定过程二叉树叶子结颠点权值,(0.05
·
1+0.15
·
2
+0.4
·
3+0.3
·
4+0.1
·
4)正是该二叉树的带权路径长度。可见要想获得效率较高的转换程序,可构造以分数的分布比例为权值的哈夫曼树。1006.7哈夫曼树及应用3
哈夫曼树的构造构造哈夫曼树的步骤:根据给定的n个权值,构造n棵只有一个根结点的二叉树,n个权值分 别是这些二叉树根结点的权。设F是由这n棵二叉树构成的集合在F中选取两棵根结点树值最小的树作为左、右子树,构造一颗新的 二叉树,置新二叉树根的权值=左、右子树根结点权值之和;从F中删除这两颗树,并将新树加入F;重复2、3,直到F中只含一颗树为止;6.7哈夫曼树及应用403060155
1015303060
40155
101530例:构造以W=(5,15,40,30,10)为权的哈夫曼树。1005
15
40
30
105
10
15
40
301540
3030155
10156.7哈夫曼树及应用6.7.2哈夫曼编码哈夫曼树除了能求解最优判定问题解,还用于其他一些最优问题的求解。这里介绍用哈夫曼树求解数据的二进制编码。在进行数据通讯时,涉及数据编码问题。所谓数据编码就是数据与二进制字符串的转换。例如:邮局发电报,发送方将原文转换成二进制字符串,接收方将二进制字符串还原成原文。原文
电文(二进制字符串)
原文例
要传输的原文为ABACCDA设ABCD的编码为A;00B;01C:10D:11发送方:将ABACCDA转换成00010010101100接收方:将
00010010101100
还原为
ABACCDA6.7哈夫曼树及应用ab
cdgfeh在数据输传时,为省节费用总希望传输的二进制串尽可能短。可利用二叉树设计不等长编码:例
某通讯系统只使用8种字符a、b、c、d、e、f、g、h,其使用频率分别为0.05,0.29,0.07,0.08, 0.14,0.23,
0.03,0.11,利用二叉树设计一种不等长编码:构造以a、b、c、d、e、f、g、h为叶子结点的二叉树;将该二叉树所有左分枝标记1,所有右分枝标记0;从根到叶子结点路径上标记作为叶子结点所对应字符的编码;a:
0000b:0001c:0010d:0011e:010f:011g:10h:116.7哈夫曼树及应用应用中每个字符的使用频率是不一样的。显然,为使传输的二进制串尽可能的短,使用频率高的字符用较短编码,使用频率低的字符用较长编码电文总长=原文中字符总数(字符x使用频率字符x编码长度)为设计电文总长最短编码,可通过构造以字符使用频率作为权值的哈夫曼树实现。如何得到使二进制串总长最短编码6.7哈夫曼树及应用a:0110b:10c:1110d:1111e:110f:00g:0111h:010例
某通讯系统只使用8种字符a、b、c、d、e、f、g、h,其使用频率分别为0.05,0.29,0.07,0.08, 0.14,0.23,
0.03,0.11。构造以字符使用频率作为权值的哈夫曼树。,将权值取为整数w=(5,29,7,8,14,23,3,11),按哈夫曼算法构造的一棵哈夫曼树如下:对应字符的编码10042
5823
19
29
2911
8
14
155
3
7
86.7哈夫曼树及应用2.构造哈夫曼树的算法输入:n个权值结果:哈夫曼树设用一维数组W存储n个权值,用静态三叉链表HT存储哈夫曼树存储哈夫曼树的静态三叉链表类型定义typedef
struct
{unsigned
int
weight;unsigned
int
parent,
lchild,
rchild;}HTNode,*HuffmanTree;
//动态分配数组存储赫夫曼树weight
parent
lchild
rchildHTNode类型的结构变量6.7哈夫曼树及应用w
p
lch
rch01234567891011121314155000290007000800014000230003000110008111715123419138929145104215611581521210001314哈夫曼树哈夫曼树对应的静态三叉链表w,p,lch,rch是
weight,parent,lchild,rchild的缩写291958421001587358112314296.7哈夫曼树及应用哈夫曼算法void
HuffmanTree(HuffmanTree
&HT, int
*
w,
int
n){//w
存放n
个字符的权值(均>0),构造赫夫曼树HTif
(n<=1)
return;m=2*
n-1;HT=(HuffmanTree)malloc(m+1)*
sizeof(HTNode);
//为哈夫曼树分配存储//空间for
(p=HT,i=1;
i<=n;
++i,++p,++w) *
p={*w,0,0,0};
//用给定的n个权//值,构造n棵只有一个根结点的二叉树for(;i<m;++i;++p){
//按构造哈夫曼树的步骤2、3、4,建哈夫曼树//在HT[1..i-1]选择parent为0且weight最小的两个结点,其序号分别为s1和s2。Select(HT,
i-1,
s1,
s2);HT[s1].
parent
=i;
HT[s2].parent=i;
//HT[i]存放新子树的根结点,HT[i].lchild=s1;
HT[i].rchild=s2;HT[i].weight=HT[s1].weight+HT[s2].weight;6.7哈夫曼树及应用例:用哈夫曼算法构造以w=(5,29,7,8,14,23,3,11)为权值的哈夫曼树529781423311012345678Wwplchrch01234567891011121314155000290007000800014000230003000110008111715123419138929145104215611581521210001314哈夫曼树对应的静态三叉链表HTHT算法原始数据算法结果数据权值数组W6.7哈夫曼树及应用wplchrch0123456789101112131415为哈夫曼树分配存储空间哈夫曼算法主要步骤图示HT6.7哈夫曼树及应用0150002290003700048000514000623000730008110009101112131415w
p
lch
rchHT算法的第一个
FOR循环的执行结果8棵只有一个结点的二叉树523
3
1129
7
8
14HT算法的第二个
FOR循环的执行结果10042
5823
19
29
2911
8
14
155
3
7
8静态三叉链表HT对应的哈夫曼树构造哈夫曼树的过程中,新生成的结点6.7哈夫曼树及应用w
p
lch
rch01234567891011121314155
0
0
029
0
0
07
0
0
08
0
0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 肌痉挛的临床护理
- 商师高二联考试卷及答案
- 山东高一月考试卷及答案
- 2025黑龙江龙煤鸡西矿业有限责任公司招聘900人笔试参考题库附带答案详解
- 2025中信银行企业贷款合同英文翻译
- 稀有金属加工中的质量改进方法研究考核试卷
- 礼仪用品行业品牌法律保护与品牌维权策略考核试卷
- 砖瓦制品在历史建筑保护中的应用考核试卷
- 电机在电动轮椅及助行器的助力技术考核试卷
- 2025建筑工程水电施工劳务分包合同允许分包给个体工商户
- GB/T 21567-2008危险品爆炸品撞击感度试验方法
- 《绿色建筑概论》整套教学课件
- 卫生人才培养方案计划
- 产业发展理论-第七章-产业政策课件
- DB64-T 1684-2020 智慧工地建设技术标准-(高清可复制)
- 婚丧嫁娶事宜备案表
- 幼儿园教学课件小班社会《孤独的小熊》课件
- “三级”安全安全教育记录卡
- 风生水起博主的投资周记
- 赛艇赛事活动推广方案
- 人教版小学五年级数学竞赛试题及答案
评论
0/150
提交评论