版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
4-7最优二叉树v第四章树和二叉树哈夫曼算法学什么?哈夫曼编码最优二叉树(哈夫曼树)的基本概念最优二叉树叶子结点的权值:对叶子结点赋予的一个有意义的数值量二叉树的带权路径长度:从根结点到各个叶子结点的路径长度与相应叶子结点权值的乘积之和取决于具体问题第k个叶子的权值从根结点到第k个叶子的路径长度最优二叉树(哈夫曼树):给定一组具有确定权值的叶子结点,带权路径长度最小的二叉树323428324552345432最优二叉树最优二叉树有什么特点?(1)权值越大的叶子结点越靠近根结点(2)只有度为0和度为2的结点,不存在度为1的结点4-7-1哈夫曼算法v第四章树和二叉树哈夫曼算法【问题】给定一组权值,构造最优二叉树1.初始化:由n个权值构造n棵只有一个根结点的二叉树,得到一个二叉树集合F={T1,T2,…,Tn};2.重复下述操作,直到集合F中只剩下一棵二叉树
2.1选取与合并:在F中选取根结点的权值最小的两棵二叉树分别作为左右子树构造一棵新的二叉树,这棵新二叉树的根结点的权值为其左右子树根结点的权值之和;
2.2删除与加入:在F中删除作为左右子树的两棵二叉树,并将新建立的二叉树加入到F中;【想法——哈夫曼算法的基本思想】例给定权值集合{2,4,5,3}初始化选取与合并删除与加入245323
54523
5运行实例23
545
923
545
914【算法——数据表示】如何存储哈夫曼树呢?23
545
914采用数组还是链表呢?
n
个叶子结点合并
n-1次n-1个分支结点哈夫曼树共有2n-1个结点设数组huffTree[2n-1]须存储哪些关系呢?选取根结点权值最小的二叉树存储parent信息作为左右子树进行合并存储lchild和rchild信息weightlchildrchildparent哈夫曼算法23
545
914weightlchildrchildparentstructElemType{
intweight;/*假定权值为整数*/
intparent,lchild,rchild;};函数原型:voidHuffmanTree(ElemTypehuffTree[],intw[],intn)哈夫曼算法【算法——数据表示】如何存储哈夫曼树呢?【算法——数据处理过程】-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1例给定权值集合{2,4,5,3}24530123456weightparentlchildrchildfor(i=0;i<2*n-1;i++){huffTree[i].parent=-1;huffTree[i].lchild=-1;huffTree[i].rchild=-1;}算法描述:哈夫曼算法-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-124530123456weightparentlchildrchildfor(i=0;i<n;i++)huffTree[i].weight=w[i];算法描述:例给定权值集合{2,4,5,3}哈夫曼算法【算法——数据处理过程】2453-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-124530123456weightparentlchildrchild4523
5i1i25huffTree[k].weight=huffTree[i1].weight+huffTree[i2].weight;算法描述:k例给定权值集合{2,4,5,3}哈夫曼算法【算法——数据处理过程】2453-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1245324530123456weightparentlchildrchild4523
5i1i250344huffTree[i1].parent=k;huffTree[i2].parent=k;huffTree[k].lchild=i1;huffTree[k].rchild=i2;算法描述:k例给定权值集合{2,4,5,3}哈夫曼算法【算法——数据处理过程】【程序】voidHuffmanTree(ElemTypehuffTree[],intw[],intn){inti,k,i1,i2;
}for(i=0;i<2*n-1;i++)/*初始化,所有结点均没有双亲和孩子*/{huffTree[i].parent=-1;huffTree[i].lchild=-1;huffTree[i].rchild=-1;}for(k=n;k<2*n-1;k++)/*n-1次合并*/{
Select(huffTree,i1,i2);/*权值最小的两个根结点下标为i1和i2*/huffTree[k].weight=huffTree[i1].weight+huffTree[i2].weight;huffTree[i1].parent=k;huffTree[i2].parent=k;huffTree[k].lchild=i1;huffTree[k].rchild=i2;}for(i=0;i<n;i++)/*构造n棵只含有根结点的二叉树*/huffTree[i].weight=w[i];算法实现4-7-2哈夫曼编码v第四章树和二叉树编码编码:给每一个对象标记一个二进制位串来表示一组对象等长编码:用长度相等的二进制位串表示一组对象酸甜
01酸甜苦辣00011011酸
甜苦辣
咸麻000
001
010
011
100101编码的目的是什么?数字化编码效率取决于编码长度如果每个对象的使用频率不等,如何获得较高的编码效率市区出生日期顺序校验身份证号码不等长编码:表示一组对象的二进制位串的长度不相等设计不等长编码时,必须考虑解码的唯一性
字符串:AABACD
编码:00100110ABCDE
一组对象3525151510
使用频率01011011
不等长编码前缀(无歧义)编码保证了在解码时不会有多种可能前缀无歧义编码(简称前缀编码):在一组编码中,任一编码都不是其它任何编码的前缀解码
00100110
00100110
解码:哈夫曼编码如何设计一个编码效率最高的前缀编码呢?哈夫曼编码例一组字符{A,B,C,D,E,F,G}出现的频率分别是{9,11,5,7,8,2,3},设计最经济的编码方案。00000011111195231187ABDCEFG哈夫曼编码方案:A:00B:10C:010D:110E:111F:0110G:011151510261945等长编码的长度:3哈夫曼编码的平均长度:(2×9+3×5+4×2+4×3+2×11+3×7+3×8)/45=2.67该编码方案的压缩比是多少?(3-2.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025宁夏德润农业发展投资集团有限公司招聘笔试历年备考题库附带答案详解
- 2025四川波鸿实业有限公司招聘四川威斯卡特工业有限公司绵阳分公司采购工程师岗位测试笔试历年常考点试题专练附带答案详解
- 1-溴-2-甲基丙烷(CAS号:78-77-3)理化性质与危险特性一览表
- 2025年网络安全建设题库及答案
- 程序员代码能力测试面试指南
- 环保设备销售工程师面试问题与答案参考
- 2026年中国机顶盒市场供需预测研究报告
- 物流公司运输部总经理面试问题集
- 政府机关信息技术主管面试题目参考
- 形势和政策题目及答案
- 穿越机入门教学课件
- 《二次根式的混合运算》教学设计
- 地质灾害危险性评估方案报告
- 感术行动培训课件
- DB44∕T 2552-2024 药物临床试验伦理审查规范
- 血管外科第三集讲解
- 跨区域文化协作-洞察及研究
- 2025 易凯资本中国健康产业白皮书 -生物制造篇(与茅台基金联合发布)
- 产业经济学(苏东坡版)课后习题及答案
- T/CECS 10227-2022绿色建材评价屋面绿化材料
- 区域医学检验中心项目建设方案
评论
0/150
提交评论