6.6 Huffman树及其应用 王 玲.

Slides:



Advertisements
Similar presentations
四川财经职业学院会计一系会计综合实训 目录 情境 1.1 企业认知 情境 1.3 日常经济业务核算 情境 1.4 产品成本核算 情境 1.5 编制报表前准备工作 情境 1.6 期末会计报表的编制 情境 1.2 建账.
Advertisements

LOGO 《房地产估价》特色教学 会计金融学院 陈艳梅. Company Logo Contents 五、实例 四、教学方法 三、课程设计思路 二、课程设计理念 一、课程介绍.
主编:邓萌 【点按任意键进入】 【第六单元】 教育口语. 幼儿教师教育口 语概论 模块一 幼儿教师教育口语 分类训练 模块二 适应不同对象的教 育口语 模块三 《幼儿教师口语》编写组.
第一組 加減法 思澄、博軒、暐翔、寒菱. 大綱 1. 加減法本質 2. 迷思概念 3. 一 ~ 七冊分析 4. 教材特色.
Your company slogan 统计调查和统计整理. Your company slogan 统计调查和统计整理.
海南医学院附 院妇产科教室 华少平 妊娠合并心脏病  概述  妊娠、分娩对心脏病的影响  心脏病对妊娠、分娩的影响  妊娠合病心脏病的种类  妊娠合并心脏病对胎儿的影响  诊断  防治.
L o g o ‘ 中国金融架构 - 资产管理 ’ 培训纪要 —— 海峰科技 - 黄埔零期人才培养计划 第三次培训 时间: 2015 年 5 月 18 日 地点:海峰科技有限公司会议室 主讲人:林虹总 参会人员:李彪、李冉旭、涂珍妮、张竞月、周文琴、裴盈、申世宏 记录人:张竞月 & 李彪.
植树节的由来 植树节的意义 各国的植树节 纪念中山先生 植树节的由来 历史发展到今天, “ 植树造林,绿化祖国 ” 的热潮漫卷 了中华大地。从沿海到内地,从城市到乡村,涌现了多少 造林模范,留下了多少感人的故事。婴儿出世,父母栽一 棵小白怕,盼望孩子和小树一样浴光吮露,茁壮成长;男 女成婚,新人双双植一株嫩柳,象征家庭美满,幸福久长;
客户协议书 填写样本和说明 河南省郑州市金水路 299 号浦发国际金融中 心 13 层 吉林钰鸿国创贵金属经营有 限公司.
浙江省县级公立医院改革与剖析 马 进 上海交通大学公共卫生学院
第二章 环境.
第一週 ●認識食品添加物 ●食物所含藥效的保健作用
教师招聘考试 政策解读 讲师:卢建鹏
第2期技職教育再造方案(草案) 教育部 101年12月12日 1 1.
企业员工心态管理培训 企业员工心态管理培训讲师:谭小琥.
太仓有道软件科技有限公司 专注于软件开发 ————.
加快经济发展方式转变的创新策略 上海市科委 吴寿仁博士.
第四章 形象思维 想象比知识更重要,因为知识是有限的,而想象力概括着世界上的一切,推动着进步,并且是知识进化的源泉,严格地说想象力是科学研究中的实在因素。 ——爱因斯坦.
上海市教育信息化十二五规划建设 上海远程教育集团
服务贸易等项目对外支付税务备案 2014年5月.
第六章健康教育 神木职教中心医学系.
国家基本药物处方集培训 ——心血管系统用药 药学部 2014年4月.
第十三章 公务员的工资福利和保险.
有道妇幼保健综合管理系统软件 版本号:V1.0.
Chapter 06 Tree and binary tree 第六章 树和二叉树
支付宝案例分析 第五组:陈淑静 白丽丽 张瑞霞 郭少华 双十一 Company Logo.
江苏民俗 ———— 盐城
在新常态中积极 推进新农合制度健康持续发展
學校層級辦理補救教學 之推動重點與權責 服務單位:臺北市文山區萬芳國民小學 演 講 者:吳俊傑主任.
第6章 二叉树和树 前面的章节主要讨论的是线性结构,二叉树和树属于非线性的结构。遍历非线性结构比线性结构要麻烦。
良心處方 Click to start..
技术试验及其方法 制作者 : 贾琼瑞
中鸣虚拟搜救比赛项目 (一人) 现场主题创作(40%)(一人) 3D虚拟搜救(60%)(一人).
信息与信息技术
金融市场格局及金融机构概述 ——海峰科技-黄埔零期人才培养计划 第六次培训 时间:2015年5月25日 地点:海峰科技有限公司会议室
LOGO 呃 逆 河南中医学院第一临床医学院 中医内科 张琳琪.
海关特殊监管区域整合优化情况介绍 加贸司 杨旭 二零一四年九月十一日.
心脏病小组与常见病小组医院见习报告 Company Logo.
计算机软件技术基础 数据结构与算法(4).
第六章 树和二叉树.
第6章 树和二叉树 (Tree & Binary Tree)
第5章 树( Tree )和二叉树 5.1 树的基本概念 5.2 二叉树 5.3 遍历二叉树和线索二叉树 5.4 树和森林
CH6 树和二叉树 6.1 树的定义和基本术语 6.2 二叉树 6.3 遍历二叉树和线索二叉树 6.4 树和森林
数据结构 第六章 树与二叉树 深圳大学计算机系 蔡茂国.
数据结构 第6章 树和二叉树 什么是树和二叉树?? 二叉树的遍历 数据结构.
任务1 润滑元器件安装.
情境2-1 增值税 四川财经职业学院.
活化教學.
电动装卸机械修理 天津港职工培训中心 王琨.
第六章 树和二叉树 6.1 树的定义和基本术语 6.2 二叉树 6.3 遍历二叉树和线索二叉树 6.4 树和森林 6.6 赫夫曼树及其应用.
Chapter 5 Tree & Binary Tree
数 据 结 构 Ch.6 树 计 算 机 学 院 肖明军
哈夫曼编码.
第六章 二叉树和树 6.1树的基本概念 6.2二叉树 6.3二叉树遍历 6.4线索二叉树 6.5树和森林 6.6树的应用(霍夫曼树及其编码)
第六章 树和二叉树.
教 师:曾晓东 电 话: E_mail: 计算机软件技术基础 教 师:曾晓东 电 话: E_mail:
陈海明 副教授 信息学院 计算机系 电子信息类非计算机专业选修课 程序设计实践 陈海明 副教授 信息学院 计算机系
第四週餐飲管理/概論 1.餐飲業的組織特質與組織架構 2.餐飲部門工作任務和職責.
餐飲經營型態與組織架構 第一節 餐飲業的類型
Tree & Binary Tree.
第六章 树和二叉树 £6.1 树 £6.2 二叉树 £6. 3 二叉树的存储结构 £6.4 二叉树的遍历与线索化 £6.1.1 树的定义
第六章 树和二叉树 学习要点 理解树的定义和基本术语,重点了解二叉树的定义、性质、存储结构; 掌握二叉树遍历的递归算法及它的典型运算;
中医药的未来 中国传统文化的未来 LOGO.
105學年度 新北市英語歌曲演唱競賽 志工工作會議 105年11月18日 9:30-10:00 碧華國小演講廳 新北市三重區碧華國小.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
树和二叉树(一).
有道售后客户投诉情况管理系统软件 软件用户手册.
中药饮片调剂技术 中药饮片调剂室基本设施.
师德建设汇报 沈毅.
本节内容 1.二叉排序树的定义 2.二叉排序树的查找操作 3.二叉排序树的插入操作 4.二叉排序树的删除操作 5.二叉排序树的总结
Presentation transcript:

6.6 Huffman树及其应用 王 玲

教学内容 远程通信中的一个问题 1 最优二叉树——Huffman树 2 Huffman编码及其实现 3 《数据结构》

远程通信中的一个问题 信道 设有一段信息(报文)需要编码传输: CASTCASTSATEATATASA 发送端(编码) 对 接收端(解码) 001000011100001000011100011000… CASTCASTSATEATATASA 《数据结构》

解决方案1 等长编码: CASTCASTSATEATATASA A : 000, C :001, E:010, S :011, T :100 信息编码如下: 001000011100001000011100011000 100010000100000100000011000 总编码长度为:(7+2+1+4+5) * 3 = 57(bits) 《数据结构》

解决方案2 不等长编码,例如: A : 0, C :1, E:10, S :11, T :100 信息编码如下(34bits): 1011100101110011010010010001000110 出现了二义问题。 采用前缀码。 Huffman编码是最优前缀码,要借助Huffman 树来完成编码和解码。 《数据结构》

最优二叉树——Huffman树 带权路径长度WPL达到最小的二叉树即为Huffman树(最优二叉树)。 1. 结点的路径长度 1. 结点的路径长度 2. 树的路径长度:树中结点的路径长度之和 3.结点的权及带权路径长度 若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。 结点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的权的乘积。 4.树的带权路径长度(WPL) 树的带权路径长度规定为所有叶子结点的带权路径长度之和。 《数据结构》

√ 最优二叉树——Huffman树 2 4 7 5 (b) 7 5 2 4 (c) 7 5 4 (a) 2 最优二叉树(Huffman树):给定n个权值{w1,w2,…,wn},构造一棵有n个结点的二叉树,使每个叶结点带权为wi,则其中带权路径长度WPL最小的二叉树称为最优二叉树。 2 4 7 5 (b) 7 5 2 4 (c) 7 5 4 (a) 2 √ 《数据结构》

Huffman树的一个实例 最佳判定树 考试成绩分布表 《数据结构》

Huffman树的一个实例 <60? <70? <80? <90? 0.10 0.15 0.25 0.35 < 不及格 及格 中 良 优 <60? <70? <80? <90? 0.10 0.15 0.25 0.35 ≥ < WPL = 0.10*1+0.15*2+0.25*3+0.35*4+0.15*4 = 3.15 对10000个成绩,则总共需要31500次比较。 《数据结构》

Huffman树的一个实例 <60? <70? <80? <90? 0.10 0.15 0.25 0.35 < 不及格 及格 中 良 优 <60? <70? <80? <90? 0.10 0.15 0.25 0.35 ≥ < WPL = 0.10*3+0.15*3+0.25*2+0.35*2+0.15*2 = 0.3+0.45+0.5+0.7+0.3 = 2.25 对10000个成绩,则总共需要22500次比较。 《数据结构》

Huffman树的构造思路 选择 合并 初始化 根据给定的n个权值{w1,w2,…,wn}构成n棵二叉树的集合F={T1,T2,…,Tn),其中每棵二叉树Ti中只有一个带权为wi的根结点,左右子树为空。 在F中选择两棵根结点权值最小的树作为左右子树构造一棵新的二叉树,且置新的二叉树的根结点的权值为左、右子树上根结点的权值之和。 在F中删除这两棵树,同时将新得到的二叉树加入F中。 重复,直到F中只含一棵树为止。这棵树就是Huffman树。 《数据结构》

以{7,2,1,4,5}为权值集合构造Huffman树。 (1) 4 2 5 7 1 2 1 3 7 4 5 12 (4) 2 1 3 (2) 4 5 7 2 1 3 7 4 5 12 (5) 19 (3) 2 1 3 5 4 7 12 《数据结构》

练习: 以{ 9, 3, 7, 6, 12 , 5}为权值构造一棵Huffman树,并计算它的WPL。 13

Huffman编码及其实现 C E 3 A S T 7 12 19 回到最初的问题,传输: CASTCASTSATEATATASA A:7 4 5 《数据结构》

Huffman编码及其实现 C E 3 A S T 7 12 19 将Huffman树的左子树置0,右子树置1,这样每个叶子都获得一个码字: 1 2 4 5 WPL=7×1+5×2+2×4+1×4+4×3=41 这里的WPL就是编码的总长度。 《数据结构》

解码算法: C E 3 A S T 7 12 19 1 2 4 5 11000111101100011110111010110101001001110 CASTCASTSATEATATASA 《数据结构》

Huffman编码算法实现 weight parent lchild rchild 1.有n个叶结点的Huffman树中共有m=2n-1个结点,可将这些结点存储在一个一维数组中。 weight parent lchild rchild 结点结构 typedef struct{ unsigned int weight; unsigned int parent,lchild,rchild; }HTNode,*HuffmanTree; 2.可以采用动态分配的一维数组存储编码表。 typedef char ** HuffmanCode; 17 《数据结构》

1 7 2 5 3 4 - 6 例:以{7,5,2,4}为权值集合构造哈夫曼树。 2 4 5 7 weight parent lchild rchild 1 7 2 5 3 4 - 6 例:以{7,5,2,4}为权值集合构造哈夫曼树。 (1) 2 4 5 7 1 3 18

weight parent lchild rchild 1 7 2 5 3 4 6 - (2) 2 4 5 7 6 1 3 19

weight parent lchild rchild 1 7 2 5 6 3 4 11 - (3) 2 4 5 7 6 11 1 3 20

7 5 6 11 18 1 2 3 4 2 4 5 7 6 11 18 weight parent lchild rchild (4) 1 2 5 6 3 4 11 18 (4) 2 4 5 7 6 11 18 1 3 21

权值={ 5, 29, 7, 8, 14, 23, 3, 11 } weight parent lchild rchild 1 5 2 29 3 7 4 8 14 6 23 11 9 - 10 12 13 15 1.HT的初态 5 1 29 2 7 3 8 4 23 6 11 14

i = n+1 = 9 在前 i -1 = 8 个元素中 找无父结点且有最小及 次小权值元素的下标 s1 = 7 s2 = 1 构造新结点,存储于 下标为 i = 9 的元素中 权值=最小及次小权和 = 5 + 3 = 8 构造以元素9为根的子 二叉树 index weight parent lchild rchild 1 5 2 29 3 7 4 8 14 6 23 11 9 10 12 13 15 9 8 7 1 2019/2/15

i + 1 = 10 在前 i -1 = 9 个元素中 找无父结点且有最小及 次小权值元素的下标 s1 = 3 s2 = 4 新结点存储于元素10 权值 = 7 + 8 = 15 构造元素10的子二叉树 no weight parent lchild rchild 1 5 9 2 29 3 7 10 4 8 14 6 23 11 15 12 13 2019/2/15

i + 1= 11 在前 i -1 = 10 个元素中 找无父结点且有最小及 次小权值元素的下标 s1 = 9 s2 = 8 新结点存储于元素11 权值 = 8 + 11 = 19 构造元素11的子二叉树 no weight parent lchild rchild 1 5 9 2 29 3 7 10 4 8 14 6 23 11 15 19 12 13 2019/2/15

i + 1 = 12 在前 i -1 = 11 个元素中 找无父结点且有最小及 次小权值元素的下标 s1 = 5 s2 = 10 新结点存储于元素12 权值 = 14 + 15 = 29 构造元素12的子二叉树 no weight parent lchild rchild 1 5 9 2 29 3 7 10 4 8 14 12 6 23 11 15 19 13 2019/2/15

i + 1= 13 在前 i -1 = 12 个元素中 找无父结点且有最小及 次小权值元素的下标 s1 = 11 s2 = 6 新结点存储于元素13 权值 = 19 + 23 = 42 构造元素13的子二叉树 no weight parent lchild rchild 1 5 9 2 29 3 7 10 4 8 14 12 6 23 13 11 15 19 42 2019/2/15

i + 1 = 14 在前 i -1 = 13 个元素中 找无父结点且有最小及 次小权值元素的下标 s1 = 2 s2 = 12 新结点存储于元素14 权值 = 29 + 29 = 58 构造元素14的子二叉树 no weight parent lchild rchild 1 5 9 2 29 14 3 7 10 4 8 12 6 23 13 11 15 19 42 58 2019/2/15

i + 1 = 15 在前 i -1 = 14 个元素中 找无父结点且有最小及 次小权值元素的下标 s1 = 13 s2 = 14 新结点存储于元素15 权值 = 42 + 58 = 100 构造元素15的子二叉树 no weight parent lchild rchild 1 5 9 2 29 14 3 7 10 4 8 12 6 23 13 11 15 19 42 58 100 2019/2/15

2.HT的终态 5 3 14 8 11 15 29 58 19 42 23 100 weight parent lchild rchild 2 29 14 3 7 10 4 8 12 6 23 13 11 15 19 42 58 100 2.HT的终态 5 1 3 7 14 8 4 11 9 15 10 29 2 12 58 19 42 13 23 6 100

int Huffman( HuffmanTree HT, int *w , int n ) { for( i = 1 ; i < 2*n ;i++) { // 初始化 HT[i].parent = HT[i].lchild = HT[i].rchild = 0; if (i <= n) HT[i].weight = w[i-1]; // 前 n 个结点赋权值 else HT[i].weight = 0; // 后 n-1 个结点预留 } //初始化结束 // 待续… 2019/2/15

int Huffman( HuffmanTree HT, int *w , int n ) { // …续 for ( i = n+1 ; i <=2*n-1 ; i++) { // 构造 HUFFMAN树 Select ( HT , i - 1 , &s1, &s2 ) ; // 最小及次小权元下标 HT[s1].parent = i; // 设置新根结点 HT[s2].parent = i; HT[i].weight = HT[s1].weight + HT[s2].weight ; // 权值和 HT[i].lchild = s1; // 根结点与子结点链接 HT[i].rchild = s2; } //结束构造 } 2019/2/15

void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int w[ ],int n){ if ( n<=1) return 0; m=2*n-1; HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode)); for (i=1;i<=m;i++) if (i<=n) HT[i]={w[i],0,0,0}; else HT[i]={0,0,0,0}; for (i=n+1;i<=m;i++) {//建立Huffman树 Select(HT,i-1,s1,s2); HT[s1].parent=i; HT[s2].parent=i; HT[i].lchild=s1; HT[i].rchild=s2; HT[i].weight= HT[s1].weight+ HT[s2].weight; } 33

//求叶到根逆向求每个字符的Huffman编码 HC=(HuffmanCode)malloc((n+1)*sizeof(char*)); cd=(char*)malloc(n*sizeof(char)); cd[n-1]=‘\0’; for (i=1;i<=n;i++) {start=n-1; for (c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent) if (HT[f].lchild==c) cd[- -start]=‘0’; else cd[--start]=‘1’; HC[i]=(char*)malloc((n-start)*sizeof(char)); strcpy(HC[i],&cd[start]); } free(cd); }//HuffmanCoding 34

算法 Huffman译码 void HuffmandeCoding(HuffmanTree HT,int n){ m=2*n-1; i=m; while ((ch=getchar())!=‘\n’){ if (i<=n){ printf(HT[i].data); i=m;} if (ch==‘0’) i=HT[i].lchild; else i=HT[i].rchild; }//while }// HuffmandeCoding 35

小结 问题1 Huffman树的不唯一性是否会影响到Huffman编码? 问题3 方法能否扩展到k元Huffman编码? 问题2 《数据结构》

本章小结 第6章结束 树 森林 先、后根遍历 层次遍历 孩子--兄弟 存储结构 遍历 1.定义和性质 顺序结构 2.存储结构 二叉链表 二叉树 森林 顺序结构 链式结构 2.存储结构 二叉链表 三叉链表 中序遍历 后序遍历 先序遍历 层次遍历 3.遍历 遍历 Huffman树 应用 要求熟悉树和二叉树的定义和有关术语; 理解和记住二叉树的性质; 熟练掌握二叉树的顺序存储结构和链式存储结构。 遍历二叉树是二叉树中各种运算的基础,希望能灵活运用各种次序的遍历算法,实现二叉树的其他运算。 二叉树的线索化,目的是加速遍历过程和有效利用存储空间,希望熟练掌握。 并能掌握: 树和二叉树之间的转换方法,存储树的双亲表示法、孩子表示法和孩子兄弟法。 最后,对树和森林的遍历、最优二叉树的特性,建议读者要理解。 先序线索树 中序线索树 后序线索树 先 序 遍 历 中 4.线索化 线索二叉树 Huffman编码

习题 一、判断题 1.二叉树是树的特殊形式。 2.一棵度为2的树就是一棵二叉树。 3.由树转换成二叉树,其根结点的右子树总是空的。 4.如果结点A有3个兄弟,而且B是A的双亲,则B的度是5。 5.给定二叉树的先序遍历序列和后序遍历序列,就能惟一地确定一棵二叉树。 6.哈夫曼树是带权路径长度最短的树,路径上权值较大的结点离根较近。

二、填空题 1.对于一个具有n个结点的二叉树,当它为一棵_________二叉树时,具有最小高度,即为_________,当它为一棵单支树时具有具有最大高度,即为_________。 2.对于一个具有n个结点的二叉树,当它存储在二叉链表中时,其指针字段的总数为_________个,其中_________个用于链接孩子结点,_________个空闲。 3.一棵深度为k的满二叉树的结点总数为___________,一棵深度为k的完全二叉树的结点总数的最小值为___________,最大值为___________。 4. 由三个结点构成的二叉树,共有_________种不同的结构。

5. 设深度为k的二叉树上只有度为0或度为2的结点,则这类二叉树上所含结点总数至少为_____。 6.具有n个结点的完全二叉树,若按层次从上到下、从左到右对其编号(根结点为1号),则编号最大的分支结点序号为_______,编号最小的分支结点序号为_______,编号最大的叶子结点序号为________,编号最小的叶子结点序号为________。 7.有m个叶子结点的哈夫曼树,其结点总数为_______。 8.某二叉树的前序遍历结点访问顺序为ABDGCEFH,中序遍历结点访问顺序为DGBAECHF,则其后序遍历结点访问顺序为_____。

三、 简答题 1. 遍历序列具有如下特点的二叉树具有什么特征?(注意:二叉树至少有两个结点) 先序序列和后序序列正好相反 三、 简答题 1. 遍历序列具有如下特点的二叉树具有什么特征?(注意:二叉树至少有两个结点) 先序序列和后序序列正好相反 先序序列和中序序列正好一致 中序序列和后序序列正好一致 中序序列是一个有序序列 2.具有3个结点的树和3个结点的二叉树的有多少种不同形态,请分别画出来。

3. 已知一棵二叉树的中序序列和后序序列分别为BDCEAFHG和DECBHGFA,画出这棵二叉树。 4.对于权值W={14,15,7,4,20,3},试给出相应的哈夫曼树,并计算其带权长度。

Click to edit company slogan . Thank You ! Click to edit company slogan .